Napi patch: Nodereferrer create Organic Groups kompatibilitás

  • GeSHi library error: sites/all/modules/geshifilter/geshi is not a directory.
  • 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: 
patch

A Nodereferrer Create egy okos kis modul, ami annyit csinál, hogyha van egy node, amiben egy node_reference mezőben már meglévő tartalomra tudunk hivatkozni, akkor miért is ne lehetne ugyanarról a node-ról azokat a tartalmakat létrehozni?

Lássuk konkrétan a feladatot:

Van egy tartalomtípusom, project. Ehhez node_reference-szel hozzá tudok adni password_record nevű tartalomtípusokat. Eddig semmi gond, a nodereferrer_create modul kipakolja a szükséges linkeket a project node-hoz, amit azon keresztül adok hozzá, az egyből be is lesz kapcsolva a project node-ba.

Nálam bonyolította a helyzetet, hogy organic_groups-t is használok. Vagyis szeretném, ha az így bekapcsolt password_record node-ok egyből abba a csoportba kerüljenek, amelybe maga a project van.
Ezt azonban nem kezeli a modul.

Ilyen linket ad alapból: node/%/create_reference/0/password_record
És nekünk ez kell: node/%/create_reference/0/password_record?gids[]=%

Nézzük akkor a forráskódot, illetve nem másolom be az egészet, van még egy pár feltétel, amit megvizsgál, de az alapelv ugyanaz.

[geshifilter-drupal6]** /** * hook_nodeapi view for reference fields * * Add the forms/fields */ function _nodereferrer_create_nodeapi_view_reference(&$node, $teaser, $page) { $menu_items = array(); foreach($node->reference_fields as $i => $ref) { $multiple = $ref['multiple'] == 1; $items = array(); foreach (array_filter($ref['referenceable_types']) as $referenceable_type) { $type_info = content_types($referenceable_type); if ($multiple) { if (node_access('create', $referenceable_type)) { $text = t(variable_get('nodereferrer_create_reference_label', 'Create new @type'), array('@type' => $type_info['name'])); $url = 'node/'.$node->nid.'/create_reference/'.$i.'/'.$referenceable_type; // és most jön a lényeg: ez a sor állítja elő a linket, amivel a kapcsolódó tartalmat létrehozhatjuk: $items[] = l($text, $url); } } // Add to main menu $menu_items[] = array('title' => $ref['field']['widget']['label'], 'items' => $items); return $menu_items; }[/geshifilter-drupal6]

$items[] = l($text, $url); - ugye ez standard Drupal linkgyáros, már csak arra kell rávenni, hogy azt a queryt utána tegye, ami csoportba fogja helyezni az új node-ot.

Ehhez ennyi kell:

[geshifilter-drupal6] $url = 'node/'.$node->nid.'/create_reference/'.$i.'/'.$referenceable_type; //innen jön a saját kód. Először megvizsgáljuk, hogy az organic_groups modul létezik-e. if (module_exists('og')) { // ha ok, akkor kérdezzük meg, hogy van-e jelenleg csoportkontextus, vagyis a project node, amin vagyunk, csoportba van-e beküldve $group = og_get_group_context(); //akkor most kérdezzük meg, hogy az a tartalomtípus, amit létre akarunk hozni, egyáltalán csoportba beküldhető tartalom-e if ($group && og_is_group_post_type($referenceable_type)) { //ha igen, akkor használjuk az l függvény opciójaként megadható query-t, amit szépen egy ? után biggyeszt majd a link végére. $options = array ( 'query' => 'gids[]=' . $group->nid , ) ; } } $items[] = l($text, $url, $options); [/geshifilter-drupal6]

Ez csak egyetlen dolgot nem kezel, a nodereferrer_create ugyanis tesz még a node-ra egy fület is. Nekem nincs erre szükségem, mivel saját modulból legyalultam, de akinek van kedve, egy csokiért/sörért/kortypálinkáért a Drupal hétvégén bekommentelhetné, hogy hook_menu_alterben hogyan pattinthatnánk a link mögé queryt. Akár ide is: http://drupal.org/node/949858 :)

Ps. kéretik nem hatalmasak kacagni az angol botladozásaimon, már untam minden issuemhoz odaírni, hogy sorry for my english.

Hozzászólások

Hello There. I found your

Hello There. I found your blog using msn. That is a very well
written article. I will be sure to bookmark it and return to learn more of
your useful info. Thanks for the post. I will certainly comeback.

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.