Eigene Templates trotz fehlender Auswahlmöglichkeit: Unterschied zwischen den Versionen

Aus Contao Community Documentation

K (Ergänzung)
K (Ergänzung:)
Zeile 56: Zeile 56:
 
= Ergänzung: =
 
= Ergänzung: =
  
Bei der Verwendung von strpos kann es zu kollisionen kommen, durch mögliche space-separierten klassennamen (substrings):
+
Bei der Verwendung von strpos kann es zu Kollisionen durch mögliche space-separierten Klassennamen (substrings) kommen:
  
'''Kollisionsfall für strpos:'''  
+
'''Kollisionsfall für strpos:'''<br />
 
class="klasse_1 meine_klasse_1"
 
class="klasse_1 meine_klasse_1"
  
 
'''suche nach:''' klasse_1
 
'''suche nach:''' klasse_1
  
daher würde folgende Abfrage eventuell sicherer sein:
+
Daher würde folgende Abfrage eventuell sicherer sein:
 
<source lang="php"><?php if(in_array('klasse_die_man_abfragen_will', explode(' ', $this->class))): ?></source>
 
<source lang="php"><?php if(in_array('klasse_die_man_abfragen_will', explode(' ', $this->class))): ?></source>
  
 
[[Benutzer:ways2web|ways2web]] 00:01, 02. Jun. 2011 (CEST) '''thx 2 Florian'''
 
[[Benutzer:ways2web|ways2web]] 00:01, 02. Jun. 2011 (CEST) '''thx 2 Florian'''

Version vom 1. Juni 2011, 23:08 Uhr

betrifft
TYPOlight Version Alle Versionen
Contao Version ab 2.9

Es gibt den ein oder anderen Fall, wo man gerne verschiedene Templates in Modulen nutzen möchte, aber leider nicht die Auswahl hat im Modul selber.

Da kann man sich mit einem kleinen Trick behelfen.

Man vergibt der Stelle wo man ein extra Template nutzen möchte eine bestimmte CSS Klasse und fragt diese ab. Je nach dem, läd man dann die passende eigene Template Datei.

Vorgehen Möglichkeit 1

  1. Kopie des Original Templates anlegen (siehe auch Templates_bearbeiten)
  2. Zwei neue Templates anlegen (oder mehr.. wenn man das braucht) die man dann später benutzen möchte:
    • template_1.tpl mit dem Oringinal Code
    • template_2.tpl mit dem geänderten
  3. Jetzt nimmt man sich das Template was immer geladen wird und bringt dort die If-Abfrage ein, welches Template man nun wirklich laden möchte:
<?php
  $pos = strpos($this->class, 'klasse_die_man_abfragen_will');
  if ($pos === false)
  {
    include('template_1.tpl');
  }
  else
  {
    include('template_2.tpl');
  }
?>

Vorgehen Möglichkeit 2 (mit nur einer Datei)

Man kopiert das entsprechende Core-Template in den Ordner roots/templates/ (per FTP oder übers BE) und erzeugt darin folgende Struktur.

<?php if (strpos($this->class, 'klasse-die-man-abfragen-will') !== false): ?>
  eigenes Template
<?php else: ?>
  default Template
<?php endif; ?>

Wichtig ist eben, das man die Klasse auch richtig vergibt ;-)

Möglichkeit 2 ist mehrfach getestet.

Dann hier noch ein paar Zusatzinfos warum mit strpos gearbeitet wird: [1] Kurz und knapp: mit einem einfachen Vergleich wie $this->class == 'meineklasse' kommt man nur dann klar, wenn nur eine Klasse vergeben wurde. strpos funktioniert aber auch dann, wenn mehr als nur eine Klasse da drinn vorhanden ist.


--MacKP 17:36, 29. Sep. 2010 (CEST)

Ergänzung:

Bei der Verwendung von strpos kann es zu Kollisionen durch mögliche space-separierten Klassennamen (substrings) kommen:

Kollisionsfall für strpos:
class="klasse_1 meine_klasse_1"

suche nach: klasse_1

Daher würde folgende Abfrage eventuell sicherer sein:

<?php if(in_array('klasse_die_man_abfragen_will', explode(' ', $this->class))): ?>

ways2web 00:01, 02. Jun. 2011 (CEST) thx 2 Florian

Ansichten
Meine Werkzeuge

Contao Community Documentation

noch 4 mal das Wort Abstraktion und ich beginne Zigaretten zu rauchen...

Martin Mildner
Navigation
Verstehen
Verwenden
Entwickeln
Verschiedenes
Werkzeuge