A probléma: Nekem egy elválasztót (függőleges képcsík) kell raknom a left és right régiók közé egy konkrét tartalomtípus full node nézetében. Az elválasztó csíknak a hosszabbik tartalommal kellene egy hosszúságúnak lenni.
Ilyen most a kinézet (display suite default)
+---------------------------------+ | Header region | +---------------------------------+ +---------------++----------------+ | Left region || Right region | | || | | || | | || | +---------------+| | | | | | | | +----------------+ +---------------------------------+ | Footer region | +---------------------------------+
Ez a html hozzá:
<div class="node clear-block"> <div class="nd-region-header clear-block "> <div class="nd-region-left "> <div class="nd-region-right "> <div class="nd-region-footer clear-block "> </div>
A megoldás amit találtam a left és right régió köré rakok egy plusz div-et és abba kerül az elválasztó kép. Így ehhez a plusz div-hez adva a függőlegesen ismétlődő háttérképet (repeat-y) az elválasztó csík a magasabb div-el lesz egyforma magasságú.
<div class="node clear-block"> <div class="nd-region-header clear-block "> <div class="left-right-region-container"> <div class="nd-region-left "> <div class="nd-region-right "> </div> <div class="nd-region-footer clear-block "> </div>
Amilyen megoldást találtam:
Módosítom a ds modul-ban ezt függvényt:
ds/theme/theme.inc
erről:
function theme_ds_regions($object_display, $module) { $output = ''; foreach ($object_display->themed_regions as $region_name => $region_data) { // ... sok-sok sor - a függvény eredeti kódja } return $output; }
erre:
function theme_ds_regions($object_display, $module) { $output = ''; foreach ($object_display->themed_regions as $region_name => $region_data) { if ($region_name == "left") { $output .= '<div class="left-right-region-container">'; } // ... sok-sok sor - a függvény eredeti kódja if ($region_name == "right") { $output .= '</div>'; // end of div class="left-rigth-region-container } } return $output; }
Ezzel a megoldással az a baj, ha frissítem a ds modult akkor a bele-hack-elt változtatás eltűnik.
Hogy érdemes csinálni? Hogy ne az eredeti modulba kerüljön a módosítás, hanem pl. a sminkbe vagy egy saját modulba.
Csinálj neki saját layoutot:
Csinálj neki saját layoutot:
A mymodule/layouts könyvtárba meg másold be a two-column-stacked vagy mit használsz most éppen .tpl-jét, my-layout.tpl néven, aztán lehet faragni. A regions részbe persze azokat a régiókat írd be, amiket használsz.
----
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.
Köszönöm az iránymutatást
ez jó megoldás lesz.
D6 alatt még nem találom ezeket a " two-column-stacked" vagy hasonló template fájlokat a ds modulban, amit át tudnék másolni a saját modulomba. Szóval nem világos hogy d6 alatt a default template fájlok hol vannak, már ha vannak.
Az online doksiban van egy ilyen oldal:
http://drupal.org/node/1098068
de ez valószínűleg d7-hez van leírva.
Szerk:
A D6 ds api-ban nem találtam még meg, hogy lehet-e saját layout-ot létrehozni.
Ez a comment szerint az a benyomásom, hogy D6 alatt még nem lehetett ilyen.
Viszont megtalátam a ds helyett az nd modulban a template fájlt:
nd/templates/nd.tpl.php
Amit ha bemásolok a sminkbe és átnevezek:
zen-sminkem/templates/nd-tartalomtipusazonosito.tpl.php
Akkor felül tudom írni ronda megoldással a kimenetet, azaz cserélek reguláris kifejezéssel a html-ben, a tpl ilyen lesz:
remélem, ez a regexp nem komoly :)
Remélem, azért ezt a regexpes "megoldást" nem használod éles oldalon.....igazából az sem tiszta, miért van szükség ilyen szinten csúnya megoldásra.
Nem jutott eszembe jobb
néztem a template_preprocess_node()-ot, de ott még tömb minden, aztán nem néztem tovább.
Szóval komoly, igaz még csak localhost-on. :)
épp Te említetted a theme_ds_regions()-t...HASZNÁLD!Saját smink!
most látom, hogy az eredeti hozzászólásodban éppen a theme_ds_regions() függvényt említed, amit most akartam javasolni... akkor viszont nem értem, mi a probléma!
Azt írod, hogy minden frissítésnél felülíródik... dehát mióta módosítjuk a theme_ függvényeket VAGY BÁRMI MÁST a modul kódjában?? Ahogy core-t sem hekkelünk, úgy contrib modulokat sem, csakis végszükség esetén, de most a legrosszabb esetet említetted, mert a theme_ függvényeknek épp az a lényege, hogy saját sminkből felüldefiniálhatók!
kimásolva az eredeti hozzászólásodból:
Nyilván SAJATSMINKEDNEVE helyettesítendő a saját sminked nevével... és a saját sminked template.php fájljába pakold!
Alapszabály, hogy ha már regexppel kell legenerált outputot módosítani, akkor valamit rosszul csinálsz... :)
Igaz.
"theme_ függvényeknek épp az a lényege, hogy saját sminkből felüldefiniálhatók"
Ezt nem tudtam ^^^.
Találtam egy jó leírást:
http://drupalsn.com/learn-drupal/drupal-tutorials/drupal-theme-function-...
theme_ kezdetű függvények használata
Akkor elég fontos dolgot nem tudtál még :)
Szerintem annyira nem jó a leírás, mert egy elavult dolgot mutat be, a phptemplate_ használatát.
Amit így gyorsan tudni érdemes (a teljesség igénye nélkül!), anélkül, hogy hosszú cikkeket kellene elolvasnod:
drush cc theme-registry
)Példa:
theme_ds_regions függvényt lemásolod, berakod a template.php fájlodba, majd a theme részt kicseréled a sminked nevére, módosítod, ahogy neked tetszik - ez nem is fog felülíródni sosem az update-ek idején, mivel a saját sminkedben van (lehetőleg alsmink).
Ez a theme-függvény felülbírálására vonatkozó dolog MINDEN theme_ kezdetűre igaz, tehát ezzel akár az összes core-ban lévő theme-függvény kimenetét is felülbírálhatod. De fontos, hogy az eredetit előbb másold le, és úgy csináld ezeket a módosításokat, hogy ne vágja tönkre a megjelenést.
itt láthatsz példát a theme_username meghívására:
http://api.drupal.org/api/drupal/modules!node!node.module/function/node_...
theme('username', $node)
ha neked van egy saját SAJATSMINKED_username implementációd, akkor az fog meghívódni (ha a tiéd az éppen aktív smink)
http://api.drupal.org/api/drupal/developer!hooks!core.php/function/hook_...