Display suite - node displays preprocess

The spam filter installed on this site is currently unavailable. Per site policy, we are unable to accept new submissions until that problem is resolved. Please try resubmitting the form in a couple of minutes.
Kategória: 
Leírás
Display suite - node displays preprocess

A mai napon a display_suite apira épülő node_displays modul preprocess rendszerével vívtam vérre menő, halálos küzdelmet. Már közel a végső és teljes megalázó vereség határán, darabokra szedve a display_suite és node_display kódját, jött a megvilágosodás, és a victory!

De nézzük a konkrét példát. Minek nekem preprocesst túrni node_displays-ben, amikor saját maga kvázi egy hatalmas node megjelenítési előfeldogozó?

A feladat egyfajta megjelenítési workflow leképzése volt: Adott egy tartalomtípus, amibe küldhetnek videót, képet, audiót, és csak hogy szaftosabb és vértől csöpögőbb legyen a kihívás, mehet bele egy node_reference alapú galéria csatolása is.

Így jött ki a következő mátrix:
HA teaser VAGY sticky a megjelenés (build_mode, hogy a haladók is értsék. :))
ÉS van kép ÉS van videó ÉS van audió ÉS van galéria akkor a teaserben a KÉP jelenik meg
ÉS NINCS kép ÉS van videó ÉS van audió ÉS van galéria akkor a teaserben a VIDEÓ jelenik meg
ÉS NINCS kép ÉS NINCS videó ÉS van audió ÉS van galéria akkor a teaserben az AUDIÓ jelenik meg
ÉS NINCS kép ÉS NINCS videó NINCS audió ÉS van galéria akkor a teaserben az GALÉRIA jelenik meg

Ezt a kis apróságot lehet, hogy node_displays nélkül könnyebben megoldottam volna, de most ezt a lapot osztották, már amúgyis régen meg akartam vele barátkozni.

Mivel amúgy is telenyomtam már a node_displays-t saját mezőkkel saját modulból, ezért gondoltam a rakás mező mellett elfér még pár hook is, így nem a sminket bántom. Végignézve a display_suite API-t persze kiderült, hogy nekem egy sem jó, még a kisnyuszi két füle közé is be tudok alterelni, de a node előkészítésébe nem. Egy kósza gondolat erejéig szóba jött még a hook_nodeapi is, de neeeem! Most a sárkánnyal küzdök, nem hátrálok vissza core anyácskánk szoknyája alá!

Következő lépésként a sminkesek fegyvertárának F117-esét vetettem be, a preprocesst! Ezt csak azért ilyen későn, mert pár napja volt egy hamvába holt próbálkozásom nem túl sok sikerélménnyel, ami sajnos azt az előítéletet ültette a fejembe, hogy márpedig preprocessel nem lehet.
Pedig de.

A zavart az erőben az okozta, hogy egy sima mezei node preprocessként már egy kész $content változó kerül bele a tpl-be. Azt átírni kb annyit jelent, hogy minden egyes renderelt mezőt összeszedek sorrendbe, összefűzöm, és odaadom a $contentnek. Nade pont azért raktam fel a node_displayst, hogy én ezt szépen UI-n tudjam huzigálni, ne kelljen már agyonvariálni preprocessben.

A dokumentációban mászkálva arra lettem figyelmes, hogy van ám a node_displaysnek saját node preprocesse.
Nosza, próbáljuk ki, és itt jött ám rám a sírásrívás megint, hiszen itt is egy fullra renderelt $content fogadott, hát hogy a rákba szedjem ki ebből a mezőket, ami nekem nem kell??

És itt jött egy lc a #drupal.hu chat csatornán:
[geshifilter-code][09:15]<butabot> Gratulálok, sikeresen pörgettel egyet a lammerszámlálón. A jelenlegi állás: hetvenegyezer-hétszáznégy.[/geshifilter-code]

