Catalog - Template anpassen zwecks CSS editing für Feld

Einklappen
X
 
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge
  • mavnet
    Contao-Nutzer
    • 08.03.2012
    • 127

    #1

    Catalog - Template anpassen zwecks CSS editing für Feld

    Hallo,

    komme leider mal wieder nicht weiter und mittlerweile sind mir sämtliche Ideen ausgegangen .
    Würde euch daher mal mit einer weiteren Frage belästigen ;-).

    Ich habe ein Catalog-Feld namens 'Anzeigen_Titel', welches im Frontend ausgegeben wird.
    Den Titel möchte ich nun mit css editieren (fettere Schrift etc.).
    Sowie ich es bisher verstanden habe, muss dafür das Template (catalog_simple.tpl) angepasst werden.

    Nach der Ausgabe des Arrays zwecks
    PHP-Code:
    <?php $this->showTemplateVars(); ?>
    fand ich heraus,
    dass 'Anzeigen_Titel' in der Variable namens [VALUE] ausgegeben wird.
    Soweit so gut, in dieser Variable wird nun aber auch der 'Anzeigen_Text' ausgegeben, sodass ich 'Anzeigen_Titel' nicht einzeln bearbeiten konnte.

    Also habe ich meinem Template folgenden Code hinzugefügt, um 'Anzeigen_Titel' als Überschrift 'h3' auszugeben und dann mit css bearbeiten zu können:

    PHP-Code:
    <h3><?php echo $entry['data']['anzeigen_titel']['value']; ?></h3>
    Das Ergebnis davon war, dass mein Titel nun dreifach dargestellt wird.
    Also habe ich BE im Modul unter 'Sichtbare Felder' das Anzeigen der Überschrift deaktivert - ohne Besserung.

    Dann dachte ich, es wäre vielleicht der richtige Weg diesen Code aus dem Template zu entfernen:

    PHP-Code:
    <div class="value"><?php echo $data['value']; ?></div>
    , da dieser ja enscheinend schon das gesamte Value inkl. Überschrift ausgibt.
    So stand dann erstmal
    PHP-Code:
    <h3><?php echo $entry['data']['anzeigen_titel']['value']; ?></h3>
    alleine da und es wurde gar kein Titel mehr ausgegeben (soweit ich mich nach ein paar Stunden rumprobieren erinnern kann - jedenfalls hat das auch nicht funktioniert.

    Meine catalog_simple.tpl sieht aktuell standardmäig so aus:

    PHP-Code:
    <?php if (count($this->entries)): ?>
    
    <div class="layout_simple">
    
    <?php foreach ($this->entries as $entry): ?>
    <div class="item<?php echo $entry['class'] ? ' '.$entry['class'] : ''; ?>">
    <?php foreach ($entry['data'] as $field=>$data): ?>
    <?php if (!in_array($field, array('catalog_name','parentJumpTo'))): ?>
    <div class="field <?php echo $field; ?>">
        <div class="label"><?php echo $data['label']; ?></div>
        <div class="value"><?php echo $data['value']; ?></div>
    </div>
    <?php endif; ?>
    <?php endforeach; ?>
    
    <?php if ($entry['showLink'] && $entry['link']): ?>
    <div class="link"><?php echo $entry['link']; ?></div>
    <?php endif; ?>
    <?php if ($entry['linkEdit']): ?>
    <div class="linkEdit"><?php echo $entry['linkEdit']; ?></div>
    <?php endif; ?>
    </div>
    
    <?php endforeach; ?>
    </div>
     
    <?php else: ?>
    
    <?php if ($this->condition): ?>
    <div class="condition"><?php echo $this->condition; ?></div>
    <?php else: ?>
    <p class="info">There are no entries matching your search.</p>
    <?php endif; ?>
    
    <?php endif; ?>

    Was mache ich falsch?
  • Silvano
    Contao-Fan
    • 12.09.2010
    • 326

    #2
    Hallo mavnet

    Mit dem folgenden Abschnitt gibt es jeweils der Feldname UND der Inhalt von diesem Feld aus.
    PHP-Code:
    <div class="field <?php echo $field; ?>"> 
        <div class="label"><?php echo $data['label']; ?></div> 
        <div class="value"><?php echo $data['value']; ?></div> 
    </div>
    Wenn ich Catalog verwende, nehme ich diese beiden Einträge eigentlich immer raus, und verwende dann eigentlich jeweils für jedes Feld einen eigenen Eintrag (so wie Du es gemacht hast).

    PHP-Code:
    <?php echo $entry['data']['anzeigen_titel']['value']; ?>
    Klar, wenn Du dann "schnell" ein zusätzliches Feld willst, musst Du noch das Template anpassen gehen, aber der Vorteil ist, das Du jedes Feld selber gestalten kannst. Also kannst Du um deinen Eintrag ein <div> oder was auch immer legen oder auch Inline-Styles verwenden.

    PHP-Code:
    <div class="anzeigen_titel"><?php echo $entry['data']['anzeigen_titel']['value']; ?></div>
    Eben, wie geschrieben, nimm die beiden Einträge label und value aus deinem Template raus, und füge für jedes Feld einen solche $entry Zeile ein und ggf. um jede Zeile (oder auch um eine Gruppe) ein <div>.
    Zuletzt geändert von Silvano; 02.04.2012, 00:00.
    webmate gmbh (off. Contao-Partner)

    Kommentar

    • mavnet
      Contao-Nutzer
      • 08.03.2012
      • 127

      #3
      Es will, aber nicht richtig ....

      Hi,

      danke für deine Antwort :-), das hat vom Verständnis her schonmal sehr geholfen.
      Habe aber noch das Problem, dass der 'anzeigen_titel' nun dreifach im Frontend ausgegeben wird.

      Wenn ich 'Anzeigen_Titel' im BE als Sichtbares Feld deaktiviere, wird der Titel trotz

      PHP-Code:
      <div class="anzeigen_titel"><?php echo $entry['data']['anzeigen_titel']['value']; ?></div>
      im Template überhaupt nicht ausgegeben.
      Wenn ich das Feld wieder als sichtbar aktivieren, dann wieder dreifach.

      Verstehe das nicht so ganz, entweder dreifach oder gar nicht...

      Das Template sieht aktuell bei mir so aus:

      PHP-Code:
      <?php if (count($this->entries)): ?>
      
      <div class="layout_simple">
      
      <?php foreach ($this->entries as $entry): ?>
      <div class="item<?php echo $entry['class'] ? ' '.$entry['class'] : ''; ?>">
      <?php foreach ($entry['data'] as $field=>$data): ?>
      <?php if (!in_array($field, array('catalog_name','parentJumpTo'))): ?>
      
      <div class="field <?php echo $field; ?>">
      
      <div class="anzeigen_titel"><?php echo $entry['data']['anzeigen_titel']['value']; ?></div>
      
        
      </div>  
      
      <?php endif; ?>
      <?php endforeach; ?>
      
      <?php if ($entry['showLink'] && $entry['link']): ?>
      <div class="link"><?php echo $entry['link']; ?></div>
      <?php endif; ?>
      <?php if ($entry['linkEdit']): ?>
      <div class="linkEdit"><?php echo $entry['linkEdit']; ?></div>
      <?php endif; ?>
      </div>
      
      <?php endforeach; ?>
      </div>
       
      <?php else: ?>
      
      <?php if ($this->condition): ?>
      <div class="condition"><?php echo $this->condition; ?></div>
      <?php else: ?>
      <p class="info">There are no entries matching your search.</p>
      <?php endif; ?>
      
      <?php endif; ?>

      Habe ich noch etwas vergessen?

      Gruß,
      mavnet

      Kommentar

      • Andreas
        Contao-Urgestein
        • 19.06.2009
        • 7709

        #4
        Ich habe dafür ne Vorlage, die müsstest du eigentlich leicht an deine Bedürfnisse anpassen können. Das Hauptproblem bei dir ist, dass du das mit der foreach-Schleife nicht verstanden hast, deshalb hast du das z.B. 3 mal.
        Angehängte Dateien
        Bitte!
        Vor Anfragen im Forum HTML validieren.
        Codesnippets hier im Froum sauber einrücken. Nur Tabs o. nur Leerzeichen verwenden.

        Vielen Dank an alle Wunschlistenerfüller
        Andreas Burg, Web Solutions

        Kommentar

        • mavnet
          Contao-Nutzer
          • 08.03.2012
          • 127

          #5
          Danke !!

          Herzlichen Dank für eure großartige Hilfe !!

          Ich werde mir die Sache mit der fore each - Schleife nochmal genauer angucken und verstehen müssen,
          da wird die Vorlage sehr gut helfen! :-).



          Um die Catalog-Felder ansich einzeln mit css zu editieren habe ich zufällig diese Lösung gefunden:

          Im Backend unter 'Themes' meine css ausgewählt und eine neue Formatdefinition hinzugefügt:

          Code:
          .anzeige_titel
          Dieser Klassenname entspricht dem Spaltennamen, dem ich dem Feld zugewiesen habe.
          Ich wusste noch gar nicht, dass unter contao der Spaltenname automatisch = css klasse ist!

          Auf die Art und Weise kann ich ja jetzt auch mein Feld '.anzeige_text' .... '.anzeige_bild' usw. einzeln via css stylen.

          Danke nochmal !

          Viele Grüße,
          Mavnet

          Kommentar

          • Andreas
            Contao-Urgestein
            • 19.06.2009
            • 7709

            #6
            Mit Firebug kannst du im Firefox die CSS-Selektoren herausfinden. Im Normalfall benötigt man keine extra Klassen oder IDs. Es sind schon jede Menge vorhanden, meistens mehr, als man benötigt.
            Bitte!
            Vor Anfragen im Forum HTML validieren.
            Codesnippets hier im Froum sauber einrücken. Nur Tabs o. nur Leerzeichen verwenden.

            Vielen Dank an alle Wunschlistenerfüller
            Andreas Burg, Web Solutions

            Kommentar

            • mavnet
              Contao-Nutzer
              • 08.03.2012
              • 127

              #7
              Hi,
              ja Firebug benutze ich auch.
              In dem Fall hat es mich verwirrt, dass die div-Klassen
              "field anzeige_text" anstatt "anzeige_text" hießen, aber wieder was dazu gelernt ;-).

              Dennoch vielen Dank für den Tipp.

              Viele Grüße

              Kommentar

              • xtra
                Maintainer
                • 02.07.2009
                • 2007

                #8
                Zitat von mavnet Beitrag anzeigen
                Ich wusste noch gar nicht, dass unter contao der Spaltenname automatisch = css klasse ist!
                Ist auch nicht in Contao so, sondern nur im Catalog um eben genau das stylen mit CSS einfacher zu machen.

                Zitat von mavnet Beitrag anzeigen
                Hi,
                ja Firebug benutze ich auch.
                In dem Fall hat es mich verwirrt, dass die div-Klassen
                "field anzeige_text" anstatt "anzeige_text" hießen, aber wieder was dazu gelernt ;-).
                Das ist auch aus gutem Grunde so, denn so kannst du unterscheiden, dass es auch wirklich ein catalog field ist.

                Bsp:
                Code:
                <div class="anzeige_text">Hier koennte ihre Werbung stehen.</div>
                [...]
                <div class="field anzeige_text">blabla vom Catalog</div>
                [...]
                Wenn du nun ".anzeige_text" stylest, wird dann sowohl obiges Werbebanner rot als auch der Catalog Text:
                Code:
                .anzeige_text
                {
                  color: red;
                }
                Wenn du aber ".field.anzeige_text" stylest, wird dann nur der Catalog Text rot:
                Code:
                .field.anzeige_text
                {
                  color: red;
                }
                Bedenke stets: Wenn Du ungenaue oder unzureichende Angaben machst, so koennte dies die Bearbeitung deiner Frage endlos verzoegern (oder sogar dazu fyhren, dass ich zu viel nachdenken muss und die Antwort vergesse!). Kein Support per PN.

                Kommentar

                • mavnet
                  Contao-Nutzer
                  • 08.03.2012
                  • 127

                  #9
                  genial, danke ! :-)

                  Kommentar

                  Lädt...