Text mir Bild ersetzen
am 01.03.2012 - 14:18 Uhr in
hallo,
ich gebe mit der Hilfe Properties - Moduls , eine Produkteigenschaften-Tabelle aus. Diese beinhaltet verschiedene Produktmerkmale, inkl. Gewicht, Maße, Kamera:JA, UMTS:NEIN, Lieferbar: JA und so weiter....
Ich möchte jetzt aber alle Werte so einer Tabelle die ein "JA" beinhalten mit einem "Häckchen-Bild" ersetzen und die Werte "NEIN" mit einem grafischen Minus.
ähnl. wie in dieser Tabelle hier:
Wo mache ich das? Vielleicht als preprocess Variable irgendwo in template.php ?! Wie sollte das gehen.
Bin für jede Hilfe dankbar.
- Anmelden oder Registrieren um Kommentare zu schreiben

Kannst du den Zellen der
am 01.03.2012 - 15:03 Uhr
Kannst du den Zellen der einzelnen Eigenschaften eigene Klassen geben?
also, ich kann die einzelnen
am 01.03.2012 - 16:15 Uhr
also, ich kann die einzelnen Werte über node.tpl.php ausgeben, wie z.B
<?php print_r($field_props1[0][value]); ?><?php print_r($field_props1[1][value]); ?>.
.
.
.
<?php print_r($field_props1[n][value]); ?>Was aber erstmal nicht so
am 01.03.2012 - 20:48 Uhr
Was aber erstmal nicht so wirklich meine Frage beantwortet.
Du schreibst:
am 01.03.2012 - 22:26 Uhr
ich kann die einzelnen Werte über node.tpl.php ausgeben, wie z.B
dann kannst Du auch sowas mit einem DIV umklammern und dem, abhängig vom Inhalt des Feldes, unterschiedliche Klassen geben.
Damit kannst Du im Stylesheet der jeweiligen Klasse das gewünschte Background-Image verpassen.
Exterior schrieb Kannst du
am 02.03.2012 - 08:24 Uhr
Kannst du den Zellen der einzelnen Eigenschaften eigene Klassen geben?
sorry, ich verstehe leider Deine Frage nicht ganz.... wo könne man das machen? und wie?
ja, das mit CSS war auch mein Vorhaben, weiss ich aber nicht, wie komme ich zur Funktion die diese TAbelle mit Eigenschaften ausgibt.....
Ich möchte nicht den Code im Modul selber ändern, sonder es (wenn möglich) aus template.php oder node.tpl.php nachträglich übersteuern (ändern)
ich habe es schon mal gemacht, vor 2-3 Jahren, in Drupal6, aber ich kann es nicht mehr finden wo das war...... Das ist, wenn man sich nicht regelmäßig mit Drupal beschäftigt, dann vergisst man so schnell die Sachen.....
Exterior meint
am 02.03.2012 - 08:30 Uhr
<div class="DEINE_KLASSE_ABHÄNGIG_VOM_VALUE"><?php print_r($field_props1[0][value]); ?>
</div>
Je nach value setzt du DEINE_KLASSE_ABHÄNGIG_VOM_VALUE auf z.B. "umts-ja" oder "umts-nein" und dann mit CSS themen:
sepp68 schrieb <div
am 02.03.2012 - 08:53 Uhr
<div class="DEINE_KLASSE_ABHÄNGIG_VOM_VALUE"><?php print_r($field_props1[0][value]); ?>
</div>
Je nach value setzt du DEINE_KLASSE_ABHÄNGIG_VOM_VALUE auf z.B. "umts-ja" oder "umts-nein" und dann mit CSS themen:
nein, das kann ich eben nicht, da ich diese Ausgabe nicht selber durch node.tpl.php (oder ähnl.) ausgebe, sondern wird direkt vom Modull (Properties) generiert und ausgegeben. Diese Ausgabe oben, war nur von mir als Test in node.tpl.php ...
Wie heisst dein Modul ?
am 02.03.2012 - 10:00 Uhr
Wie heisst dein Modul ?
Dynamic Properties (übrigens,
am 02.03.2012 - 10:22 Uhr
Dynamic Properties
(übrigens, sehr gutes Modul, noch in dev-Fase, aber echt zu empfehlen)
Im Modul gibt es das
am 02.03.2012 - 11:21 Uhr
Im Modul gibt es das Template
properties-properties-form.tpl.php
Damit müsstest du die Ausgabe themen können.
sepp68 schrieb Im Modul gibt
am 02.03.2012 - 11:52 Uhr
Im Modul gibt es das Template
properties-properties-form.tpl.php
Damit müsstest du die Ausgabe themen können.
ja, aber damit mache ich eigentlich Änderungen direkt an diesem Modul, was ich vermeiden möchte.... (falls Modul-Update kommt, oder neuere Version....)
Du solltest die
am 02.03.2012 - 11:56 Uhr
Du solltest die properties-properties-form.tpl.php in deinen Theme-Ordner kopieren und dann verändern.
Damit überschreibst du die modul-eigene properties-properties-form.tpl.php.
Nach der Änderung Cache leeren !
ich glaube,
am 02.03.2012 - 13:10 Uhr
ich glaube, properties-properties-form.tpl.php ist nicht das richtige Template.
Hier kommt gar keine Tabelle und/oder UL LI Liste wie im Quell-Code:
<div class="field field-name-field-props1 field-type-properties field-label-above"><div class="field-label">Eigenschaften: </div>
<div class="field-items">
<div class="field-item even">
<table>
<tbody>
<tr class="even">
<td>3D Display</td>
<td><strong>nein</strong></td>
das ist was ich suche....aber irgendwie bin ich auf dem falschen Weg
findest du das<div
am 02.03.2012 - 14:00 Uhr
findest du das
<div class="form-item field-widget-properties-table">im Quellcode wieder ?
Eigentlich müsstest du auch die Felder themen können:
http://api.drupal.org/api/drupal/modules!field!theme!field.tpl.php/7
[quote=sepp68]findest du
am 08.03.2012 - 09:39 Uhr
[quote=sepp68]findest du das
<div class="form-item field-widget-properties-table">im Quellcode wieder ?
nein, dies taucht nicht im Quellcode auf....
hat jemand eine Idee?
Poste doch den Quellcode mal
am 08.03.2012 - 10:33 Uhr
Poste doch den Quellcode mal auf http://drupal.pastebin.com/ wenn möglich ...
hier:
am 08.03.2012 - 11:46 Uhr
hier:
paste.bin
Guck ich mir heute abend an
am 08.03.2012 - 15:15 Uhr
Guck ich mir heute abend an ...
Also, ich habe kein
am 08.03.2012 - 23:09 Uhr
Also, ich habe kein spezielles Template gefunden.
Deine Tabelle wird wohl mit theme_table aufgebaut.
http://api.drupal.org/api/drupal/includes!theme.inc/function/theme_table/7
Nun kannst du in deinem Tehme eine eigene theme_table-Funktion implementieren, die die Standard-Funktion überschreibt:
http://drupal.org/node/173880
kopiere einfach die Funktion theme.inc aus der Datei \includes\themes.inc
und in die template.php deines Themes und benenne sie MYTHEME_table (MYTHEME ist dein Theme-Name)
Leere den Cache und verändere deine MYTHEME_table-Funktion.
Tut sich da was ?
Wenn ja kannst du jetzt die Parameter auslesen und zum Beispiel als Klasse beim td hinzufügen.
die Funktion habe ich
am 12.03.2012 - 16:02 Uhr
die Funktion habe ich gefunden und richtig in template.php eingebunden. Vielen Dank erstmal,..
function marinelli_table($variables) {
$header = $variables['header'];
$rows = $variables['rows'];
$attributes = $variables['attributes'];
$caption = $variables['caption'];
$colgroups = $variables['colgroups'];
$sticky = $variables['sticky'];
$empty = $variables['empty'];
// Add sticky headers, if applicable.
if (count($header) && $sticky) {
drupal_add_js('misc/tableheader.js');
// Add 'sticky-enabled' class to the table to identify it for JS.
// This is needed to target tables constructed by this function.
$attributes['class'][] = 'sticky-enabled';
}
$output = '<table' . drupal_attributes($attributes) . ">\n";
if (isset($caption)) {
$output .= '<caption>' . $caption . "</caption>\n";
}
// Format the table columns:
if (count($colgroups)) {
foreach ($colgroups as $number => $colgroup) {
$attributes = array();
// Check if we're dealing with a simple or complex column
if (isset($colgroup['data'])) {
foreach ($colgroup as $key => $value) {
if ($key == 'data') {
$cols = $value;
}
else {
$attributes[$key] = $value;
}
}
}
else {
$cols = $colgroup;
}
// Build colgroup
if (is_array($cols) && count($cols)) {
$output .= ' <colgroup' . drupal_attributes($attributes) . '>';
$i = 0;
foreach ($cols as $col) {
$output .= ' <col' . drupal_attributes($col) . ' />';
}
$output .= " </colgroup>\n";
}
else {
$output .= ' <colgroup' . drupal_attributes($attributes) . " />\n";
}
}
}
// Add the 'empty' row message if available.
if (!count($rows) && $empty) {
$header_count = 0;
foreach ($header as $header_cell) {
if (is_array($header_cell)) {
$header_count += isset($header_cell['colspan']) ? $header_cell['colspan'] : 1;
}
else {
$header_count++;
}
}
$rows[] = array(array('data' => $empty, 'colspan' => $header_count, 'class' => array('empty', 'message')));
}
// Format the table header:
if (count($header)) {
$ts = tablesort_init($header);
// HTML requires that the thead tag has tr tags in it followed by tbody
// tags. Using ternary operator to check and see if we have any rows.
$output .= (count($rows) ? ' <thead><tr>' : ' <tr>');
foreach ($header as $cell) {
$cell = tablesort_header($cell, $header, $ts);
$output .= _theme_table_cell($cell, TRUE);
}
// Using ternary operator to close the tags based on whether or not there are rows
$output .= (count($rows) ? " </tr></thead>\n" : "</tr>\n");
}
else {
$ts = array();
}
// Format the table rows:
if (count($rows)) {
$output .= "<tbody>\n";
$flip = array('even' => 'odd', 'odd' => 'even');
$class = 'even';
foreach ($rows as $number => $row) {
$attributes = array();
// Check if we're dealing with a simple or complex row
if (isset($row['data'])) {
foreach ($row as $key => $value) {
if ($key == 'data') {
$cells = $value;
}
else {
$attributes[$key] = $value;
}
}
}
else {
$cells = $row;
}
if (count($cells)) {
// Add odd/even class
if (empty($row['no_striping'])) {
$class = $flip[$class];
$attributes['class'][] = $class;
}
<strong> // Build row
$output .= ' <tr' . drupal_attributes($attributes) . '>';
$i = 0;
foreach ($cells as $cell) {
$cell = tablesort_cell($cell, $header, $ts, $i++);
$output .= _theme_table_cell($cell);
}
$output .= " </tr>\n";</strong>
}
}
$output .= "</tbody>\n";
}
$output .= "</table>\n";
return $output;
}
Problem, ich finde keine TD (HTML Zeile) Anweisung im Code... (nur TR für Rows)
Wie kann ich jetzt in dieser Funktion eine Anfrage stellen, z.B:
IF Daten innerhalb TD beinhalten "ja" dann füge CSS-Klasse "JA" hinzu
$output .= ' <tr' .
am 12.03.2012 - 16:25 Uhr
$output .= ' <tr' . drupal_attributes($attributes) . '>';$i = 0;
foreach ($cells as $cell) {
$cell = tablesort_cell($cell, $header, $ts, $i++);
$output .= _theme_table_cell($cell);
}
$output .= " </tr>\n";</strong>
Hier wird die Zeile gebildet, wobei jede Zelle (also
<td> ... </td>) über die Funktion _theme_table_cell($cell) gebaut wird. Das wird eine weitere Funktion sein, die Du übernehmen mußt.Beste Grüße
Werner
Vielen vielen Dank, Werner &
am 12.03.2012 - 16:42 Uhr
Vielen vielen Dank, Werner & Sepp,
ich habe jetzt Function _theme_table_cell() so verändert und es funktioniert :
function marinelli_table_cell($cell, $header = FALSE) {
$attributes = '';
if (is_array($cell)) {
$data = isset($cell['data']) ? $cell['data'] : '';
// Cell's data property can be a string or a renderable array.
if (is_array($data)) {
$data = drupal_render($data);
}
$header |= isset($cell['header']);
unset($cell['data']);
unset($cell['header']);
$attributes = drupal_attributes($cell);
}
else {
$data = $cell;
}
if ($header) {
$output = "<th$attributes>$data</th>";
}
else {
if ($data == "nein") {
$output = "<td class='hacken_nein' $attributes>$data</td>";
}
else if ($data == "ja") {
$output = "<td class='hacken_ja' $attributes>$data</td>";
}
else {
$output = "<td $attributes>$data</td>";
}
}
return $output;
}
Mein Custom-Code:;
if ($data == "nein") {$output = "<td class='hacken_nein' $attributes>$data</td>";
}
else if ($data == "ja") {
$output = "<td class='hacken_ja' $attributes>$data</td>";
}
man könnte es vielleicht eleganter lösen (bin für jeden Vorschlag dankbar), aber mir ist jetzt wichtig dass es funktioniert.
Eine Frage hätte ich noch, diese Änderung ist jetzt in meiner template.php Datei erstellt, d.h. betrifft die Ganze Seite. Wie kann ich das auf nur ein Inhalt-Typ begrenzen?
Warum willst du es auf einen
am 12.03.2012 - 18:38 Uhr
Warum willst du es auf einen Inhaltstyp begrenzen ?
Der Code "schadet" ja nicht.
btw:
Ich hätte das $cell-array manpuliert:
<?php
if ($cell['data'] == "nein") {
$cell['class']='hacken_nein';
}
else if ($cell['data'] == "ja") {
$cell['class']=''hacken_ja';
}
?>
jetzt ungetestet aber so ähnlich ...
siehe http://api.drupal.org/api/drupal/includes!common.inc/function/drupal_attributes/7
sepp68 schrieb Warum willst
am 13.03.2012 - 08:59 Uhr
Warum willst du es auf einen Inhaltstyp begrenzen ?
Der Code "schadet" ja nicht.
ja, im Prinzip schon. Ich verwende auf dieser Seite oft Tabellen und ich möchte nicht dass dieser Script (Funktion) jede Tabelle (wo Zeilen "ja" "nein") ändert, sonder nur bei einem speziellen Inhaltstyp , z.B Handys...
Wenn ich diese Funtion so in der template.php -Datei belasse, dann greift diese allgemein bei jedem Inhaltstyp an.