Gelöst: Probleme bei "Felder in eigenem Template ansprechen"
am 15.01.2008 - 11:54 Uhr in
Nachdem ich mühsam herausgefunden habe, dass über Contemplate CKK-Felder mit einer div-Flut ausgegeben werden(div feldname/div items/div item) und somit die Gestaltung speziell von Bildern (Rahmen um ein größeres Feld, statt direkt um das Bild) etwas schwerfällig ist, habe ich mir erstmals ein eigenes Template gegönnt. Das funktioniert auch ganz gut, ich habe aber vier Fragen, bei denen ich mit meinen äußerst geringen php-Kenntnissen nicht weiter komme. Ich hoffe, ihr könnt mir mit eurem Fachwissen etwas helfen.
1. Ich möchte mehrere Links (CKK Links) als Liste ausgeben. Funktioniert, aber wenn kein Link vorhanden ist, wird ein leeres Listenfeld ausgegeben. Wie bekomme ich eine if-Abfrage hinein? Mein Codeschnippsel:
<div class="interviewlink">
<ul>
<?php foreach ($field_interview_link as $item) {
print '<li>'. $item['view'] .'</li>';
}
?>
</ul>
</div>
2. Ich bekomme es nicht hin, fehlerfreien einen Array zu beschreiben, der mir mehrere Fotos nebeneinander ausgibt, wenn sie vorhanden sind. Ich habe mir übungsweise jetzt mit einem "Nix-Trennzeichen" ('') geholfen. Analog oben bei den Links werden Fotos ausgegeben, aber es kommt eine Fehlermeldung bei der Seitenausgabe mit: "Invalid argument supplied for foreach()"
<div class="zusatzfotos">
<?php foreach ($field_zusatzfotos as $item) {
print ''. $item['view'] .'';
}
?>
</div>
3. Vermutlich muss ich mir die Hand auf die Stirn hämmern, aber wie bekomme ich den Feldtitel inline und fett vor die Ausgabe dieses Feldes (unter Inaltstype/CKK_Feld ist er für die Ausgabe als inline aktiviert):
<div class="field-field-fotorechte">
<?php if ($field_fotorechte) print $node->field_fotorechte[0]['view'] ?>
</div>
4. Durch die Änderung des Templates (bzw. das neue) ist die Startseite mit den Teasern verhunzt. Statt eines Fotos mit Anrisstext wird dort jetzt alles mögliche an vorhandenen CKK-Feldern angegeben, obwohl diese für den Teaser unter Inhaltstyp deaktiviert sind. Im node-inhaltstyp.tpl.php spreche ich sie alle einzeln an (Zeile
<div class="node<?php if ($sticky) { print " sticky"; } ?><?php if (!$status) { print " node-unpublished"; } ?>" id="node-<?php print $node->nid; ?>">
<?php if ($page == 0): ?>
<h2 class="title">
unverändert). Liegt es daran? Wie kann ich den Teaser im Template kennzeichnen?
Vermutlich bin ich noch zu php-grün oder ich habe einen Logik-Blackout. Wäre schön, etwas Hilfe zu bekommen.
- Anmelden oder Registrieren um Kommentare zu schreiben
miweb schrieb 1. Ich
am 16.01.2008 - 07:26 Uhr
1. Ich möchte mehrere Links (CKK Links) als Liste ausgeben. Funktioniert, aber wenn kein Link vorhanden ist, wird ein leeres Listenfeld ausgegeben. Wie bekomme ich eine if-Abfrage hinein? Mein Codeschnippsel:
<div class="interviewlink">
<ul>
<?php foreach ($field_interview_link as $item) {
print '<li>'. $item['view'] .'</li>';
}
?>
</ul>
</div>
Warum nicht einfach
<div class="interviewlink">
<ul>
<?php
if(is_array($field_interview_link){
foreach ($field_interview_link as $item) {
if($item ['view'] != ''){
print '<li>'. $item['view'] .'</li>';
}
}
}
?>
</ul>
</div>
3. Vermutlich muss ich mir die Hand auf die Stirn hämmern, aber wie bekomme ich den Feldtitel inline und fett vor die Ausgabe dieses Feldes (unter Inaltstype/CKK_Feld ist er für die Ausgabe als inline aktiviert):
<div class="field-field-fotorechte">
<?php if ($field_fotorechte) print $node->field_fotorechte[0]['view'] ?>
</div>
Kannst du das nicht einfach in entsprechend Tags (strong) packen und dann davor schreiben?
4. Durch die Änderung des Templates (bzw. das neue) ist die Startseite mit den Teasern verhunzt. Statt eines Fotos mit Anrisstext wird dort jetzt alles mögliche an vorhandenen CKK-Feldern angegeben, obwohl diese für den Teaser unter Inhaltstyp deaktiviert sind. Im node-inhaltstyp.tpl.php spreche ich sie alle einzeln an (Zeile
<div class="node<?php if ($sticky) { print " sticky"; } ?><?php if (!$status) { print " node-unpublished"; } ?>" id="node-<?php print $node->nid; ?>">
<?php if ($page == 0): ?>
<h2 class="title">
unverändert). Liegt es daran? Wie kann ich den Teaser im Template kennzeichnen?
Vermutlich bin ich noch zu php-grün oder ich habe einen Logik-Blackout. Wäre schön, etwas Hilfe zu bekommen.
Jo, da könntest du recht haben. Gibt es denn nicht irgend eine Variable, welche sagt, ob es sich um einen Teaser handelt oder nicht? Dann könntest du einfach abfragen und dann für den Teaser eine andere Darstelltung wählen. Bin ich mir aber auch nicht sicher.
______________________________
Yet Another Drupal Site (YADS)
http://www.rapsli.ch
******************************
______________________________
Yet Another Drupal Site (YADS)
http://www.rapsli.ch
******************************
Danke! Teaserproblem besteht weiterhin
am 18.01.2008 - 00:33 Uhr
Danke rapsli, das hat mich erheblich weiter und zusätzlich auf weitere Ideen gebracht. Mit Hilfen, Vorlagen und Trial&Error lerne ich doch tatsächlich noch etwas php ;-)
Nach wie vor weiß ich aber nicht, wie man mit einem eigenen Template den Teaser beeinflussen kann (weigert sich immer noch, bei eigenem Template Contemplate-Änderungen zu akzeptieren und zeigt auch Felder, die laut Inhaltstyp im Teaser versteckt sein sollten) , wenn mir da jemand helfen könnte, wäre das super :-)
Juhu!
am 18.01.2008 - 02:16 Uhr
Hatte eine Erleuchtung. Vermutlich den Profis bekannt, aber für alle, die hier eine Lösung suchen ... Mit folgendem Code kann man Teaser und Seite getrennt im node-nodetype.tpl.php ausgeben:
<!-- hier der Teaser */ -->
<?php if ($page == 0): ?>
<div class="teaser">
<h2 class="teasertitel">
<a href="<?php print $node_url ?>"><?php print $title ?></a>
</h2>
<?php if ($MEINFOTO): ?>
<div class="teaserfoto">
<?php print $MEINFOTO; ?>
</div>
<?php endif; ?>
<div class="teasercontent"><?php print $node->content['body']['#value'] ?></div>
<?php if ($links): ?>
<div class="teaserlinks">
<?php print $links ?>
</div>
<?php endif; ?>
</div>
<?php endif; ?>
<!-- hier die Seite -->
<?php if ($page == 1): ?>
<!-- hier jetzt alles, was hier rein soll ... -->
<?php if ($links): ?>
<div class="links">
<?php print $links ?>
</div>
<?php endif; ?>
<?php endif; ?>
</div>
Eventuell kennt ja jemand etwas eleganteres, aber soweit funktioniert es ganz prima. Vor allem,wenn man mit div und css schön stylt :-)