Profile override

jabba306 képe

Sziasztok!

Egy weboldalt upgrade-elek D6-ról D7-re és elakadtam.
D6-ban a regisztrációs formon használok többek között az alap profile modul által létrehozott beviteli mezőket, amiket módosítottam a hook_form_alter fgv-el (sorrend, összecsukhatóság, stb.)

D6-ban a hook_alter_form fgv $form tömbjében benne vannak ezek az adatok, így könnyen bele tudtam nyúlni és működik is.
Azonban D7-ben a $form tömb nem tartalmazza a profile modul által létrehozott mezőket, így azokat értelemszerűen nem tudom módosítani.

Segítséget szeretnék kérni, hogyan tudom D7-ben a profile modul által létrehozott mezők tulajdonságait alternálni? Milyen fgv-t, vagy modult tudok erre használni? Sajna a neten keresgéléssel nem találtam meg a választ!

Köszönöm!

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

Attól függ, mit szeretnél pontosan elérni. Ha csak a kiíráskori sorrendet szeretnéd módosítani, erre van lehetőség, elvben a $user objektumon is ott vannak ezek a fieldek, de ha nincsenek, a profile_user_load függvénnyel be lehet töltetni ezeket a mezőket, és azt csinálsz vele, amit akarsz.

Ha egyedi mezőkre van szükséged, vagy át akarod szabni a már meglevő mezőket, akkor pedig az Administration > Configuration > People > Account settings menüben a Manage fields fülön (bocs, nincs előttem most élő magyar site a menüpontokhoz) tudsz hozzpiszkálni a profilhoz (új mezők felvétele, régiek átszabása), nem kell form_alterezni most már.

Írd le, hogy mik az elképzeléseid, mit szeretnél megvalósítani, és talán tudunk segíteni a hogyanban.

1
0

--

()=() Ki oda vagyik,
('Y') hol szall a galamb
C . C elszalasztja a
()_() kincset itt alant.
Sweetchuck képe

Most így fejből nem tudom, hogyan működik a profile modul, könnyen lehet az is, hogy a te modulodnak a hook_form_alter()-je korábban fut le mint a profile modulnak az ugyan ilyen hook-ja, és ezért nincsenek még ott azok a mezők amiket módosítani szeretnél.

Ha ez a helyzet akkor, ezt legalább kétféle képen tudod megoldani.

Ha csak lehet, akkor használd a hook_form_FORM_ID_alter()-t. Amellett, hogy teljesítmény szempontjából előnyösebb, ráadásul a sima hook_form_alter()-ek után fut le. Tehát nagyobb esély van rá, hogy a módosítani kívánt elem már benne van a $form-ban.
Mivel D6-ról migrálsz, jó ha tudod, hogy ez a működés a D6-ban pont fordítva volt. Tehát D6-ban a hook_form_alter() futott előbb és csak aztán a hook_form_FORM_ID_alter().

Ha bebizonyosodott, hogy az azonos hook-ok futási sorrendjén kéne módosítani, akkor közvetlenül lehet módosítani a {system}.weight adatbázis mező értékét.
Itt van rá példa: forum_install()
(nyilván valami hook_install()-ban vagy hook_update_N()-ben)

1
0
Sweetchuck képe

Mindamellett javasolt a D6-os profil mezőket átkonvertálni rendes Entity Field-ekre.

D7-ben a profile modult csak akkor lehet bekapcsolni ha nem friss telepítés történt, hanem D6-ról frissítés.

https://api.drupal.org/api/drupal/modules%21profile%21profile.info/7

2
0
szantog képe

Jaja. Pl ezt meg is nézhetnéd, hogy jó-e még: https://www.drupal.org/sandbox/szantog/1744436

Elég régi, de ahogy nézem, semmi olyan nem válozott nagyon, amit érint.

0
0

----
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.

jabba306 képe

Köszönöm az eddigi válaszokat.

Kissé elhúzódott az upgrade. :)
A leírtak alapján megcsináltam a Profile2 modulban az új entity mezőket, át is migráltam, működik is.

Azonban belefuttottam egy problémába.
Amikor regisztrál egy új user, akkor trigger és az akció segítségével egy emailt küldök ki a regisztrált adatokkal.

Az Entity token modult engedélyeztem, az akció szerkesztésénél a tokenek listájában meg is jelennek a mezők.

Azonban a profile2 entity mezőit sehogyan sem akarja a Drupal becserélni a megadott értékre.

Mit tegyek hogy működjön?
Előre is köszönöm!

0
0