Adott egy tartalomtípus. Taxonómia: Irányítószám meghatározza a várost, az meghatározza az utcát. + 3 mező: Házszám, Emelet, Ajtó.
Feladat: Legyen a node cím Irányítószám, Város Utca Házszám Emelet Ajtó
1. Megoldás tokenekkel: Hierarchical Select modullal választom ki a taxonómia értékeit, amihez Token is tartozik: [save-lineage-termpath], ez a leírás szerint nekem tökéletes lenne. Azonban az auto_nodetitle - ha jól vettem ki a fejlesztői oldalon - néhány tokennel nincs túl jóban, különösen ami a taxonómiát illeti. + Nem épp a legszebb címformátumot hozza ki a 1111/Budapest/ABC utca/27
1/a. "Tartalom taxonómia mezők" típusú CCK mezők hozzáadása tartalomtípushoz. Ezeket már használtam automata címgenerálásra, szépen működnek a Tokenek. Viszont így a Hierarchical Selectet kell kikapcsolnom, amit bevallom, nagyon megszerettem.
Eszembe jutott olyan megoldás is, hogy a taxonómia CCK mezőket elrejtem, és Javascripttel töltöm fel, amikor a Hierarchical Select változik. Ezt azért vetettem el, mert épp eléggé bele tudok kavarodni most most a Drupal + php-be, nem hiányzik, hogy még Java, netán Ajax is bonyolítsa az életemet.
2. Az automatic_nodetitle rendelkezik egy Evaluate PHP in pattern checkbox-szal. Szóval ide írva a php kódot vidáman tudom úgy alakítani a címet, ahogy szeretném.
Nézzük a ReadMe-ben szereplő példát: return "Author: $node->name";
Tökéletes, de nekem nem az kell.
return "Author: $node->terms";
Itt semmi. Hupsz, a terms ugye egy tömb, nyilván nem lehet csak úgy pikk pakk hivatkozni rá.
Keresés a megfelelő szintakszis/változó után: http://drupal.hu/forum/automatic-nodetitles-taxonomy-alapj%C3%A1n#comments
Az itt leírt megoldás lehet, hogy jó, de modulíráshoz még elég kicsinek érzem magam, minden esetre Ctrl+D - jó lesz későbbre. Viszont a kiinduló hozzászólásból el tudtam kezdeni barkácsolni a kódon:
return "$node->taxonomy[1]";
, na ez sem jött be
return "$node->taxonomy AS $term[1]";
persze ez sem, és még sok más próbálkozás.
Ebből rájöttem, hogy abszolút nem értem ezeknek a változóknak a szerkezetét. Nyilván ha $node tömb, akkor a taxonomy ennek a tömbnek a része. Egyáltalán le lehet írni egy mondatban ezt a sort: $node->taxonomy AS $term[1]?
És persze hogyan kapom vissza a node 3 darab taxonómia értékének egyikét?
A végére egy kis rizsa, hogy is kérdezek ilyeneket:
Másfél hónap Drupal nyúzás (kismillió modulinstall, uninstall, manuális táblatörölgetés, Drupal háromszori tönkretevése) után eljutottam idáig, hogy kérdezni merek. :) Jobbára szeretek mindent magamtól megoldani, még ha 3 napig is tart, hogy egy node beviteli form két mezőjét egymás mellé tudjam pakolni CSS babrálással.
Az angollal viszonylag megvagyok, viszont a drupal.org-on nehezen birkózok a szakmai nyelvvel. A php számomra a VB és a Delphi használata után olyan vadidegen, hogy nagyon nehezen áll át az agyam a szintaktikára is, a programozás struktúrája egyelőre szinte követhetetlen számomra.
Ezt azért írtam le, mert a kérdéseimben jórészt ezt a homályt is szeretném oszlatni, ezért mindig leírom azt, hogy milyen logika alapján jutottam el odáig, ameddig eljutottam. Így nem csak a végeredmény érdekel, hanem arra is, hogy egyáltalán jól indultam el a probléma megoldásában.
Ott vagy a célnál.
Devel modul felrak és bekapcsol. Ekkor minden node-nál lesz egy Dev load fülecske erre kattantva megnézheted a $node objektum felépítését. Amire figyelj, hogy Object-nél -> használj Array-nél [] (de ez talán még a delphiben is így van)
Van egy jó kis könyv a C programozási nyelvről Brian W. Kernighan és Dennis M. Ritchie írta. Azt szerezd be és olvasd el. Vékonyka és a szintaxis szinte ugyan olyan a PHP, C, C++, JavaScript, Java stb. nyelvekben, legalábbis az alapvető vezérlési szerkezetek tekintetében. Ha már programozással szeretnél foglalkozni szerintem nem árt, ha megismerkedsz a C nyelvvel.
pp
Palócz István
https://palocz.hu | https://tanarurkerem.hu
Köszi! Sikerült.
Először szerencsétlenkedtem. Kódírás > tartalomtípus mentése > update automatic nodetitles, majd elölről az egész milliószor.
Milyen jó lenne önállóan próbálgatni a kódot! A Devel modul régen megvan, az Execute PHP Code-al már próbálkoztam máskor, 0 sikerrel. Ekkor találtam rá a fórumon a kulcsszóra:
$node = node_load(valahanyasnode-om) ;
Onnan ment, mint a karikacsapás, ez lett a vége:
Azt hiszem, értem is a kódot: foreach dolga, hogy a teljes tömböt feldolgozza elejétől végéig. A {} között van az, amit minden elemen el fog végezni. A $node objektum taxonomy tömbjét hozzárendeljük a $term saját változónkhoz, és mivel a taxonomy elemei objektumok, ezért a $term->objektumváltozóneve szintakszissal tudunk hivatkozni rá. (Ezt csak úgy magamnak írtam, hogy ne felejtsem el. :))
Itthon a PHP Haladóknak Fekete könyv van, azért az alapok is elég érthetően le vannak írva.
----
Rájöttem, miért kérdezek olyan ritkán a drupal.hu-n. Amíg szedem össze az infokat a kérdéshez, mindig rájövök a megoldásra.
Hoppá, mégsem jó.
Azaz maga a kód jó, csak némi szervezési hibával szembesültem.
Mivel Mentés előtt még nincs taxonómia, így csak az update automatic nodetitles esetén működik a mutatvány.
Kicsit belenéztem a modulba, és a következőre jöttem rá:
Ez végzi az update-et.
Van a form_alter rész, és annak ez az utolsó sora:
$form['#submit'][] = 'auto_nodetitle_node_form_submit';
Kipróbáltam, hogy ezután beszúrom:
auto_nodetitle_operations_update($node->$nid) ;
Egyáltalán végrehajtódik-e a függvény? Ha igen, jól paraméterezem?
Ha nem, akkor hogyan szedhetném ki a legördülő menük tartalmát még mentés előtt
----
Rájöttem, miért kérdezek olyan ritkán a drupal.hu-n. Amíg szedem össze az infokat a kérdéshez, mindig rájövök a megoldásra.
Megoldás
Egy fantasztikus új modul: http://drupal.org/project/rules
Ez gyakorlatilag a triggerek kibővítése. Egyfelől kibővült az így kezelhető események sora, másrészt baromi összetett feltételrendszert lehet vele kialakítani.
Az előre definiált szabályokon túl pedig saját php is futtatható.
Az én esetemben a veszett bonyolult kód "Content is going be viewed" eseményhez rendelten:
auto_nodetitle_set_title($node);
node_save($node);
Így már szépen bele tudja tenni a taxonómiát a generált címbe.
----
Rájöttem, miért kérdezek olyan ritkán a drupal.hu-n. Amíg szedem össze az infokat a kérdéshez, mindig rájövök a megoldásra.
CNW
mindig amikor valaki meg akar nezni egy node-ot akkor ujra lemented azt? szerinted ez igy jo?
Igen, ez nekem is megfordult a fejemben.
De leginkább annak örültem, hogy sikerült megoldani a feladatot.
Todo listben benne, van, hogy foglalkozzak vele, de átmeneti megoldásnak azért tartottam jónak mert a tartalom beküldése után ez a node önmagában nem jelenik meg, csak views-al.
Ha jól gondolom ez az esemény akkor már nem következik be, de ezt leellenőrzöm, hogyha odáig jutok.
----
Rájöttem, miért kérdezek olyan ritkán a drupal.hu-n. Amíg szedem össze az infokat a kérdéshez, mindig rájövök a megoldásra.
1111/Budapest/ABC utca/27 és a preg_replace
A cél: 1111 Budapest, ABC utca 27.