CCK imagefield

eMeLA képe

Tud valaki olyan modulról, ami a CCK imagefield-el feltöltött képeket a megadott könyvtáron belül, node-onként a node id-je alapján külön könyvtárba tölti fel.

A TOKEN modul engedi az user adatai alapján megadható token-eket, de nekem ez nem teljesen kielégítő.

Melyik modulhoz, modulokhoz kapcsolódik a téma?: 
aboros képe

soha nem próbáltam, de elvileg ez a módja a dolognak. valamikor a héten vagy a múlt héten volt egy szál, ahol valaki az auto_nodetitles modulhoz akart így tokent hozzáadni, igaz ott taxonomy termekről volt szó, de szerintem az elv ugyan az.

engem is nagyon érdekelne egyébként a megoldás. ;)

0
0

-
clear: both;

eMeLA képe

:)
A helyzet az, hogy ennél egy kicsit bonyolultabb a dolog, ugyanis, ha egy új tartalmat küldesz be, akkor még nincs a node-nak nid-je :) Ugyan az adatbázisból ki lehet olvasni a következő nid értékét, de ha lassú vagy akkor elképzelhető, hogy valaki hamarabb küld be egy node-ot, és így nem lesz valós a kiolvasott nid.

Én nem találtam modult rá, de ez még nem jeleni azt, hogy nincs....

Én egy olyan modulra gondoltam, ahol hook_alter()-ben kiegészítem az imagefield-nél megadott könyvtárt egy generált karaktersorral. Majd amikor ténylegesen megtörtént a nid megadása utána átnevezem a könyvtárat, valamint a files táblában átírom a generált karaktersort, a nid értékre. Persze ez csak az elv, még reménykedem, hogy van rá kész megoldás.

0
0

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

aboros képe

régóta ver a víz miatta, hogy a token + filefield tokens engedéylezése után sem tudok az imagefield mezőimnek olyan file útvonalat adni, hogy tistutyafule/[nid]/[uid] például és tökre nem értettem, hogy miért, de így hogy most mondod, elég logikus. :)

én úgy szoktam megadni filemezőknek útvonalat, hogy az uid (meg néha más, pl ttipus) alapján van könyvtárakba pakolva a sok file. nem tudtam még jobbat kitalálni, illetve nem volt időm rá vagy még inkább a kettő együtt. :)

0
0

-
clear: both;

eMeLA képe

Ez eddig egy félmegoldás, de meglepően egyszerű:
(kell hozzá a TOKEN modul is)

function modulom_token_values($type, $object = NULL, $options = array()) {
  if ($type == 'global') {
    if (arg(0) == "node" AND is_numeric(arg(1))) {
        $tokens['nid']      = arg(1);  
    }
    else {
    	$tokens['nid']      = ''; 
    }
    return $tokens;
  }
}
function modulom_token_list($type = 'all') {
  if ($type == 'user' || $type == 'all') {
    $tokens['global']['nid']      = t("Node ID");   
    return $tokens;
  }
}

A félmegoldás az, hogy csak akkor menti a nid könyvtárba, ha előtte már el volt mentve a node. Egyébként a field-nél megadott könyvtárba teszi.

Itt most elakadtam.

Lehetséges megoldások:

1. Lehetne úgy, hogy ha új node beküldése van, akkor egyszerűen nem lehet képet feltölteni: hook_alter()-ben törölni az imagefield form részét, majd a node beküldése után visszairányítani a szerkesztő oldalra. Ekkor már van nid, tehát lehet képet feltölteni, a nid-el jelzett könyvtárba. Ez nem nagyon elegáns, de működőképesnek tűnik.

2. Mehet a képfeltöltés az alapkönyvtárba, majd a node beküldése után és a node megjelenése előtt, ahol már van konkrét nid, áttölteni a képeket a nid nevű könyvtárban, illetve kibővíteni a files tábla filepath mezőjét. Amit nem tudok, hogy miután kiossza a Drupal a nid-et, mivel, és hol lehet beavatkozni ? Nekem ez lenne a tetsző megoldás...

3. cron futtatásnál, nézni, hogy van-e olyan feltöltés, ami az alapkönyvtárra mutat, ha igen, akkor áttölteni. Ha a 2. nem megy ezen a vonalon fogok próbálkozni.

0
0

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

eMeLA képe

Na igen. Csak bele kellett nézni a node_save()-be.

Az tárolás előtt a hook_nodeapi() "presave" a végén tárolás után "insert" $op-al hívódik meg. "Insert"-nél már van nid.

(egy jó és hasznos téma lenne, ha valaki összefoglalná, hogy a hook_nodeapi() és az xxx_alter() fügvényekkel mikor, hol és hogyan lehet beavatkozni az adatok kezelésébe)

0
0

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

eMeLA képe

http://www.emela.hu/drupal/imagefield_nid.rar
TOKEN modul kell hozzá

Elvileg működik, de nem árt tesztelni...

Az imagefield könyvtár megadásnál, be kell írni [nid] tokent.
Ha még nincs a node beküldve (csak a kép feltöltésre kattintunk), akkor a megadott könyvtárba (nid nélkül) tölti fel a képet. Ha a node beküldésre került, akkor átmásolja a képeket a nid szerinti alkönyvtárba.

szerk: frissítettem a modult, volt benn egy-két hiba (2008.12.21)

0
0

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