Annyira megörültem, hogy van nd_preprocessünk, hogy csak éppen a benne meghívott függvényt nem néztem meg, ahol a rosetti kő található:

[geshifilter-drupal6]$content = ds_render_content($node, 'nd', $vars);[/geshifilter-drupal6]

Röviden a lényeg: Bárhogy tekergetjük a ui-n a node_display megjelenítéseket, azok egy nd_mező_neve_rendered változóban jutnak el a node_preprocessbe. A node_display saját preprocesse ugyan már lerenderelteti a $contentet, de ez nem akadályozhat meg minket abban, hogy újra meghívjuk, hogy kell.

Ennek értelmében a feladatmegoldás kódjának egy részlete:
[geshifilter-drupal6] function ds_custom_fields_preprocess_node(&$vars, $hook) { _nd_preprocess_node($vars, $hook); $node = $vars['node']; if ($vars['render_by_ds'] && ($vars['build_mode'] == 'sticky' || $vars['build_mode'] == 'teaser')) { if ($node->field_main_picture['0']['fid']) { unset ($vars['field_audio_link_rendered']); unset ($vars['field_video_link_rendered']); } // és még sokan mások $content = ds_render_content($node, 'nd', $vars); $vars['content'] = $content; } } [/geshifilter-drupal6]

Hozzászólások

mdfjo8s fotbollströjor barn

mdfjo8s fotbollströjor barn bex2wph gl0bif8h52 fodboldtrøjer børn 3l0j9efg4x gstuykxme billige fotballdrakter tvq0lsek r7n598oem maglie calcio tbcm4w9

Great internet site! It looks

Great internet site! It looks really good! Sustain the great work!

Wonderful webpage you have

Wonderful webpage you have there.

fotbollströjor fodboldtrøjer

billiga fotbollströjor

b1bs. sdbaigu. gameduaxe.

Cool webpage you've got right

Cool webpage you've got right here.

dnn-services. inu.

clevio. phim. ysiaq.

feenel. ptamartamedia.

bm3e2i0w fodboldtrøjer

bm3e2i0w fodboldtrøjer hrtbw5q86c ugw5sya6 fotballdrakter barn nw6xyze8d1 kj8dnmoh3 maglie calcio a poco prezzo y631ckhpeu u0og9avz17 fotbollströjor 6jcl7wm1zy

You've gotten astonishing

You've gotten astonishing knowlwdge on this website.

Keep up the helpful work and

Keep up the helpful work and generating the group!

You're a really beneficial

You're a really beneficial internet site; could not make it without ya!

You're a very useful internet

You're a very useful internet site; couldn't make it without ya!

Wow because this is excellent

Wow because this is excellent job! Congrats and keep it up.

fotbollströjor fodboldtrøjer

promosportplus. idera.

talayaban. risingapes.

Hozzászólás

A mező tartalma nem nyilvános.
  • Internal paths in double quotes, written as "internal:node/99", for example, are replaced with the appropriate absolute URL or relative path.
  • Engedélyezett HTML elemek: <a> <em> <strong> <cite> <code> <ul> <ol> <li> <dl> <dt> <dd> <del> <img>
  • A webcímek és email címek automatikusan linkekké alakulnak.
  • A sorokat és bekezdéseket a rendszer automatikusan felismeri.
  • Engedélyezett HTML elemek: <a> <blockquote> <br> <cite> <code> <dd> <del> <div> <dl> <dt> <em> <li> <ol> <p> <span> <strong> <ul>
  • You can enable syntax highlighting of source code with the following tags: <code>, <blockcode>, <bash>, <c>, <cpp>, <drupal5>, <drupal6>, <java>, <javascript>, <mysql>, <php>, <python>, <ruby>, <sql>. The supported tag styles are: <foo>, [foo].
  • Minden email cím át lesz alakítva ember által olvasható módon, vagy (ha a JavaScript engedélyezett) ki lesz cserélve kattintható, de biztonságos hivatkozásra.