Másodlagos linkek - eltűntetése néhány oldalról

Den képe

Kérdeztem már itt a másodlagos linkekről, itt kaptam is segítséget: http://drupal.hu/forum/menüsubmenü

Tehát, ha az elsődleges linkekre több szinten aggatok tartalmat, és a másodlagos linkek helyén is az elsődlegest jelenítem meg, akkor megy szépen az "almenu" a jobb oldalon.
(Beállítások: /admin/build/menu/settings oldalon: Elsődleges hivatkozások forrása: elsődleges linkek, Másodlagos hivatkozások forrása: elsődleges linkek)

De néhány oldalról el kellene tűntetnem. Csináltam egy fogalomtárat a glossary views-el (http://drupal.hu/forum/lexikon-szószedet). Csináltam glossary tartalom típust, és azokat a fogalomtár főmenű pont alá helyezem el. A /fogalomtár url-en jelenik meg szépen a views, ABC felül. A glossary elem megtekintésekor pedig a breadcrumbs és az url is /fogalomtar/megtatározás címe jelenik meg, és ez jó.

De: a fogalomtár oldalon megjelenik az almenu, amelyek a meghatározások. Ebből lesz jó sok, hosszú lesz, tehát nem kell a /fogalomtár oldalra. Szintén nem kell a konkrét fogalom meghatározás oldalára sem /fogalomtar/*.

Azt meg tudtam csinálni a page-tpl.php-ban, hogy ha a tartalom típus glossary, akkor a menü ne jelenjen meg:
 if ($node->type !== 'glossary') :
 print $secondary_menu_links
 endif;

A $secondary_menu_links-et a template.php-ban állítja elő a smink (960fluid) smink_preprocess_page()-ban:
$vars['secondary_menu_links'] = theme('links', $vars['secondary_links'], array('class' => 'links secondary-menu'));

Tehát, van egy $secondary_menu_link változóm, amit kiiratva van menü. Glossary típusú oldalon le tudom tiltani. De a /fogalomtar oldalon nincs $node (próbáltam $views...), ezen az olon nem jelenik meg a Dev load, Dev render sem.

IRC-n kaptam egy tippet: a secondary_link-et blokként tegyem a jobb oldai sávba, és állítsam be, hogy melyik oldalon jelenjen meg. "Másodlagos linkek" blokk a jobb sávba. Semmi. Semmi nem jelenik meg. Nincs semmiféle szűrő beálltva (url, csoport), de nincs ott.

Próbáltam (gondolom jó naívan, de a drupál programozást még nem kezdtem el) egy php blokkot létrehozni, ahol a tartalom a  print $secondary_menu_links . Persze ez sem jelenik meg.

Mit ronthatok el? Miért nincs másodlagos linkek blokkom, mikor elméletileg van, a template.php tud vele dolgozni. Hogy tudom a /fogalomtar/* url-ekről leszedni ezt a linket?

Köszönöm!

Melyik modulhoz, modulokhoz kapcsolódik a téma?: 
pp képe

Ha már preprocess akkor ott a megfelelő suggestion-t létre kéne hoznod és nem ifekkel szerencsétlenkedni a page.tpl.php-ban. Ehhez most tanulnod kéne, tehát ezt tehát most tegyük későbbre. Nézzünk egy instant megoldást:

A leggyorsabb megoldás az lesz, ha létrehozol egy page-fogalomtar.tpl.php fájtl és onnan egyszerűen kitörlöd a másodlagos linkekre vonatkozó részt. Persze ez csak akkor igaz, ha a fogalomtar útvonal az eredeti és nem egy álnév. Ha álnév, akkor az eredeti útvonalat (tippem: glossary) kell betenni helyette a fájlnévbe.

pp

0
0
Den képe

Hanem, ez még nem magyarázza azt meg, ha blokkban van a másodlagos link, akkor miért nem jelenik meg.

0
0
pp képe

A PHP szűrő evallal működik. Na de ott egy másik php környezet van amiben ez a változó nem fog létezni, sőt ha még létezne is akkor is egy függvényen belül van amiben nem fog létezni ez a változó. (ugye nem azt gondolod, hogy a Drupal mindenfajta struktúrát nélkülöző egyetlen egy fájlból álló átláthatatlan virslikód amiben nincsenek függvények ugye. :D)

Ha megnézed, akkor a preprocess-ben már ott figyel a régió amiben a renderelt blokkok vannak. Ergo amikor te létrehozod a változódat a blokk már rég le van renderelve, tehát miért is látná a változót? Arról most nem beszélek, hogy ugye Te ezt a változót egy tömb indexeként hozod létre amiből igazi változó majd csak a page.tpl.php-ban lesz ahol már megint csak lerenderelt, tehát az eval eredményét tartalmazó adathalmazod van csak, nem pediglen egy futni képes kód.

Blokkban php az a legutolsó dolog amit használunk:
1. tök más környezet az eval miatt
2. logikai bikfi-bukferenc miatt fenntarthatatlan állapotokat eredményez.
3. teljesítmény szempontjából nem ideális.
4. biztonság szempontjából problémás. Nem véletlenül került a php szűrő egy külön modulba a hatosban.

Akkor nézzünk egy gyorstalpalót mit hova tegyünk:

Adat előállítása -> modul
Nem megfelelően előállított adatok változtatása -> preprocess
HTML -> smink

Az egész feltétel rendszert egyébként a preprocessbe érdemes rakni tehát. Neked ami hiányzik az az arg() függvény, ami visszaadja az útvonal darabjait. arg(0) az első része az útvonalnak. Ekkor létre tudod hozni a feltételedet. Ekkor még mindig két választásod van. Az egyik amikor a másodlagos linked reprezentáló változóba üres sztringet raksz a feltétel teljesülése esetén. Ez megoldás, de jobb lenne, ha ilyenkor - valamint ha üres eleve a másodlagos linkek - a javaslatok közé betennéd a "page-withoutsecondary" szöveget és akkor lenne egy hasonló nevű tpl.php-d. Ennek az elejére azután odaírhatod megjegyzésbe, hogy ez nem tartalmaz ilyet. Ekkor később ha valaki (pl. Te egy fél év múlva) ránéz a kódra egyből fogja tudni, hogy melyik fájl írja le azt az oldalt ahol nincs másodlagos linkek, valamint azt is tudni fogja, hogy mikor nem kerül kiíratásra a másodlagos linkek, valamint ha ügyes voltál akkor azt is fogod tudni miért, mert ott van a preprocessben lévő megjegyzésben.

A lényeg, hogy minél kevesebb átláthatatlan if szerkezetet pakoljunk a sablonba. De ugye ezt az az ember aki az első és talán egyetlen előadást tartotta Magyarországon a Smarty sablonmotor használatáról pontosan tudja. (csak most néztem kinek válaszolok :D)

pp

0
0
Den képe

Nem számítottam rá, hogy ennyire felheccellek. Nade. Most egy kis keverés van, amit gyanítok, én okoztam:
van a $secondary_links és ezt a sablon alakítja át $secondary_menu_links-é (a megjegyzésében: hogy könnyebb legyen kiíratni). Én ezt elhiszem, nem is foglalkozom vele. Írtam is, gyaníthatóan csak a php filterrel begányítottam ennek a kiiratását. Nem jött össze, nem nagy kaland, valószínű a tudatlanságom, majd kinövöm.

Hanem, amit nem értek: van egy "hivatalos" másodlagos linkek blokk. Amit ha a blokkoknál beteszek a jobb oldali sávba, akkor nem jelenik meg.

Tehát, tekintsünk el gyenge próbálkozásaimtól, én a hivatalos verziót nem értem. Nincs ott a másodlagos menu. Ellenben a template.php-ban a $secondary_menu_links-be bele tudja renderelni, és ki tudom iratni.

Lehet, hogy megint nem értem az alapfogalmakat... Az elsődleges linket a sablon simán kiírja (beégetett), nem blokként teszi be, mint én szeretném a másodlagos linkekkel.

Na, mind1. Elkezdem a drupal programozás könyvet, nem úszom meg már az elején sem, úgy nézem.

0
0
pp képe

Történeti okai vannak ennek a katyvasznak, de alapvetően Te kevered, bár nem nehéz. (Az első bevezető előadáson szokott ez elhangzani a tanfolyamokon, amiket már talán ki is írtak.(x) ;))

Két fogalom van. Elsődleges és másodlagos hivatkozások és elsődleges és másodlagos linkek menüi.
Az elsődleges és másodlagos hivatkozások a sminkben vannak. Ezeket régen a smink beállításainál lehetett tartalommal feltölteni. Ezt ma már a Drupal menükből szedi. Van két menüd azonos néven. (ezért hívom máshogy, hogy szét tudjuk választani a két fogalmat.) Ezekhez a menükhöz van blokkod, mint minden menühöz. Na most. Ha te azt akarod, hogy a másodlagos hivatkozások (a sminkben a változó) értéke az aktuális elsődleges hivatkozás almenüje legyen, akkor a menü beállításoknál beállítod, hogy mindkettő hivatkozást az elsődleges linkek menüből szedje. Ebben a pillanatban a másodlagos hivatkozásoknak és a másodlakos linekek menünek semmi köze nincs egymáshoz. A másodlagos linkeket tartalmazó blokk, mely a menü elemeit jeleníti meg üres lesz, hisz a menüben nincs semmi.

Ez egy komoly logikai bukfenc a Drupalban, vagyis inkább azok számára jól érthető akik régóta foglalkoznak a rendszerrel az újoncoknak ez maga a rémálom. ;)

Remélem sikerült tisztáznom pár dolgot.

pp
(tudom, hogy a linkek és a hivatkozások ugyan azt jelentik, de más fogalomhoz próbálok más szót használni)

0
0
pp képe

Mivel a téma indításánál nem volt ott az aláírásod (nem véletlen) és a Den szemben a Döncivel nem mond nekem még semmit ezért úgy válaszoltam, hogy nem tudtam mit tudsz. Ezért egy nem teljesen jó, de működő instant megoldást adtam. Mivel később már tudatosult bennem, hogy nyomhatom a dolgot, mert nem felesleges karakter szórás lesz belőle nyomtam is. Szóval nem felhecceltél. ;)

pp

0
0
Den képe

... max még fogalmam sincs róla, hogy miről is beszélsz. De haladok. :)

Aláírás nem tudom miért nincs ott. Elméletileg nem kézzel kell, hogy betegyem... Na, mind1.

Átrágtam már magam néhány könyvön, bele-bele nézek a forrásba is simán. Sok mindennnel nem vagyok még kibékülve... Azért kérdezek, ha már tényleg nem találok megoldást sehol máshol.

Most megint másutt akadtam el, ami egy profinak rutin megoldás, én meg csak nézek. De az egy másik fórum témája lesz mindjárt.

Köszönöm a válaszokat!

0
0