CSS Klassen in der Template-Datei definieren lassen
am 20.07.2008 - 13:17 Uhr in
Ich möchte, dass meine template.php datei verschiedene CSS Klassen erstellt, jenachdem zu welchen Taxonomys der jeweilige Node gehört.
Also wenn man z.b 2 Kategorien festlegt, und eine davon trifft zu soll der node die in der template definierte klasse erhalten.
Mein Ziel ist es unterschiedliche Hintergrundbilder mit CSS zu definieren, jenachdem welche Kategorien für den Node festgelegt wurden.
Die Variablen die mir zur Verfügung stehen, sehen auszugsweise so aus:
[2] => Array
(
[#type] => select
[#title] => Genre
[#default_value] => Array ( )
[#options] => Array
(
[] => - None selected –
[0] => stdClass Object
(
[option] => Array
(
[7] => Genre1
)
)
[1] => stdClass Object
(
[option] => Array
(
[8] => Genre2
)
)
[2] => stdClass Object
(
[option] => Array
(
[12] => Genre3
)
)
[3] => stdClass Object
(
[option] => Array
(
[11] => Genre4
)
)
[4] => stdClass Object
(
[option] => Array
(
[9] => Genre5
)
)
[5] => stdClass Object
(
[option] => Array
(
[10] => Genre6
)
)
[6] => stdClass Object
(
[option] => Array
(
[13] => Genre7
)
)
)
[#description] =>
[#multiple] => 0
[#size] => 0
[#weight] => 0
[#theme] => taxonomy_term_select
[#required] => 0
[#post] => Array ( )
[#programmed] =>
[#tree] => 1
[#parents] => Array
(
[0] => taxonomy
[1] => 2
)
[#processed] =>
[#attributes] => Array ( )
[#input] => 1
[#name] => taxonomy[2]
[#id] => edit-taxonomy-2
[#value] => Array ( )
[#sorted] => 1
) - Anmelden oder Registrieren um Kommentare zu schreiben

Wie immer du auf den Code
am 20.07.2008 - 14:16 Uhr
Wie immer du auf den Code gekommen bist, aber das ist eindeutig der Code eines Formulars und nicht der des geladenen Nodes
Ich werde nun einfach eine neue CSS klasse, welche den TID beinhaltet einführen
<?php
<?php phptemplate_comment_wrapper(NULL, $node->type); ?>
<?php $tag = array_pop($node->taxonomy); $tag = $tag->tid;
<div id="node-<?php print $node->nid; ?>" class="node<?php if ($sticky) { print ' sticky'; } ?><?php if (!$status) { print ' node-unpublished'; } ?> <?php print 'taxonomy-.'. $tag ; ?>">
<?php print $picture ?>
<?php if ($page == 0): ?>
<h2><a href="<?php print $node_url ?>" title="<?php print $title ?>"><?php print $title ?></a></h2>
<?php endif; ?>
<?php if ($submitted): ?>
<span class="submitted"><?php print t('!date — !username', array('!username' => theme('username', $node), '!date' => format_date($node->created))); ?></span>
<?php endif; ?>
<div class="content">
<?php print $content ?>
</div>
<div class="clear-block clear">
<div class="meta">
<?php if ($taxonomy): ?>
<div class="terms"><?php print $terms ?></div>
<?php endif;?>
</div>
<?php if ($links): ?>
<div class="links"><?php print $links; ?></div>
<?php endif; ?>
</div>
</div>
?>
Schon hast du die Taxonomy Klasse taxonomy-$tid und kannst damit arbeiten
--------------
Blog www.freeblogger.org: Deutscher IRC-Channel: irc.freenode.net #drupal.de ... Jabber-me: dwehner@im.calug.deXING
bei mir sieht die klasse
am 21.07.2008 - 12:20 Uhr
bei mir sieht die klasse dann so aus:
.taxonomy-47
Dabei ist die Zahl, die Nummer des zuletzt erstellten und hier ausgewählten Taxonomys.
Das Problem ist, dass ich 3 Felder mit Free Tagging habe, und jedes mal dann natürlich neue Taxonomys ausgewählt werden könnten.
Nun ist es so dass ich ein bestimmtes Hintergrundbild nur anzeigen möchte, wenn alle 8 "Kategorien-Felder" ausgefüllt wurden, es müssen nämlich nicht alle ausgefüllt werden.
Wie wäre es, wenn man mit php einfach die Anzahl der Listenpunkte in einem Div Element zählen könnte?
Oder man ändert das "Node/add - Formular" so, dass das Script die Felder zählt, die ausgefüllt wurden und diese Zahl gleichzeitig mit in die SQL-Datenbank mitgespeichert wird, wenn das nicht schon der Fall ist.
Jedenfalls möchte ich:
1. Die Anzahl der Taxonomys zählen und als Klasse anzeigen (vielleicht mit dem Befehl "count" ?)
2. bei den Taxonomys, bei den man zwischen festgelegten Taxonomys auswählen kann, jenach auswahl eine explizite eigene Klasse (was mit dem obigen Code auch funktionieren würde, aber nur ohne Free Tagging Taxonomys)
Es gäbe höchstens die Möglichkeit, vielleicht den Code oben einzeln für jedes Feld anzubieten, dass heißt pro ausgefülltes Feld eine entsprechende Klasse erstellen lassen. Das wäre auch sehr praktisch.
P.S.: Für alle die KEINE Free Tagging Taxonomys verwenden ist der obige Code genau das Richtige um differenzierte Klassen jenach den taxonomys zu erstellen, aber sobald man auch Free Tagging nutzt,ist die Zahl für jeden Begriff der neuzugeordnet immer 1 höher, und dann ist der Code in manchen Fällen nicht sehr praktisch.
1.: <?php$count =
am 21.07.2008 - 12:26 Uhr
1.:
<?php$count = 'taxonomy-count-'. count($node->taxonomy);
?>
Damit kannst du weiterarbeiten
--------------
Blog www.freeblogger.org: Deutscher IRC-Channel: irc.freenode.net #drupal.de ... Jabber-me: dwehner@im.calug.deXING
Danke! Genau das hat mir
am 21.07.2008 - 12:45 Uhr
Danke! Genau das hat mir noch gefehlt!!!!
Damit habe ich dann alle Möglichkeiten, und kann wunderbar mit den Taxonomys auch grafisch arbeiten!!!
So simpel und doch genial.
CSS / Sektionen
am 21.07.2008 - 12:46 Uhr
Hallo,
kann man da nicht auch die Snippets aus dem Handbuch nutzen?
Habe das bei Taxonomy noch nicht ausprobiert, aber evtl. hilft es ja weiter:
Customising the full page layout and sections based on node type
Customising the full page layout and sections using CSS and unique BODY Class & IDs
Customising the full page layout and sections based on path
http://drupal.org/node/46006
Gruß Andreas
----------------------------------------
Nur Wer Selbst Brennt, Kann Das Feuer In Anderen Entfachen! - http://cybercore.de
Ich kann aber leider immer
am 22.07.2008 - 14:43 Uhr
Ich kann aber leider immer noch nicht auf jedes Taxonomy zugreifen.
Bis jetzt habe ich die Möglichkeit die Anzahl der Taxonomys zu verwerten. Der frühere Code ist leider nutzlos wenn man Free Tagging nutzt. Deshalb bräuchte ich noch einen Code um wirklich für jedes einzelne Taxonomy gleichzeitig eine entsprechende Klasse zu haben.
Danke schon mal im Voraus. Ich habe versucht, den ersteren Code entsprechend zu verändern, aber bekomme immer Fehlermeldungen.
Ich habe mir ungefähr sowas vorgestellt:
foreach($$vocabulary) {$output = '<div class="' . $tid . '">' $taxonomy . '</div>'
return $output;
}
oder sowas:
<div class="<?php print $taxonomy->$tid ?>"></div>Auf jeden Fall sollte jede Taxonomy id einmal als Klasse erscheinen.
Ich habe jetzt selber eine
am 22.07.2008 - 19:40 Uhr
Ich habe jetzt selber eine Lösung gefunden.
Mit dem folgenden Code kann man die Taxonomys aufsplitten und jedes Taxonomy mit einer Klasse oder Id versehen:
// split out taxonomy terms by vocabularyfunction yourthemename_print_terms($nid) {
$vocabularies = taxonomy_get_vocabularies();
$output = '<ul>';
foreach($vocabularies as $vocabulary) {
if ($vocabularies) {
$terms = taxonomy_node_get_terms_by_vocabulary($nid, $vocabulary->vid);
if ($terms) {
$links = array();
$output .= '<div class="' . $vocabulary->name . '-' . $term->name . '">' . '<li>' . $vocabulary->name . ': ';
foreach ($terms as $term) {
$links[] = l($term->name, taxonomy_term_path($term), array('rel' => 'tag', 'title' => strip_tags($term->description)));
}
$output .= implode(', ', $links);
$output .= '</div>' . '</li>';
}
}
}
$output .= '</ul>';
return $output;
}
Mit diesem Code erhält man eine Auflistung der Taxonomys und gleichzeitig eine gleichnamige Klasse und kann damit arbeiten.
Leider gibt es bei mir trotzdem noch das Problem, dass der erste Taxonomy bei mir keine Klasse bekommt, und alle nachfolgenden Klassen bekommen an zweiter Stelle die Taxonomy, die davor hätte da sein müssen:
Taxonomy 1 alias "Gebäude" = Haus
Taxonomy 2 alias "Frucht" = Apfel
Taxonomy 3 alias "Möbelstück" = Tisch
Auflistung der Klassen ist dann leider falsch:
.gebäude-
.frucht-haus
.tisch-apfel
Seht ihr mein Problem? Tritt bei anderen das Problem auch auf? Ich weiß nicht woran es liegen könnte...