Sziasztok!
Több Drupalal hajtott hírportált üzemeltetünk, ezeken a portálokon vannak hirdetések is egyéb kiadások fedezésére... A hirdetések kezelésére eddig minden portálon külön kezeltük a hirdetéseket az Advertisement modul segítségével. Pár napja beüzemeltünk egy saját Adserver-t ami az összes portált egyszerre kezeli. Emiatt az Advertisement modul szükségtelenné vált, viszont eddig az Advertisement modulal gond nélkül tudtunk a tartalomba hirdetést tenni, mivel a modul automatikusan létrehozott egy blockot erre a célra a contentben.
Az lenne a kérdésem, hogy milyen módon tudok egy blockot létrehozni és oda ahogy a mellékelt linkelt képen is látszik?
http://img186.imageshack.us/i/adsblock.jpg/
Köszi a válaszokat!
Drupal verzió:
Fórum:
full node nézetben meg kell hívnod a blokkot a node.tpl.php -ban
a mellékelt screenshoton a blokk a node termjei és a content között van. ezt régióval nem fogod tudni megcsinálni szerintem, mert a node.tpl.php -ban nem írhatsz ki régiókat. úgy tudod ezt megkerülni, hogy az említett fileban a megfelelő helyen direktbe meghívod a blokkot és kiírod a tartalmát. (először értelemszerűen a blokkot létre kell ugye hozni)
kb:
természetesen a "blockID" a te blokkod idje kell, hogy legyen.
-
clear: both;
Még mielőtt...
Először is köszi a válaszod!
Még mielőtt nekikezdenék egy kérdés!
A content a címtől a mellékelt képen már nem látszó hozzászólásig tart. Az általad is említett forrás mező, dátum, term "cimkék" cck + egyéb modulok segítségével jön létre. Az lenne a kérdésem, ha én a node.tpl.php fájlban a $content változó elé szúrom be az általad megadott kódot akkor nem lehet, hogy a cím és minden fölé helyezi majd azt a bizonyos blokkot ?
Köszi a válaszod!
nem, jó lesz így, hidjed el azt! :)
a $content -ben nincs benne se a cím, se a beküldő és a dátum, se a kifejezések. a cím a $title -ben van, a beküldő és a dátum a $submitted -ben, a kifejezések a $terms -ben. a $content -ben csak a $node->body van (ha van ilyen) és a pluszként hozzáadott cck mezők. semmi más.
próbáld ki!
-
clear: both;
Ez így ?
Ennyi a node.tpl.php tartalma!
Tehát azt mondod, hogy ez ilyen formában működne?:
Hogy pontosítsak:
cím az valóban $title
forrás mező -> cck + link modul
dátum mező -> cck + date modul
cimkék "terms" -> cck + content taxonomy modul
igen, pontosan ezt mondom
persze a 'blockID' -t a te blokkod id -jére kell cserélned a module_invoke() -ban. most már próbáljad már ki már embeeeeer... amennyi idő alatt a választ bepötyögted, már háromszor kipróbálhattad volna és látnád, hogy igen, így. :)
-
clear: both;
Próbálom, próbálom! ;-)
Kipróbáltam, de sajnos nem jelenik meg! Amúgy úgy lett ahogy "jósoltam" a FireBug szerint a content tartalom fölé helyezi a dobozt ami a mellékelt képen jól látszik!
http://img505.imageshack.us/img505/9959/adsblock2.jpg
remek, menni fog ez, csak én vagyok a béna
kicsit utánamászva, kipróbálva, mindjárt jobban megy..
szóval ez:
$myblock = module_invoke('block', 'block', 'view', 1);
az 1 id-jű blokkodat fogja visszaadni, amit block modullal hoztál létre. hogy honnan lehet kideríteni ezt az idt, azt megtudhatod ebből a screenshotból:
http://img.skitch.com/20090707-bxxwtw8hfkgmymdcim1n6np71n.jpg
szóval ha a te "reklámblokkod" mondjuk 42, akkor így:
$adblock = module_invoke('block', 'block', 'view', 42);
remélem így már ok lesz és bocs hogy eddig félrevezettelek ;)
-
clear: both;
Már....
Jó lesz ez, már megjelenik a doboz tartalma csak még mindig a content felett, mellékelt kép...
http://img91.imageshack.us/img91/8474/adsblock3.jpg
Ja és ne viccelj én köszönöm, hogy segítesz...
ja érteeeem már, most esett le, hogy minek keverted ide
a content taxonomyt. :)
hát ez így maszera lesz, de persze nincs lehetetlen, csak tehetetlen. akkor legyen inkább az, hogy kicsit még bonyolítsuk, és hogy az én örömöm is meglegyen :) hogy a node.tpl.php -t meghagyjuk ahogy volt és az egész cuccot a template.php -ba költöztetjük. (igen, igen, preprocessbe:)
template.php:
ez így egy némileg más megközelítés. mikor bevezeted ezt az előfeldolgozót, törölnöd kell a smink regisztrációs tárat, hogy bekerüljön abba az új függvényed. és persze a mezőneveket most csak hasraütésre írtam be, lényeg, hogy a $vars -ban benne van minden meződ renderelt html kimenete field_MEZONEVE_rendered kulcs alatt.
-
clear: both;
Most ez lett!
http://img233.imageshack.us/img233/3878/adsblock4.jpg
Közben nézem, tanulmányozgatom, hátha jutok valamire vele...
A módszered teljesen jól működne, ha megtudnám oldani, hogy a print, mail, és text ikonok fel kerüljenek a helyükre. Ha kizárom a forras, date és term mezőket a node full nézetből akkor az adblock oda kerül ahová szerettem volna, viszont azok a "fránya" :) ikonok meg beépülnek jobbra lebegtetve a node szövegébe!
fene se tudja fejbe tartani mi melyik kulcs alatt van
pláne melyik tömbbe vagy objektumba. :)
én bénáztam, bocs. szóval..
$vars['node']->body » ez már a renderelt $content, mezőstül, szőröstül-bőröstül, nem ez kell, hanem helyette: $vars['node']->content['body']['#value'] » ez csak a száraz törzs mező, ez kell nekünk.
ennek megfelelően így más okénak kell lennie:
-
clear: both;
Majdnem....
Szia, bocs, hogy kicsit megkésve reagálok!
Így már teljesen jó lenne, ha a template.php-t rá tudnánk venni arra, hogy a print, mail, és text ikonokat is kihelyezze! Mert sajnos az nem jelenik meg! Van arra valamilyen mód, hogy a print modul ikonjait is meghívni a template.php-ban?
Még egy kérdés! Ezt a dobozt amit most meghív a template.php azt lehet valahogy "súlyozni"? Tehát ha én nem azt szeretném, hogy az közvetlen a node első bejegyzése előtt kezdődjön hanem a szövegrészbe szeretném elhegyezni, mondjuk a szövegrész 3. sortörésénél?!
Ez nem annyira fontos, csak érdekelt, hogy van-e rá mód!
Köszi és üdv!
nem próbáltam még a print modult
biztos van rá mód, hogy oda kerüljenek a dolgok, valahogy a modul is odateszi őket. :)
lehet rakni bárhova, ha megnézed a függvényt, amit a $vars['content'] -be raksz, az lesz a node.tpl.php -ban a $content. lehetne azt is, hogy mondjuk bevezeted, hogy a szöveg törzsbe raksz egy [***banner***] sztringet és ezt cseréled a blokk tartalomra. ezt akár filter modulba is rakhatod, akkor bármilyen szövegmezőre működni fog, aminek ezt a beviteli formát állítod be.
megnézem majd ezeket az ikonokat hogyan pakolja oda a print.
-
clear: both;
CCK Block Reference
Egy megoldás lehet ez a modul. Így a blokkot CCK mezőként kezelheted, nagyon kényelmes az egész.
A szépséghibája a te esetedben, hogy lehet, hogy nem szeretnéd, hogy minden egyes node beküldéskor be kelljen állítani, hogy melyik blokk legyen a mező tartalma.
Én ezt anno időhiány miatt hook_nodeapi és hook_form_alter párossal oldottam meg saját modulból, eltüntettem a form elemet, és mindig ugyanaz az érték került be a node objektumba. Így egy node beküldésekor automatikusan belekerült a blokk is a CCK mezőbe.
Ettől talán szebb megoldás, hogy előfeldolgozóval belenyúlsz oda, ahol a $content előáll. Ennek még nem volt időm utánanézni, de érdekelne a dolog.
Neked is köszi...
Igen, ebben a blokkban egy állandó az adserverünk által generált javascript lenne php beviteli módban!
Ha nem lesz más akkor marad az Advertisement modul és csak egy blokkot generáltatok vele a tartalomba és oda fogom betenni az adserverünk által generált javascript kódot! Ez a megoldás is szóba jött...