Egyedi fieldek értékeinek módosítása

kovarik képe

Sziasztok,

Az user profiladatait kibővítettem plusz fieldekkel, amiket különböző modulok hoztak létre, pl. cck_phone, countries, stb.

A sima text, integer típusú mezők értékeit tudom módosítani, a kérdésem az lenne, hogy hogyan tudom kódból módosítani ezeknek az egyedi fieldeknek az értékeit?

A country esetében egy ehhez hasonló struktúrában van letárolva az érték:

  1. $field = field_get_items("user", $acc, "field_country");
  2. $view = $field[0];
  3.  
  4. (
  5. [iso2] => HU
  6. [country] => stdClass Object
  7. (
  8. [cid] => 97
  9. [iso2] => HU
  10. [iso3] => HUN
  11. [name] => Hungary
  12. [official_name] => Republic of Hungary
  13. [numcode] => 348
  14. [continent] => EU
  15. [enabled] => 1
  16. [language] => und
  17. [metatags] => Array
  18. (
  19. )
  20.  
  21. [rdf_mapping] => Array
  22. (
  23. )
  24.  
  25. )
  26.  
  27. [value] => HU
  28. [safe_value] => Hungary
  29. [safe] => Hungary
  30. )

Természetesen nem szeretném módosítani kézzel az egész tömböt, hanem valamilyen függvényt szeretnék meghívni az új értékkel, ami a megfelelő helyre beírja az értékeket.

Sima text típusú field esetén (ami szerintem baromi gagyi megoldás, de ezt írják a neten kismillió helyen), így módosítom az értéket:

  1. $u->$field = array(
  2. 'und' => array(
  3. 'value' => $value,
  4. ),
  5. ),
  6. );

Odáig eljutottam, hogyha módosítani szeretném, akkor lekérdezem a típusát:

  1. $res = db_query("SELECT id, type, module, data FROM field_config WHERE field_name = :field_name", array(':field_name' => $field))->fetchAll();
  2. $res = $res[0];

De hogy ezután ennek az információnak a birtokában hogyan tudom módosítani, azt már nem tudom.

Ha valaki tudja a megoldást, annak megköszönném, ha segítene.

Köszönöm,
Krisztián

Melyik modulhoz, modulokhoz kapcsolódik a téma?: 
Drupal verzió: 
lysander19 képe

Szia!

Nem csináltam még ilyet, de szerintem először is tudnod kell az ISO2 kódját annak az országnak amire updatelni szeretnéd. (Pl HU)

Töltsd be a country objectet ez alapján:

  1. $iso2 = 'HU';
  2. $cc_obj = country_load($iso2);

Utána hasonlóképpen át kell írni a saját usered objectjében a megfelelő mezőket mint text tipusnál:

iso2 , value => $cc_obj->iso2
country => $cc_obj
safe_value , value => $cc_obj->name

Lehet van ennél szebb megoldás.

1
0