Sziasztok!
Létrehoztam egy modult, ami hozzáad a blokkokhoz egy új blokkot. Evvel a résszel nem volt problémám, megjelenik gond nélkül.
Viszont ehhez a blokkhoz szeretnék készíteni egy sminket, amit csak ez a modul használ. Így gondoltam használom a hook_theme() függvényt.
my_theme() { return array( 'block' => array( // mi a lényege, hogy 'block' vagy bármi egyéb 'template' => 'my_view', // a template fájlom neve + tpl.php (a modul könyvtárjában) 'arguments'=> array( //argumentumok, amik átadódnak a tpl fájlnak 'title' => null, // $title 'body' => null, // $body 'link' => null // $link ) ) ); }
Gondoltam, hogy nem ennyi a dolog, de a doksi többi része nem világos a Using the theme layer (Drupal 6.x) oldalon. Ezt a page preprocess dolgot még kevésbé értem. A doksiban poll-bar van a function nevében, de sem előtte, sem utána nem ír poll-barról.
Drupal verzió:
Fórum:
csak egy modul valósíthatja meg a sablon fájlt
Az a gond, hogy a block modul már megvalósítja a block.tpl.php-t. Tehát Te már nem valósíthatod azt meg. Két dolgot tehetsz. Létrehozol egy saját sablont (mondjuk valami olyat ami a modulod nevével kezdődik :)) Ezzel persze csak a blokkod content részét tudod majd formázni. A másik lehetőség, hogy a theme_registry_alter hurkot megvalósítod és block.tpl.php, vagyis block soránál a theme paths tömbhöz hozzáadod a modulod könyvtárát. Ekkor elég elhelyezned a modulod könyvtárába egy block-[modulneve].tpl.php sablont és a Drupal azt onnan fogja venni.
Persze jó lenne tudni miért kell ez, mert simán lehet, hogy sokkal egyszerűbben is meg lehet oldani amit akarsz.
pp
Palócz István
https://palocz.hu | https://tanarurkerem.hu
dinamikus tartalom
Egyrészt szeretném, ha a blokk tartalmát nem az admin felületen kéne megírnom, mivel annak a tartalma nem konstans (of course) és tartalomtól függően szeretném változtatni a blokk megjelenését.
Teszem azt, a főoldalon a blokk tartalmazza a 3 legfrisebb blogbejegyzés címét egy kis teaserrel, egy másik oldalon meg események listát láthat benne a felhasználó.
Ehhez miért kell neked a
Ehhez miért kell neked a template??
Simán a $content változóban visszaadod amit fentebb írtál és az jelenik meg benne és pont. Beállítod az info-ban, hogy oldalra gyorstárazza, és akkor nem lesz gyász.
A hook_block-ot valósítod meg ugye?
Vagy nem értem mit keresel az admin oldalon a blokk tartalmának beállításakor.
Az, hogy mi van a blokkban az nem smink, hanem modul. Az, hogy hogyan néz ki az meg már smink. Persze a kettő összefügg, de azért az ezen az oldalon ez azon meg az jelenik meg az jól láthatóan nem smink, hanem modulban megvalósítandó.
Jó lenne, ha a kódot amivel létrehoztad a blokkot bemásolnád. Lehet nagyon rossz felé indultál el.
pp
Palócz István
https://palocz.hu | https://tanarurkerem.hu
Azt, hogy modulból hozod
Azt, hogy modulból hozod létre a blokkokat az szerintem jó dolog, viszont a különböző funkciót ellátó blokkoknak érdemes külön blokkot készíteni (modulból). Tehát ha van mondjuk egy blokkod amiben egy kategória hírei vannak, akkor jó lehet ha a kategóriától függ hogy mi jelenik meg benne, de az eseményeket már ne rakd bele. Én a helyedbe létrehoznék külön egy események blokkot is.
A tartalmát érdemes sminkelhetővé tenni és tpl fájlba kirakni (kevesebb memóriát eszik, jobban elkülönül), de szerintem ezért nem érdemes a theme_block() fgv-t felülvágnod a hook_theme_registry_alter-rel, elég szerintem kb ennyi:
Két template fájlod lesz így, külön lehet formázni a híreket és az eseményeket is.
Hosszu Kálmán
http://twitter.com/kalmanhosszu
http://www.kalman-hosszu.com/
http://premiumcmsthemes.com/
rossz logika
A különböző tartalmakhoz használj külön-külön blokkokat és azt jelenítsd meg amelyikre éppen szükséged van. Minden blokknak külön beállítható a láthatósága és külön sminkelhető egy block-[region|[module|-delta]].tpl.php fájl segítségével.
Szerintem jobb lenne még egyszer átgondolni azt is, kell-e ehhez külön modul. 90%-ban a szükséges tartalom előállítható pl. Views segítségével.
ehhez nem kell bűvészkedni
Alapból felkínálja a blokk modul a block-[region|[module|-delta]].tpl.php sablon fájl használatát.
forrás
Eddig ennyiről lenne szó.
@pp: a template azért kellene, mert a modulban nem szeretnék html-ezni, továbbá egy hírek tartalom elrendezése teljesen más, mint egy eseményeké
@hosszu.kalman: átírtam a hook_theme fv-t (egyelőre csak egy tpl-lel, mint látható), de nem akarja használni a template-et. Gyorstár ürítés megvolt.
@sgabe: köszönöm, a blokkrendszer világos és tényleg jobb alternatívának tűnik, de a template azért még kéne. Views későbbi okok miatt nem kerülhet szóba.
Egyszer sem hívod meg a
Egyszer sem hívod meg a sminkfüggvényt, így nem fut le.
Valami ilyesmi:
$block['content'] = theme('fb_news_block', $title, $body, $link)
Persze ehhez kellene a $title $body és $link változó is amit a kódban egyenlőre nem hozol létre.
Szerintem kicsit összekevered a dolgokat, amit Te akarsz az valaminek az első három elemét kiíratni. Ehhez nem a $title stb változókat kéne átadni, hanem mondjuk egy $nodes tömböt amiben tárolod ezeket az értékeket, vagy a $node objektumokat. A feldolgozó oldalon (template fájl) pedig csak ezen a $nodes tömbön kéne végigmenned és elintézni a megjelenést.
Ui: coder modult szerintem tegyél fel és rendezd a kódot mert nagyon átláthatatlan, legalábbis nekem.
Hosszu Kálmán
http://twitter.com/kalmanhosszu
http://www.kalman-hosszu.com/
http://premiumcmsthemes.com/
láma
Persze, hogy keverém még a dolgokat, mondhatni az első modulomról van szó. :P
Az a három változó a tutorialban volt benne, én pedig egyszerűen átvettem a példát. Első körben a template használatot szerettem volna beindítani. :)
Írásod alapján ezt
$block['content'] = 'saved content: '. variable_get("fb_maxdisp", 3);
cseréltem erre
$block['content'] = theme('fb_news_block', "cím", "content", "link");
Most öröm és boldogság van :) Köszönöm szépen mindenkinek!
Tom