Node megjelenítésekor üzenet

eMeLA képe

Van egy alapnode és vannak hozzá kapcsolt további node-ok.

Amikor az alapnode megjelenik (node/x), a kapcsolt node-ok a jobb sáv egyik blokkjában (node_view+node_load) jelennek meg.

Megjelenéskor ki szeretném íratni a drupal_set_message()-val a node-ok címeit. A drupal_set_message()-t a hook_nodeapi() 'view' ágba tettem. A gond ott van, hogy az alapnode neve a lap megjelenésekor, a kapcsolt node-ok a következő lap megjelenésekor íródnak ki, én viszont egyszerre szeretném.

Vagyis a node_view+node_load esetén a hook_nodeapi() 'view' ágban hozzáadott drupal_set_message() nem az aktuális lapmegjelenítés üzeneteihez adódik hozzá, hanem a következő megjelenítéshez.

Lehet, hogy máshova kellene drupal_set_message()-t tennem ?

Drupal verzió: 
Illyés Edit képe

Az üzenet a $_SESSION-ben tárolódik. Miért fontos, hogy drupal_set_message() segítségével írd ki?

0
0
eMeLA képe

Mivel én akarom hozzáadni az üzenetet (tudtommal ez a módja). Hogy pontos legyek olyan esetben kell az üzenetnek megjelennie, ha az adott node (még) nem közzétett.

0
0

...mit tudok: http://web.termuves.hu

Illyés Edit képe

Az nem világos, hogy miért nem fűzöd a $node->content tömbhöz $op = view stádiumban, ha már egyszer ott vagy?

<?php
if ($op == 'view' && ...további feltételek...) {
  $node->content['valami'] = array(
    '#value' => 'valami érték',
    '#weight' => -100,
  );
}
?>
0
0
eMeLA képe

Hogy jön ide a $node->content ?

Mint írtam a drupal_set_message()-el szeretném kiíratni a címet. A mondatban nem a címen van a hangsúly, hanem a drupal_set_message()-n. Persze visszaolvasva megtévesztő, a lényeg, hogy egy üzenetet akarok megjeleníteni, ami végeredmynben sikerül is, éppenséggel az időzítése nem jó.

Tehát másként:
Ha a címsorban ?q=node/1 és a hook_nodeapi() 'view' részében meghívok egy drupal_set_message() függvényt, akkor a lap megjelenítésénél a node fölött rendesen megjelenik az üzenet.

Viszont ha node megjelenése előtt egy blokkban meghívom a node_view+node_load párost (?q=node/2), akkor a ?q=node/1-he tartozó üzenet megjelenik, viszont a ?q=node/2-höz tartozó, csak a következő lap megjelenítésénél. Vagyis két megjelenítéskor, ugyan a hook_nodeapi() egymás után fut le, a drupal_set_message() viszont nem.

0
0

...mit tudok: http://web.termuves.hu

Illyés Edit képe

A mondatban nem a címen van a hangsúly, hanem a drupal_set_message()-n.

De miért ragaszkodsz a drupal_set_message()-hez? Nem mindegy, hogy egy adott HTML tartalmat a drupal_set_message() ír ki, vagy a node_view(), vagy a turoscsusza(), vagy a makosteszta()?...

Egyébként te is nyugodtan betehetsz bármit a $_SESSIONS-be, nem kell feltétlenül a drupal_set_message()-en keresztül dolgozni vele.

Ha leírod, miért ragaszkodsz a drupal_set_message()-hez, szerintem előrébb leszünk.

Ha az a feladat, hogy x node megjelenítésekor y és z node megjelenjen egy jobb oldali blokkban, y és z címe pedig egy blokkban a node felett, akkor én erre írnék egy egyszerű kis blokk-modult, ami pl. arg()-tól függően elkészíti a két blokk tartalmát. A hook_nodeapi() nem blokk-készítésre való.

Ha nagyon muszáj, hogy üzenetnek nézzen ki, akkor CSS-ben tennék köré vékony rózsaszín vonalat. ;)

