[gelöst] CCK-Feld formatiert und mit Theme versehen ausgeben
am 13.05.2009 - 08:45 Uhr in
Moin zusammen,
ich bastel gerade ein wenig am CCK_Blocks-Modul. Das hat anscheinend das Problem, dass es nur Felder ausgeben kann, die im CCK-Modul mitgeliefert werden und die auch nur halblebig. Das liegt daran, dass nur die Rohdaten der felder ausgegeben werden und kein Theme auf die Felder angewendet wird.
Weiß jemand, über welchen Funktionsaufruf ich das content-modul dazu bewegen kann, mir ein fertig mit Theme versehenes Feld zurückzuliefern?
content_format
macht schon mal nicht, was ich will.
Ich bin mir sicher, dass das geht, weil sich das content_module auch um das theming der Felder unter dem Node kümmert. Ich bin nur noch nicht ganz durchgestiegen, an welcher Stelle im Code das geschieht, bzw. wo der Node das content_modul aufruft um die fertigen Felder für die Anzeige auszuwerfen.
Grüße,
forschi
- Anmelden oder Registrieren um Kommentare zu schreiben
Ich kenne das CCK_Blocks
am 13.05.2009 - 08:57 Uhr
Ich kenne das CCK_Blocks Modul nicht, aber normalerweise kannst Du für jedes CCK-Feld ein eigenes Template erzeugen, ohne das man irgendwas kompliziertes tricksen musst. Hast Du hier schon mal reingesehen: http://drupal.org/node/206980
--
"Jeder Mensch ist lieb." Peter Ludolf
Das hab' ich überflogen,
am 13.05.2009 - 09:04 Uhr
Das hab' ich überflogen, aber ich will ja ansich erst mal nicht das Theme eines Feldes verändern sondern lediglich den fertigen HTML-Code erhalten, der entsteht wenn man ein Theme auf ein Feld anwendet.
Für ein feld mit zwei Links sieht der so aus:
<div class="field field-type-link field-field-link">
<div class="field-label">testlink: </div>
<div class="field-items">
<div class="field-item odd">
<a href="http://forschi.de">aaa</a> </div>
<div class="field-item even">
<a href="http://forschi.de">bbb</a> </div>
</div>
</div>
Das steht unter den Nodes und genau das hätt' ich gerne als Rückgabe einer Funktion. Man muss CCK_blocks nicht kennen, es reicht, wenn jemand weiß, welche Funktion den HTML-Code erzeugt.
forschi schrieb Man muss
am 13.05.2009 - 10:06 Uhr
Man muss CCK_blocks nicht kennen, es reicht, wenn jemand weiß, welche Funktion den HTML-Code erzeugt.
Evtl. verstehe ich Dich nicht richtig: Aber wie unter o.g. Link beschrieben, enthält die Datei content-field.tpl.php den HTML-Code...
--
"Jeder Mensch ist lieb." Peter Ludolf
Dann verstehst du mich
am 13.05.2009 - 10:33 Uhr
Dann verstehst du mich falsch :-)
Ich kann ja einem Block als Inhalt nicht einfach den Inhalt der Datei content-field.tpl.php zuweisen. Diese muss ja in meinen Augen erst geparst werden, damit die dort enthaltenen Variablen ausgewertet werden.
In der tpl.php ist ja nur der HTML-Code enthalten, in den die Daten eines Feldes eingebettet werden. Ich hätte aber gerne das HTML, in dem der Inhalt des Feldes schon enthalten ist.
Drupal ist in PHP
am 13.05.2009 - 15:49 Uhr
Drupal ist in PHP geschrieben. Und PHP ist dynamisch. Und Inhalte kommen bei Drupal aus der DB.
Dh. Drupal wäre nicht dynamisch, wenn CCK tpls anlegen würde, wo Daten drin wäre, die du via Webinterface eingegeben und sich in der Datenbank befinden.
Aber wenn du in der tpl mit IFs-Abfragen das so einschränkst, das es nur das eine Feld anspricht. Dann kannste ja anstatt die $variabel, wenn sie nicht selbst auch HTML entält, direkt dein Text eingeben.
Das würde allerdings alles in den Haufen schmeißen. Und du könntest gleich deine Seiten in statischen HTML weitermachen. Und die Vorzüge von PHP vergessen.
----------------------------------------
http://tobiasbaehr.de/
Gelöste Forenbeiträge mit [gelöst] im Titel ergänzen
Ein Forum ist kein Ersatz für das www (Google.de).
Gelöste Forenbeiträge mit [gelöst] im Titel ergänzen
Das Verhältnis anderen zu helfen muss höher sein, als von anderen Hilfe zu erfragen/erwarten.
Au Weia. Da hab' ich mich
am 13.05.2009 - 16:42 Uhr
Au Weia. Da hab' ich mich wohl extrem missverständlich ausgedrückt.
Mir ist schon klar, wie diese Dynamik in Drupal funktioniert. Ruft ein Benutzer die Seite auf, schnappt sich CCK das Template, füllt die Variablen mit Inhalt und liefert das fertige HTML an den Browser aus.
Irgendeine Funktion muss aber CCK dazu veranlassen, dieses Rendering vorzunehmen, sonst würden die Felder ja nicht zusammen mit dem passenden Node angezeigt werden. Ich suche also die Funtkion, die erkennt, dass an einem Node CCK-Felder "hängen" und die dann CCK anweist, diese Felder mit dem zum Node passenden Inhalt zusammen als HTML auszugeben.
Ich weiß nicht, wie ich's besser formulieren kann. Wenn's so noch nicht klar ist, mal' ich nachher mal ein Bildchen, wenn ich daheim bin.
Danke soweit,
forschi
Nodes werden mit Hilfe der
am 13.05.2009 - 16:44 Uhr
Nodes werden mit Hilfe der Node-Api erweitert. http://api.drupal.org/api/file/developer/examples/nodeapi_example.module/6
Den Rest kannste Dir ja selbst denken.
----------------------------------------
http://tobiasbaehr.de/
Gelöste Forenbeiträge mit [gelöst] im Titel ergänzen
Ein Forum ist kein Ersatz für das www (Google.de).
Gelöste Forenbeiträge mit [gelöst] im Titel ergänzen
Das Verhältnis anderen zu helfen muss höher sein, als von anderen Hilfe zu erfragen/erwarten.
Danke :)
am 13.05.2009 - 16:55 Uhr
Danke, ich glaub', jetzt hast du mich verstanden :-)
Dann schauen wir nachher mal, ob ich die theming-funktion aus "meinem" Modul heraus aufgerufen bekomme. So oder so hört ihr wieder von mir.
Grüße,
forschi
Okay, also das
am 13.05.2009 - 20:09 Uhr
Okay, also das hier:
module_invoke('content', 'format', $fields[$delta], $item, $settings['formatter'], $node)
liefert mir ein einen formatierten Wert aus einem Feld. Ich muss wohl alle Werte formatieren und sie dann in mein eigenes Theme einpflegen. Das scheint mir im Moment das vernünftigste zu sein.
Patch für cck_blocks
am 17.06.2009 - 11:34 Uhr
Hi,
hab das gleiche Problem gehabt, aber mit einer kleinen Änderung im cck_blocks.module kannst du die in content-fields[*].tpl.php definierten Themes gleich einbinden
<?php
// cck_blocks.module
// (...)
case 'view':
default:
$block = array();
if (arg(0) == 'node' && is_numeric(arg(1)) && !arg(2) && $fields[$delta]) {
$node = node_load(arg(1));
if ($items = $node->$delta)
{
$settings = variable_get('cck_blocks_' . $delta, array('formatter' => 'default'));
// PATCH
$fields[$delta]['display_settings']['label']['format'] = 'normal';
$fields[$delta]['display_settings']['full']['format'] = $settings['formatter'];
$block['subject'] = $fields[$delta]['widget']['label'] ? $fields[$delta]['widget']['label'] : $delta;
$block['content'] = content_view_field($fields[$delta], $node);
/* ALTER CODE
if ($items = $node->$delta) {
$block['subject'] = $fields[$delta]['widget']['label'] ? $fields[$delta]['widget']['label'] : $delta;
$block['content'] = '';
$settings = variable_get('cck_blocks_' . $delta, array('formatter' => 'default'));
foreach ($items as $item) {
$block['content'] .= module_invoke('content', 'format', $fields[$delta], $item, $settings['formatter'], $node);
}
*/
}
}
return $block;
}
?>
Siehe auch: http://api.zzolo.org/api/function/content_panels_render_field/drupal-6
Gruß Robert