Van egy oldal tartalmam. Ehhez tartozik a törzs, és külön a teaser az excerpt modul segítségével.
Van-e rá valamiféle lehetőség, hogy: amikor az oldalt kirajzoltaltom (node nézet, nem teaser), akkor a teaser-t egy külön div-be zárjam, hogy kicsit másképp lehessen formázni?
Így nézne ki:
h1: title
div class="teaser": teaser
div class="body": a body.
Kerestem példákat, hogy honnan lehetne egy működő megoldást kiollózni, de még nem találtam. A node revision-s táblában külön tárolódik a teaser a bodytól, külön mező van rá. Nekem az kellene, hogy ne vonja össze, hanem külön jöjjön át a sminknek?
Most belenéztem a template_preprocess_node()-ba. Nekem itt úgy tűnik, hogy vagy teaser, vagy body jön már át ide.
thx!
Melyik modulhoz, modulokhoz kapcsolódik a téma?:
Fórum:
preprocess_node-ba: if
preprocess_node-ba:
----
Rájöttem, miért kérdezek olyan ritkán a drupal.hu-n. Amíg szedem össze az infokat a kérdéshez, mindig rájövök a megoldásra.
nem jó, full page nézetben kell neki a teaser is, csak külön div
full page nézetben kell neki a teaser is meg a body is, csak legyenek külön divbe. amúgy a classes nem "standard", nem minden smink használja a node.tpl.php -ban, szóval nem elég a preprocessbe nyomatnod egy classes tömböt, hanem akkor a node.tpl.php -ban ki is kell azt a tömböt szépen íratni.
(gondolom a phptemplate_body_classes volt a fejedben)
-
clear: both;
Fúú.. Kicsit writeonly
Fúú.. Kicsit writeonly voltam.. :)
----
Rájöttem, miért kérdezek olyan ritkán a drupal.hu-n. Amíg szedem össze az infokat a kérdéshez, mindig rájövök a megoldásra.
igen, a $contentbe már vagy-vagy kerül, de ott van a $node
a preprocessorba..
-
clear: both;
Valami nem kerek
Megcsináltam, amit írtál:
A page.tpl-ben pedig ezt:
A debug üzenet írja is szépen a node mezőit. De nincs a node-nak teaser tulajdonsága. A node->content['body][#value] értéke már a teljes content teaser-el, nem külön van.
Most megnéztem dev loaddal és a dev renderrel is. A node egy stdClass. Van teaser field-je, de a content-je tartalmazza a teaser-t.
Ha kikapcsolom az "Összefoglaló megjelenítése a teljes nézetben is"-t, akkor egyátalán nincs teaser.
--
Szabó Dénes - Internode.hu - Munkára fogott weblapok
jogos, nincs benne a nodeban a teaser sajna-bajna
lehetne még nyomozni, hogy hogyan tudnánk azt elővarázsolni. fogok is. :)
-
clear: both;
Úgy tűnik nekem is
A devel modul debug kimenete alapján.
A teaser csak egy változó: teaser módban vagyunk-e vagy sem.
De külön nincs teaser, csak "jön" a body-val együtt, ha jönnie kell... :)
--
Szabó Dénes - Internode.hu - Munkára fogott weblapok
na, így kell ezt
template.php:
node.tpl.php:
akkor működik, ha nincs bejelölve a 'show summary in full view'. azért így 'kifordítva', mert ha bejelölöd azt, akkor a teasert hozzányomja a bodyhoz. ha nem jelölöd be, akkor nem nyomja hozzá, viszont a preprocessben egy kapcsoló már csak a teaser mert a node_view() átrendezte már a dolgokat. ezért újra betöltjük a node, hogy a nekünk kellő értéke legyen a $node->teaser -nek és aztán szépen egy 'brief' változóba pakoljuk amit meg kiírunk egy külön divbe a tplben.
remélem érthető, ha valami nem világos kérdezz.. ;)
-
clear: both;
Érthető
nagyjából fogom is. El kell kezdenem tanulnom sürgősen az api-t mert enélkül nem tudom megcsinálni amit kell.
Köszönöm a kimerítő választ!
Mondjuk az nem ciki, hogy be kell mégegyszer tölteni az egész node-ot? Elég lenne csak a node aktuális teaser-jét, a body-ból meg levágni.
Gondolom, jóval bonyolultabb csak a teaser-t betölteni.
--
Szabó Dénes - Internode.hu - Munkára fogott weblapok
nem ciki
mivel a preprocessben vagyunk volt már egy node_load, szóval a mi 'extra' node_load -unk nem generál újabb sql kérést, hanem cacheből adja vissza a már lekért nodeot.
ha megnézed a node_load() függvényt szépen látszik, hogy ez ('plusz' egy node_load) nem kerül nekünk szinte semmibe.
ugye a para az, hogy a preprocessben lévő $vars és az abban lévő $node nem csak simán a node_load() visszatérési értéke, hanem már a node_view() -n is át lett kergetve (meg minden hook_nodeapi -n is), ami attól függően hogy teaser vagy sem, más-más értékeket pakol a body meg a content meg a teaser helyére. átalakítja a sima, node_load() által adott szerkezetet.
nézd csak:
ezért csinálunk mégegy node_load(), hogy a nyers node -al tudjunk mahinálni.
-
clear: both;
igen, most így hirtelen ez bukta
simán a preprocessből nem hiszem, hogy menni fog..
mert már a node_view() -ban eldől, hogy mi kerül a $node->teaser -be és a preprocess csak utána hívódik sajna-bajna.
gondolkodok még rajta.
alternatíva, hogy nem használod a body -t, létrehozol helyette két szövegmezőt, teaser, body. ez se lesz túl kényelmes más okok miatt sajnos.
-
clear: both;
További próbálkozás (D7)
Drupal 7.x-el szintén ezen küzdök. (Teaser-ből Summary lett pl.)
template.php:
Na, ez működik: a $brief remekül elérhető a node.tpl.php-ból.
Már "csak" az kéne, hogy a body-ból valahogy "kiszedjük" a summaryt. (Így még summary duplázás van.) Kivágnám én, de nem sikerül a body-t módosítanom. :(
Kérdeztem is ezt: D7 - preprocess_node-ban body buherálása
egy megoldás
Sikerült egy megoldást gyártanom a problémára. :)
template.php
Most már olyan div-ekbe rakjuk, amilyenbe akarjuk
node.tpl.php:
Fontos még, hogy a "Manage fields"-nél beállítsuk, hogy oldal nézetben ne jelenjen meg a body.
nem értem pontosan mire kell ez
nekem úgy működik a drupal 7, hogy ha egy node szerkesztésekor az edit summary -re kattintok és a summaryt kitöltöm, akkor mentés után teaser nézetben a summary jelenik meg, full nézetben a node body, summary nélkül ahogy kell. alapból így működik. vagy nem értem mi a probléma :)
node szerkesztése: https://skitch.com/aboros/rt6fm/edit-article-appellatio-virtus-seven
teaser nézet: https://skitch.com/aboros/rt6fs/seven
full nézet: https://skitch.com/aboros/rt6fu/appellatio-virtus-seven
amúgy ez már egy új kérdés, légyszi nyiss neki új témát. köszi.
-
clear: both;
a probléma
Olyan full nézet kell, ahol a teaser és a (teaser nélküli) body látható, de külön div-ben. (Hogy közéjük lehessen rakni valamit. Hogy a külön lehessen formázni a teaser-t.)
a) Ha azt akarom, hogy néhány nodenál a teaser csak a teaser nézetben jelenjen meg. Full nézetben pedig a body (a teaser nélkül), akkor úgy csinálom, ahogy mutattad. Külön veszem a summary-t.
b) De én sokszor a teaser-t szeretném látni a full nézetben is, csak nem egybeöntve az egészet (ahogy alapértelmezetten megy, ha szerkesztéskor "Hide summary" van), hanem külön: summary és teaser. Ez a problémás.
A b-t meg lehetne úgy oldani, hogy minden egyes node-nál külön szerkesztem a treaser-t és a body-t, ahogy a linkelt szerkesztés képen van. Majd a full nézetbe belereakom a body-t (amihez így nem tartozik a treaser) és valahogy meghívom a treaser-t.
De nem szeretném az összes régi nodeomat így átszerkeszteni. Ezért kell valami ilyesmi buherálás.
(Talán így érthetőbb.)
új téma
nyiss új témát kérlek.
-
clear: both;
bocs
bocs. (az előbbi megjegyzésedet elvolvastam. de csak a linkekig. basszus)
nyitottam új témát: D7 - Summary és Body szétválasztása full nézetben