Super! Vielen Dank!
Ankündigung
Einklappen
Keine Ankündigung bisher.
CustomElements und CustomCatalog Template-Variablen
Einklappen
Das ist ein wichtiges Thema.
X
X
-
Jeder Eintrag hat automatisch ALLE Felder bzw. alle sichtbar gewählten Felder, da es eine SQL Tabelle ist.
Die Frage heisst wohl eher: Nur Einträge, die einen bestimmten Feldwert haben z.B. eine gesetzte Checkbox.
Das wäre eine einfache if Abfrage auf den Feldwert des Checkbox-Feldes.
Wenn man bereits die SQL Abfrage einschränken will, kann man auch in den Liste-Modul Einstellungen unten das Feld "eigene SQL Bedingung" nutzen z.B.
myCheckbox=1
Kommentar
-
Zitat von Tim Beitrag anzeigen
echo $this->field('myField')->attribute()->description;
ist das Beschreibungsfeld.
Eine Mehrfachauchwahl ist ein blob. Da muss du das value Array zerlegen.
Für Select-Felder scheint das hier nicht zu funktionierenPHP-Code:echo $this->field('myField')->attribute()->description;
PHP-Code:echo deserialize($entry->field('myfield')->attribute()->description;
Kommentar
-
echo $this->field('myField')->attribute()->get('description');
Und bei der Mehrfachauswahl (CheckboxMenu) habe ich dies hier ohne Erfolg versucht:
Hier bitte die Frage nicht aus dem Auge verlieren. Die Frage war nach den Labels. Das ist ein Aufruf auf ->value() des Feldes.Zuletzt geändert von Tim; 25.01.2016, 10:32.
Kommentar
-
Sorry, aber bei deiner echos liefern kein Ergebnis
Das Feld ist ein Select-Feld namens "abfahrtsort"
weder
PHP-Code:echo $this->field('abfahrtsort')->attribute()->get('description');
PHP-Code:echo $this->field('abfahrtsort')->attribute()->description;
PHP-Code:echo $entry->field('abfahrtsort')->value();
Für die Mehrfachauswahl
PHP-Code:echo deserialize($entry->field('zustiegsmoeglichkeiten')->value());
PHP-Code:echo deserialize($entry->field('zustiegsmoeglichkeiten')->attribute()->get('description');
Hier noch das deserialisierte Array für den Value, das einwandfrei funktioniert
PHP-Code:<?php
$ojbCCZustieg = deserialize($entry->field('zustiegsmoeglichkeiten')->value());
if(is_array($ojbCCZustieg) && !empty($ojbCCZustieg)):
{
foreach($ojbCCZustieg as $Zustieg): ?>
<li>
<?php echo $Zustieg; ?>
</li>
<?php
endforeach;
}
endif
?>Zuletzt geändert von eblick; 26.01.2016, 21:12.
Kommentar
-
Du mischt Äpfel mit Birnen! Bitte genau lesen.
Label != Backend-Beschreibungen.
Labels sind über den Value Array zu holen (oder bei einfachen Selects über das options Feld). Backend Felder sind Werte des Attributes (tl_pct_customelement_attribute).
Auch solltest du immer unterscheiden ob du in CC oder CE arbeitest. $this->field() greift in CC NUR im Reader oder auf den letzen Eintrag. CC Listen sind eine sammlung an Feldern je Eintrag!
PHP-Code:
<?php // wert aus feld: tl_pct_customelement_attribute.title, des Feldes alias="bild", innerhalb foreach Schleife
echo $entry->field('bild')->attribute()->get('title');
?>
<?php // werte aus feld: tl_pct_customelement_attribute.options, des Feldes alias="meinEinfachesSelect", innerhalb foreach Schleife
$options = deserialize($entry->field('meinEinfachesSelect')->attribute()->get('options'));
// label des 1. Werts
echo $options[0]['label'];
?>
<?php // alle werte
$arrData = $entry->field('bild')->attribute()->getData();
echo $arrData['id'] == $entry->field('bild')->attribute()->get('id'); // true
?>Zuletzt geändert von Tim; 27.01.2016, 10:39.
Kommentar
-
Hallo,
ich habe zwei CC (Videos und Mitglieder). CC Videos beinhaltet unter anderem das Attribut Video-ID (siehe Anhang). Bei den Mitgliedern kann ich über selectdb ein Video auswählen (siehe Anhang). Im Reader-Template möchte ich nun die Video-ID ausgeben, nicht die ID des Eintrags. Wie lautet der Code für die Ausgabe des Attributs Video-ID des im Mitglied gewählten Video-Eintrags aus dem CC-Video?
3 Bilder
Kommentar
-
Extremer Spezialfall. Bitte anfangen hier selbstständig Variablen per xdebug zu zerlegen bzw. var_dump. Dort steht alles drin.
Möglich sollte immer per Inserttag sein. CE hat eigene um Werte zu holen:
{{vault::ID-DES-ATTRIBUTES::ID-DES-CONTAO-ELEMENTS::TABELLE-DES-CONTAO-ELEMENTS}}
--
Man arbeitet in diesem Fall mit zwei Templates, die beide nichts vom anderen wissen! Im CE Template kommt man an alle Werte innerhalb des CE. (hier könnte man auch die Werte in neue Globale Variablen packen, die sind dann nach dem Abarbeiten überall geltend (kleiner workaround) )
--
Möglich innerhalb des CC Template könnte auch der direkte Eingriff in das Attribut-Objekt sein (hier muss man wirklich anfangen richtig zu debuggen, sonst rät man.)
echo $entry('myCustomElementAttribute')->raw->field('myAttribute')->value();
bzw.
echo $entry('myCustomElementAttribute')->attribute()->field('myAttribute')->value();
Hier bin ich mir selbst nicht sicher ob ->attribute() bereits abgearbeitet ist und damit die ->field() methode des CE Templates bereitsteht. Abgearbeitet ist es nach der ->render() bzw. ->html() methode ggf. diese vorher setzen.
Kommentar
-
Zitat von Tim Beitrag anzeigenMöglich sollte immer per Inserttag sein. CE hat eigene um Werte zu holen:
{{vault::ID-DES-ATTRIBUTES::ID-DES-CONTAO-ELEMENTS::TABELLE-DES-CONTAO-ELEMENTS}}
Also beispielsweise {{vault::ccc_video_id::4::ccc_videos_cc}
Kommentar
-
ID des Attributes ist ein numerischer Wert, die ID des Attribut-Datensatzes
Kommentar
-
CE: Eine bestimmte Gruppe inkl. aller Felder rendern
PHP-Code:foreach($this->group('myGroup')->fields as $field)
{
echo $field->html();
}
Code:<pre style="margin:11px 0 0">#0 templates/customelement_simple_kontakte.html5(46): __error(2, 'Invalid argumen...', '/kunden/482563_...', 46, Array) #1 system/modules/core/library/Contao/BaseTemplate.php(88): include('/kunden/482563_...') #2 system/modules/core/library/Contao/Template.php(277): Contao\BaseTemplate->parse() #3 system/modules/core/classes/FrontendTemplate.php(46): Contao\Template->parse() #4 system/modules/core/elements/ContentElement.php(284): Contao\FrontendTemplate->parse() #5 system/modules/pct_customelements/PCT/CustomElements/Frontend/ContentCustomElement.php(127): Contao\ContentElement->generate() #6 system/modules/core/library/Contao/Controller.php(476): PCT\CustomElements\Frontend\ContentCustomElement->generate() #7 system/modules/core/modules/ModuleArticle.php(213): Contao\Controller::getContentElement(Object(Contao\ContentModel), 'main') #8 system/modules/core/modules/Module.php(282): Contao\ModuleArticle->compile() #9 system/modules/core/modules/ModuleArticle.php(67): Contao\Module->generate() #10 system/modules/core/library/Contao/Controller.php(409): Contao\ModuleArticle->generate(false) #11 system/modules/core/library/Contao/Controller.php(269): Contao\Controller::getArticle(Object(Contao\ArticleModel), false, false, 'main') #12 system/modules/core/pages/PageRegular.php(133): Contao\Controller::getFrontendModule('0', 'main') #13 system/modules/core/controllers/FrontendIndex.php(267): Contao\PageRegular->generate(Object(Contao\PageModel), true) #14 index.php(20): Contao\FrontendIndex->run() #15 {main} </pre>
Kommentar
-
Jup, das ist falsch geschrieben.
Ein Array kann auch nicht wie ein Objekt behandelt werden. $this->group('...') // return array
foreach($this->group('myGroup') as $i => $field)
{
}
Kommentar
-
Hi josephkisler,
vielleicht so?:
PHP-Code:$objTarget = array()
$objResult = \Database::getInstance()->prepare("SELECT bild_copyright from meineTabelle")->execute();
while ($objResult->next())
{
$objTarget[] = $objResult->bild_copyright;
}
Kommentar
Kommentar