[gelöst] node titel neben dem bild und nicht oberhalb (mit auto nodetitle ?)

am 27.07.2011 - 14:01 Uhr in
hallo und guten tag
ich möchte das der node titel rechts neben dem bild erscheint
und nicht oberhalb der content region.
ein weg der mir einfällt wäre das ich den node titel in ein node field 'umgewandeln' lasse.
bei meiner suche bin ich auf
das modul
http://drupal.org/project/auto_nodetitle (7.x-1.0) (plus zusätzlich das modul token
gestossen.
aber das macht nicht das was es soll (oder ich bin zu doof)..
wenn ich das modul aktiviere mit der option:
Automatically generate the title if the title field is left empty
und als pattern für den title
[current-page:title]
wird mir im full content display des nodes dennoch der nur der node title ausgegeben, also
ausserhalb des node bereiches (page.tpl ->print $title)
und nicht als field title innerhlab des nodes
und unter 'field manage' erscheint auch kein neues field element
was ich erwarten würde, da hier da die reigenfolge bestimmt wird..
ojeh... so ein aufwand um so ein (vermeindlich) kleine änderung zu bekommen...
verbleibe, wie immer, sehr dankbar für hinweise und anregungen
grüße
stf
- Anmelden oder Registrieren um Kommentare zu schreiben
Template
am 27.07.2011 - 14:57 Uhr
Es gibt mehrere Möglichkeiten, um das zu lösen:
a) Du könntest dir tatsächlich ein eigenes Feld für die Überschrift beim Inhaltstypen anlegen. Dann hast du ein Feld für den title und eins für die Überschrift. Beim Node selbst, hat der body eine eindeutige Klasse für den Inhaltstypen und du kannst per CSS den überflüssigen Titel ausblenden.
b) Du passt deine Templates so an, dass der Titel nur dort erscheint, wo du ihn haben willst. Das sind mindestens die Templates für page.tpl.php und node.tpl.php.
c) Du könntest auch verschiedene Fälle über das template.php abfangen und den Titel dort beeinflussen.
Übrigens, auto nodetitle
am 27.07.2011 - 15:07 Uhr
Übrigens, auto nodetitle macht nichts anderes, als den Node-Titel selbst zu setzen. Das ist also nach wie vor der normale Node-Titel, kein extra Feld oder sonst was (das steht doch auch nirgends?!).
neben welchem bild denn
am 27.07.2011 - 15:14 Uhr
neben welchem bild denn überhaupt?
wenn das bild im contentbereich ist, kannst du das einfach per css machen
...danke für eure schnellen
am 27.07.2011 - 17:06 Uhr
...danke für eure schnellen reaktionen!!
@nicolai
a) Du könntest dir tatsächlich ein eigenes Feld für die Überschrift beim Inhaltstypen anlegen. Dann hast du ein Feld für den title und eins für die Überschrift. Beim Node selbst, hat der body eine eindeutige Klasse für den Inhaltstypen und du kannst per CSS den überflüssigen Titel ausblenden.
ein extra field für den titel würde ja auch bedeuten das der user den titel doppelt eingeben müsste
da der node titel ja ein pflicht feld ist...
b) Du passt deine Templates so an, dass der Titel nur dort erscheint, wo du ihn haben willst. Das sind mindestens die Templates für page.tpl.php und node.tpl.php.
c) Du könntest auch verschiedene Fälle über das template.php abfangen und den Titel dort beeinflussen.
ja stimmt , ich muss da (und in der block bsw page ) den typen abfangen und in der
page.tpl dann den title unterdrücken da es gibt contenttypen gibt die einen titel haben sollen..
@exterior
Übrigens, auto nodetitle macht nichts anderes, als den Node-Titel selbst zu setzen. Das ist also nach wie vor der normale Node-Titel, kein extra Feld oder sonst was (das steht doch auch nirgends?!).
so hab ich zumindest den sinn von auto nodetitle (mis)verstanden, das es den title automatisch als node field anlegt.
auch wenn es das wohl trozdem macht, ist mir nicht ganz klar wozu das modul gut ist
wenn das feld dann nicht zb in der reihenfolge beeinflusst werden kann (ok vielleicht geht das
dann über das $page array, das werde ich mal versuchen.. wobeich das durch auto nodetitle erstellte field
konnte ich nicht finden in dem $page array, die andern nodes fields schon... ohje)
@caw
neben welchem bild denn überhaupt?
wenn das bild im contentbereich ist, kannst du das einfach per css machen
du hast recht, das war sehr unpräzise von mir beschrieben.
ich meinte ein node field image
das bild muss zuerst im markup erscheinen, bzw der titel eben nicht
als erstes und dann noch als h1 in einem äusseren div element
als das bild. wenn der titel auch ein node field wäre , dachte ich, könnte ich
die reihenfolge bei dem titel nach dem bild setzen und dann wäre das mit
css tatsächlich kein problem, da die teile in einem div liegen
(sorry wenn das etwas verschrumpelt klingt..)
Ja dann mußt du einfach ein
am 27.07.2011 - 17:15 Uhr
Ja dann mußt du einfach ein Template erstellen für diesen Inhaltstypen.
Wenn du nur ein Bild, die Überschrift udn den Bodytext hast ist das ja nciht sehr aufwendig.
Nur nochmal zur Klärung:
am 27.07.2011 - 17:17 Uhr
Nur nochmal zur Klärung: Autonodetitel erlaubt einen Titel automatisch zu setzen, damit man das Pflichtfeld nicht eigens eingeben muß (z.B. über andere Felder des Nodes). Das ist aber nach wie vor das normale Titelfeld des Nodes.
Beste Grüße
Werner
@werner Nur nochmal zur
am 27.07.2011 - 21:38 Uhr
@werner
Nur nochmal zur Klärung: Autonodetitel erlaubt einen Titel automatisch zu setzen, damit man das Pflichtfeld nicht eigens eingeben muß (z.B. über andere Felder des Nodes). Das ist aber nach wie vor das normale Titelfeld des Nodes.
okeh..jetzt hab ichs verstanden..
@caw
Ja dann mußt du einfach ein Template erstellen für diesen Inhaltstypen.
Wenn du nur ein Bild, die Überschrift udn den Bodytext hast ist das ja nciht sehr aufwendig.
wenn das so einfach wäre in diesem fall... bzw ich bekomme das einfach nicht hin !?
in der node.tpl.php habe ich ja den Titel in der variable $title
wie bekomme ich den titel jetzt in das array $content?
[neben problem]
wieso kann ich an der stelle (node.tpl.php) eigenlich
kein krumo (dsm) verwenden?
// in node.tpl.php zeile ergibt keine ausgabe
dsm($content)
in allen anderen templates funktioniert das ausgeben?)
[/neben problem]
ojeh
Template
am 28.07.2011 - 01:09 Uhr
in der node.tpl.php habe ich ja den Titel in der variable $title
wie bekomme ich den titel jetzt in das array $content?
Hmm. Nee. Du musst den $title nicht in den $content packen. Du gibst "einfach" die Felder in einer Reihenfolge aus, die du brauchst, und schiebst den Titel dazwischen. Bei einer Dachzeile kann ein reduziertes Template zum Beispiel so aussehen:
<div id="node-<?php print $node->nid; ?>" class="artikel">
<?php
// We hide the comments and links now so that we can render them later.
hide($content['comments']);
hide($content['links']);
print render($content['field_dachzeile']);
if ($page) print '<h1>'.$title.'</h1>';
if (!$page) print '<h2><a href="'.$node_url.'">'.$title.'</a></h2>';
print render($content);
print render($content['links']);
print render($content['comments']);
?>
</div>
Bei dir setzt du eben die Namen deiner Felder ein - in der gewünschten Reihenfolge.
Du musst nur beachten, dass einzelne Felder aus dem $content, die du renderst, nicht mehr auftauchen, wenn du danach den §content renderst. (Verständlich ausgedrückt?)
guten morgen nicolai danke
am 28.07.2011 - 09:09 Uhr
guten morgen nicolai
danke für deine ausführliche antwort!
das problem ist anscheinend das ich fields benutze. ich kann
die reihenfolge der fields leider nicht in der nodes.tpl anfassen
also ich hab das jetzt folgendermassen versucht
um den titel neben das bild setzen:
das bild und (weitere felder/fields)
sind in der node.tpl im array $content gespeichert
das hier aber noch nicht gerendert wird
sondern (einzelnd) an field.tpl.php übergeben werden (bzw an deren
theming funktionen)
ich habe das tempalte field.tpl.php genommen
und kann da auf die einzelnen felder zugreifen
aber:
der titel von dem node befindet sich ja
ausserhalb des $content arrays (also ausserhalb des field templates),
also dachte ich:
ok ich schieb das in das $content array um es dann
in der field.tpl.php zuverarbeiten
leider geht das so nicht... vermutlich muss ich das
in in einer theme funktion machen, aber in welcher?
das ist eine ganz grundsätzliche frage für mich
(vielleicht besser in einem seperatem beitrag)
was kommt eigendlich zwischen der node.tpl.php und
der field.tpl?
in der nodes.tpl gibt es das
render($content)
an der stelle werden die felder erzeugt, aber eben alle
felder 'gleichzeitig'.
das einzelne feld hat zwar sein eigenes template (fields.tpl.php)
welches pro feld verarbeitet wird aber ich kann
fields nicht als gruppe erfassen
zb wenn ich das field image links als div
all die anderen fields aber
als html liste rechts daneben haben möchte
und eben den titel darüber setzen möchte
auwiea ist das schwierig (so eine einfache sache eigendlich :()
ich hoffe das ist noch so halbwegs verständlich...
vielen dank nochmal
stf
Zitat: aber ich kann fields
am 28.07.2011 - 09:35 Uhr
aber ich kann
fields nicht als gruppe erfassen
zb wenn ich das field image links als div
all die anderen fields aber
als html liste rechts daneben haben möchte
und eben den titel darüber setzen möchte
ok das geht doch mit einem modul
http://drupal.org/project/field_group
aber diese grundsätzliche unklarheit bei
fields hab ich immer noch..
wie kann ich zwischen nodes.tpl und field.tpl
in den render prozess eingreifen..hmmm
vg
stf
...juhuu gefunden der titel
am 28.07.2011 - 13:03 Uhr
hab die stelle gefunden
der titel steckt in dem
$items array (mit allen parent werten)
das dem template übergeben wird
und ist dort dann an dieser stelle gespeichert
print $items[0]["#node"]->title;
möchte ich das dann noch nur in der
vollansicht des nodes (und nicht im teaser)
anfassen frage ich einfach
if($element['#view_mode']=='full')
ab.
code im ganzen field.tpl.php
<div class="<?php print $classes; ?> clearfix"<?php print $attributes; ?>>
<?php if (!$label_hidden) : ?>
<div class="field-label"<?php print $title_attributes; ?>><?php print $label ?>: </div>
<?php endif; ?>
<div class="field-items"<?php print $content_attributes; ?>>
<?php foreach ($items as $delta => $item) : ?>
<div class="field-item <?php print $delta % 2 ? 'odd' : 'even'; ?>"<?php print $item_attributes[$delta]; ?>><?php print render($item); ?></div>
<?php endforeach; ?>
</div>
<?php if(isset($items[0]["#node"]) AND $element['#view_mode']=='full')
print $items[0]["#node"]->title; ?>
</div>
viele grüße
stf