0
0
pp képe

Az van, hogy akkor adsz ki egy drupal_set_message-t amikor már a $message változó elkészült és át lett adva a sminkrendszernek. Ekkor nyílván máskor fog megjelenni. Értelmes kérdés is jöhetne, hogy mit is akarsz...

Én a (szülő) node-load-ba tenném bele a "gyermek" nodeok betöltését és ekkor a view ágbában a szülő node-nak már csak meg kéne jelenítenem azt.

pp
(az a baj, hogy gányolsz és átlépsz a normális működési logikán ;))

0
0
eMeLA képe

Már bocsánat, de nem gányolok. Elvégre szerintem jó helyre teszem az üzenet beküldését, csak a végrehajtási sor miatt nem akkor jelenik meg amikor én szeretném.

Nagyon leragadtatok a 'cím' szövegen, bár hangsúlyoztam a drupal_set_message()-on van.... Próbáltam egyszerűsíteni a kérdésem, de látom félrement...

Leírom újra:
Adva van egy normál node, és x darab node ami blokkban jelenik meg, ezek a node-ok az normál node-hoz vannak kapcsolva. Azt szeretném, hogy ha valamelyik node nincs közzétéve, akkor a beküldőnek, és az adminisztrátornak jelenjenek meg (eddig minden rendben működik, még ki is vannak emelve a rejtett node-ok), de szeretnék egy drupal_set_message() üzenetet is arról, hogy melyik node-ok nincsenek közzétéve, ebben az üzenetben (többek között) az adott node címe is szerepel.

Ez azért szükséges, hogy egyértelmű legyen a beküldőnek is és észrevegye az adminisztrátor is, melyik node nincs közzétéve.

Kézenfekvőnek tűnt a hook_nodeapi()-ba tenni az üzenet elküldését, de úgy látom, hogy az alap node megjelenítése után a $message változó lezárásra kerül...

Közvetlenül nem akartam a $_SESSION-ba tenni (ha lehet) az üzenetemet elvégre van a drupal_set_message().

Leginkább azt látom, hogy az alapnode hook_nodeapi() 'view' ágában kell vizsgálnom a kapcsolt node-ok megjelenését, és itt kell beküldenem az üzeneteket.

0
0

...mit tudok: http://web.termuves.hu

pp képe

Már bocsánat, de nem vagyunk távolbalátó kézrátétellel gyógyító csodadoktorok mi sem!
Hát honnan az öreg ördögből tudjam, hogy Te írtál egy modult, ami megjelenít egy blokkot, vagy csináltál egy blokkot és PHP beviteli formában belgányoltad amit akartál?

A lényeg átment szerencsére, ott a hozzászólásod végén amit tenned kell.

pp

0
0
eMeLA képe

.

0
0

...mit tudok: http://web.termuves.hu

pp képe

Erre gondolsz?

a kapcsolt node-ok a jobb sáv egyik blokkjában (node_view+node_load) jelennek meg.

maradok csendben, de nekem ebből nem egyértelmű, hogy hogyan oldottad meg. (mi az a node_view az egy view vagy a node_view függvény? Hogyan kerül a blokkba?

Nem kétlem, hogy velem van a hiba, de én akkor se értettem, hogy hogyan jelennek meg a jobb oldalsáv egyik blokkjában...

Magánban tisztázhatjuk egy sör mellett legközelebb. ;)

pp

0
0
aboros képe

akkor nem értem ezt a node_api dolgot, miért nem a hook_block() -ban hívod a drupal_set_message() -et? (ahol a blokk tartalmát előállítod..)

az épp megjelenített node -ra meg a template_preprocess_node() -ban vagy akár a hook_nodeapi() -ban, ahogy eddig is.

ha nem saját modul, hanem views blokk amiről szó van, akkor meg a nézet megjelenítőjének lehet egyetlen sorát is sminkelni egy tpl.php -val (vagy előfeldolgozóval) és ott hívni a szet messzidzs.

0
0

-
clear: both;