Sziasztok!
Bizonyos oldalakon szeretnék eltérő '$primary_links' (elsődleges) és '$secondary_links' (másodlagos) menü háttereket megjeleníteni. Ennek a megvalósításában szeretném kikérni az ötleteiteket :)
A főoldalon és az Elérhetőség oldalon az eredeti (témában meghatározott) menü háttereket szeretném használni. Pathauto modult használok. Ezen oldalak URL-je mondjuk a következő:
http://www.oldalam.hu/
http://www.oldalam.hu/elerhetoseg
A következő 5 oldalnál egységes, de a főoldaltól eltérő színü háttérképet szeretnék használni:
http://www.oldalam.hu/hirek
http://www.oldalam.hu/hirek/politika
http://www.oldalam.hu/hirek/jatekok
http://www.oldalam.hu/hirek/telefonok
http://www.oldalam.hu/hirek/informatika
Az alábbi 4 oldalnál szintén az előzőektől eltérő elsődleges és eltérő másodlagos menü háttérképet szeretnék használni:
http://www.oldalam.hu/cikkek
http://www.oldalam.hu/cikkek/tesztek
http://www.oldalam.hu/cikkek/okostelefonok
http://www.oldalam.hu/cikkek/szamitastechnika
Ennél a 4 oldalnál szintén más elsődleges és másodlagos menü háttérképeket:
http://www.oldalam.hu/leirasok
http://www.oldalam.hu/leirasok/it
http://www.oldalam.hu/leirasok/jatekok
http://www.oldalam.hu/leirasok/szoftverek
A page.tpl.php átírására gondoltam. Vagy azt szeretném figyelni valahogy, hogy az URL-ben benne van-e a domain név utáni: 'hirek', 'cikkek', 'leirasok' string,
vagy ha van rá mód, akkor azt figyelném, hogy melyik elsődleges menüelem az aktív.
Hogy lehetne a legegyszerűbben és legértelmesebben megvalósítani ezt? :)
Remélem értitek mire gondoltam.
Köszi előre is!
add meg a body-nak a
add meg a body-nak a page.tpl.php fájlban hogy
Ő beleteszi a classok közé hogy milyen node type, így mivel gondolom különbözőek a type-ok, már gyorsan, egyszerűen le lehet cserélni CSS-el a cuccost.
Drupal full-stack developer at Wunderman Thompson Budapest
Minden oldal sima 'oldal'
Minden oldal sima 'oldal' tartalomtípus :)
Megnéztem és igy minden oldalnak ezt írja body classnak:
"not-front logged-in page-node node-type-page one-sidebar sidebar-left"
A főoldalnak pedig:
"front logged-in page-node one-sidebar sidebar-left"
Tehát ez igy sajnos jelen esetben nem jó megoldás :(
Énis iylen CSS class megoldással gondoltam átirni majd a hátteret, de a page.tpl-ben figyelni szeretném ezeket az aloldalakat, vagy URL-t vagy az oldalak szülőelemét is elég lenne és ennek megfelelően tenném hozzá a megfelelő class-t. Csak nem tudom mit és hogyan lenne jó figyelni :)
arg() függvénnyel figyeled az urlben lévő argumentumokat
és az alapján variálod a body osztályait. ez az általános gyakorlat ilyen esetekre. valójában a page.tpl.php -hoz nem nyúlsz eltekintve attól, hogy legyen benne ez a fenti print $body_classes rész. inkább a template.php -ban a template_preprocess_page() -ben variálod a $vars['body_classes'] -t
a már említett arg() http://api.drupal.org/api/drupal/includes--path.inc/function/arg/6 segítségével figyeled hogy mi az aktuális oldal és hozzáadsz a body classeshoz ha kell.
-
clear: both;
template.php-ban nincs
template.php-ban nincs template_preprocess_page(), se $vars['body_classes'].
Az arg() fv-el nem igazán tudom figyelni az URL-t, mert az arg(0) annyit ad vissza, hogy: node; az arg(1) pedig az adott oldal ID-ját. Nekem az URL stringet lenne jó ha visszaadná :)
nem tudom hol tartasz a
nem tudom hol tartasz a fejlesztésben, de én inkább megnézném megoldható e a más-más content type, ha túl sok lenne neked aboros kolléga tippje :)
Drupal full-stack developer at Wunderman Thompson Budapest
illetve pl a zen alsminkekben
illetve pl a zen alsminkekben elég nagy a body calss, még a node-id illetve views esetén még a nevét is veleteszi.
Pl Zen alsminkben egy sima node classa
Drupal full-stack developer at Wunderman Thompson Budapest
aboros: köszi! megpróbálom.
aboros: köszi! megpróbálom. Ha elakadok szólok :P
csakiistvan: az oldal már teljesen kész van, csak ezt az utómódosítást kellene még megcsinálni :\ 48 oldalból áll, ugyhogy nem szivesen variálnám a content type-okat :)
ahogy nézem a ZENben ez van a
ahogy nézem a ZENben ez van a body classban:
<?php print $classes; ?>
hátha ez többet tol bele
Drupal full-stack developer at Wunderman Thompson Budapest
Sajnos nem
Sajnos nem :)
http://drupal.hu/forum/men%C3%BCk-h%C3%A1tt%C3%A9rk%C3%A9p%C3%A9nek-cser...
Huu, ugye nem gondoltad
Huu, ugye nem gondoltad komolyan, hogy mindössze egy css extra class miatt a komplett tartalom struktúrát kell megváltoztatni?
----
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 tudom, hogy lenne a
Nem tudom, hogy lenne a legcélszerűbb :S
Elakadtam sajnos :(
Ez nem neked szólt. :)
Ez nem neked szólt. :)
----
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.
3 lehetőség: 1. Zen alsmink
3 lehetőség:
1. Zen alsmink készítése, ilyenkor készen kapod a bodyban az url első elemét section-[ezkellneked]
2. Context modul. Felveszed a 4 contextet útvonalra, akkor reactionnek theme, és section class, vagy body class, most nem tudom fejből
3. SMINKNEKVE_page_preprocessben (nem kifogás, hogy nincs, bele lehet ám írnil)
$path = explode('/', drupal_get_path_alias($_GET['q'])) és akkor a $path[0]-t vizsgálva hozzá lehet adni $body_class-hoz a szükséges classt.
----
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.
1. ez elég bonyolult nekem
1. ez elég bonyolult nekem :)
2. ez már jobban hangzik de még nem tudnám megcsinálni ez alapján
3. ez még közelebb áll hozzám. ezt a _page_preprocess() -t a template.php-kban keressem? Valami alap garland témában találtam egy phptemplate_preprocess_page nevű fv-t.
Ha jól sejtem akkor az én téma könyvtáramba található template.php fileban hozzak létre egy 'page_preprocess' nevű funkciót és oda irjam bele ezt a $path-os kódot, amivel kinyerem a kívánt úuvonal neveket? Majd a page.tpl-ben elég ezt a fv-t meghívni és vizsgálni?
3. megoldás
jól látod a megoldás menetét, kezdj csak hozzá,
de a _preprocess_page(&$vars, $hook) maga már egy függvény...
ezen a függvényen belül kellene a $body_classes tartalmához hozzáfűzni az útvonal álnevet pl ahogy szantog írta,
én a body id-ként állítottam össze egy változót az útvonal álnévvel, ehhez a honlaphoz: http://www.worldofyagyas.com/ ahol a body id szerint állítottam be egy div háttérképét, a felső menüpontok oldalaihoz
a page.tpl.php -ben pedig
... a $body_classes változóra másutt volt szükségem, nem akartam abba beleírni
Geva
----- Számítások - Kalkulátorok
Megpróbálom
Megpróbálom. Köszönöm!
Az én témám template.php-jában nincs semmilyen _preprocess_page() fv.
Ez nem baj? Hozzak létre benne mondjuk egy ilyen névvel egy függvényt?
function phptemplate_preprocess_page(&$vars)
igen, hozd létre
a template.php-ben ezt a sminkedneve_preprocess_page() függvényt és ebbe írd a kódot. Ebbe a függvénybe kerülhet más is, ami a page-hoz kellhet :-)
nálam így kezdődik:
(tehát a phptemplate helyett a sminkedneve kell)
Geva
----- Számítások - Kalkulátorok
template.php
Már részben működik! :)
template.php-ban létrehoztam ezt a fv-t:
function hdesign_preprocess_page(&$vars)
{
$path_alias = explode('/', drupal_get_path_alias($_GET['q']));
if ( $path_alias[0] == 'kapcsolat' ) $body_classes=$body_classes.'kapcsolat';
return $path_alias[0];
}
page.tpl-ben pedig ki print-eltem az oldalra a visszaadott értéket. Kíváncsi voltam mit ad vissza:
print about_preprocess_page();
Főoldalon visszaadja, hogy: node
A többi oldalon szépen visszaadja / jel utáni azonosítót. Pont erre volt szükségem! :)
Viszont kiír sajna egy hibaüzit:
37-es sor a page.tpl-ben az amivel kiiratom a visszaadott értéket.
182-es sor pedig a theme.php-ban ez a sor: function hdesign_preprocess_page(&$vars)
Még a body-hoz nem fűzi hozzá a kívánt 'kapcsolat' elnevezésű class-t.
Próbáltam igy is a template.php-ben: $vars['body_classes'] = $vars['body_classes'].'kapcsolat';
Így se akarta az igazát :\
(&$vars, $hook)
???
Geva
----- Számítások - Kalkulátorok
Megpróbáltam így is, de nem
Megpróbáltam így is, de nem fűzi hozzá a 'kapcsolat' szócskát a body class-ához :(
template.php:
nagy képzavar van
az előfeldolgozóban -- most épp a template_preprocess_page, de van más preprocess is -- referenciaként kapod az adott templateben majdan elérhető változókat egy szép tömbben. az előfeldolgozó soha nem ad vissza semmit -- nincs benne return $tistutyafule; -- hanem a többhöz ad elemeket, vesz el elemeket vagy módosít meglévőket és ennyi.
a másik ami teljesen értelmetlen -- pont azért mert sosincs return a preprocessben -- hogy print template_preprocess_page .. nincs ilyen, soha. sőt, kézzel te a template_preprocess_bármi -t nem hívod sose, tplből legalábbis biztos nem, mert mire a tplhez érünk már lefutott a megfelelő preprocess, az a dolga, hogy a tpl számára előkészítse a változókat ;)
a referenciaként kapott tömbben a legfelső szint kulcsai változóként lesznek majd elérhetők a tplben.
szóval például a page.tpl.php -ban ez van:
a template.php -ban meg ez:
-
clear: both;
Értem Oké :) Viszont ez még
Értem Oké :)
Viszont ez még mindig nem oldotta meg az elsődleges feladatot, hogy a menü hátterét cserélgetni lehessen CSS-el :)
Ez az explode-os parancs mindenképpen kell, mert ezzel szépen fel tudom deríteni a kívánt oldalakat. Már csak az a kérdés, hogy a body class-ához hogyan tudom hozzáfűzni az egyes oldalakon más menü hátteret igénylő extra class tag-et?
A kapcsolat oldalon pl egy 'kapcsolat' tag-et szeretnék hozzáfűzni a body tag-hez. De nem teszi hozzá :(
template.php-ben:
Pedig, leírták már páran, mit
Pedig, leírták már páran, mit kell csinálni...
$body_classes=$body_classes.'kapcsolat';
Namost, a $body_classes nálad tömb, vagy string? Ha tömb, akkor azért rossz a saját class hozzáadás, ha string, akkor a classokat szóközzel illik elválasztani.
+ szerintem ott $vars['body_classes']-nek kell állni. A $body_classes változó a sablonban lesz ilyen formában elérhető.
Ezen felül: body elemhez kiíratod a $body_classes-t?
Ha más nincs, nem érted, akkor nézd meg a zend sminkben hogyan csinálják.
--
Szabó Dénes - Internode.hu - Munkára fogott weblapok
Szerintem az lesz a gond,
Szerintem az lesz a gond, hogy valamiért nem fut le a function hdesign_preprocess_page(&$vars) funkcióm :(
Le tudnám ezt valahogy tesztelni, hogy valóban le fut-e?
Probáltam fileba kiiratni valamit ellenőrzésképpen, hogy lefut-e a fv:
777-es jogot adtam a test.txt filenak, amit a template.php-vel egy mappába helyeztem.
Sajnos semmit nem tett bele txt-be :(
Probáltam az adatbázishoz hozzáadni egy 'proba' táblát, amihez ugyancsak itt ebben a fv-ben probáltam hozzáadni egy teszt értéket, de ez is sikertelen volt. Kapcsolódtam ujra az adatbázishoz biztos ami biztos, de nem adott hozzá semmi értéket, így arra következtetek, hogy egyáltalán nem fut le ez a fv, úgyhogy valszeg itt akad meg az egész :(
szerk: most már biztos, hogy nem fut le. Beleírtam a page.tpl.php-ba ezt: hdesign_preprocess_page();
És így ugyan egy warning üzenet kíséretében, de lefutott a teszt adatbázisba írás kódom, amit a template.php-ba irtam a hdesign_preprocess_page() fv-be.
Töröld a theme cache-t. Ha
Töröld a theme cache-t. Ha nem megy, mert nincs admin menüd, vagy drush-od, akkor az összes cache-t a teljesítmény/performance oldalon (admin/settings/performance) kell törölni.
Minden smink layert illető beavatkozásoknál, theme fv, preprocess a theme cache-t törölni kell.
--
Szabó Dénes - Internode.hu - Munkára fogott weblapok
Sminkek oldalon kell menteni,
Sminkek oldalon kell menteni, az uriti a smink cachet :).
---
http://drupalaton.hu
Elég volt a sminkválasztós
Elég volt a sminkválasztós oldalon 'admin/build/themes/select' nyomni egy Mentés gombot :)
Most már tökéletesen lefut a '_preprocess_page(&$vars)' fv-em és valóban azt csinálja amit kell. Body classhoz hozzáírtam amiket kellett ily módon: $vars['body_classes'] .= ' kapcsolat';
Menü hátterének váltása úgy működik, ahogy szerettem volna. CSS-ben szépen megadom a class-oknak megfelelő képeket.
Köszönöm szépen mindenkinek a kitartó segítséget! :)
Nem kell ez a fájlbaírós
Nem kell ez a fájlbaírós bűvészkedés, elég a drupal_set_message('hdesign_preprocess_page() running.'); is. http://drupalcontrib.org/api/drupal/drupal--includes--bootstrap.inc/func...
Ha használsz devel modult, akkor pedig a dd(); http://drupalcontrib.org/api/drupal/contributions--devel--devel.module/f...
--
Szabó Dénes - Internode.hu - Munkára fogott weblapok