Modulo Content Profile - Mostrare un campo CCK al posto dell'User Name di default - Seconda richiesta

7 contenuti / 0 new
Ultimo contenuto
Modulo Content Profile - Mostrare un campo CCK al posto dell'User Name di default - Seconda richiesta

Ciao a tutti...
Ho aperto una prima discussione qui http://www.drupalitalia.org/node/10468 e ringrazio in particolare Bohz per i preziosi suggerimenti ma mi mancano ancora un paio di cose per risolvere il problema e vedo di esporre la situazione in maniera più chiara.

Obiettivo: Visualizzare il nome inserito in un campo cck al posto dell'username di default usando i moduli Content Profile e Real Name nell'elenco degli iscritti in Simplenews - administer > newsletter > subscribers

1. Sono riuscito (con il modulo Real Name - e con l'aiuto di bohz - http://www.drupalitalia.org/node/10468) a sovrascrivere l'username con il Nome Azienda di un campo cck aggiunto nel modulo di registrazione utente tramite il modulo Content Profile e, andando in admin/user/user ho questo che va benissimo:

2. Il problema sta qua. Se vado in admin/content/simplenews/users (administer > newsletter > subscribers) ho questo:

..appare evidente che l'username non cambia come nella schermata #1 e il problema sta proprio qua: l'username deve essere "sostituito" con il Nome Azienda come nell'esempio #1

3. Nella seguente schermata del modulo Real Name appare il textarea dove ho inserito il form da bypassare e che dovrebbe far apparire il Nome Azienda ma non funziona... - "simplenews_subscription_admin name" (credo sia questo quello giusto altrimenti attendo eventuali suggerimenti....) - "comment_form name" è quello presente di default...

Qui la dicitura completa che si vede in parte nell'immagine:

Enter one form per line. Each line should start with the form name. That should be followed by the name of the field to be reset to the username. If the field is a child field, include its full parent path, separated by spaces. For example: mymodule_form fieldset_1 fieldset_2 name

Inoltre, chiedo (sempre che non dia fastidio più di tanto...) se qualcuno ha una soluzione per aggiungere una colonna in più che riporti il nome della persona o, in ogni caso un field cck compilato in fase di registrazione dall'utente come da chema qui sotto in admin/content/simplenews/users (administer > newsletter > subscribers):

Grazie

Ciao
Kipper

quello che vuoi ottenere richiede di aggiungere un campo alla tabella {simplenews_subscriptions} nel db, con tutto quello che ne consegue.
In pratica serve un refactoring del modulo, che è già abbastanza incasinato.

un hack quick and dirty per sostituire il campo realname all'username nella tabella sarebbe il seguente. Idealmente andrebbe sovrascritto via modulo, ma non ho capito come fare.

nel file simplenews.admin.inc ($Id: simplenews.admin.inc,v 1.5.2.53 2010/01/02 21:04:31 sutharsan Exp $)
alla riga 699, nella funzione simplenews_subscription_list_form()
sostituire

<?php
$form
['name'][$subscription->snid] =  array('#value' => isset($subscription->uid) ? l($subscription->name, 'user/'. $subscription->uid) : $subscription->name);
?>

con
<?php
$form
['name'][$subscription->snid] =  array('#value' => isset($subscription->uid) ? theme('username', user_load($subscription->uid)) : $subscription->name);
?>

NOTA: se applichi questo hack dovrai riapplicarlo ogni volta che aggiorni il modulo (e non è detto che non interferisca con altre funzioni...)
Diciamo che non è proprio la soluzione ideale...

Il form creato da simplenews_subscription_admin usa la funzione spiegato da Carlo, ma lo mette in $form['admin']['name'][] (stesso file, riga 640). Forse Real Name può fare il suo magia se specifici:
simplenews_subscription_admin admin name
invece di
simplenews_subscription_admin name

Più imparo, più dubito.

Ciao John.
il problema è che i valori che vuole modificare kipper, non sono form items, e quindi il bypass non funziona.
POi, non ho ben capito quale è la funzione di bypass forms:
username -> realname
o
realname -> username
?

Ciao Carlo, non uso questo modulo, ma mi ha incuriosito...

Ho dato un occhiata al codice - ben fatto - ma hai ragione, non può fare questo tipo di modifica...
In realtà anche gli elementi di tabella sono elementi di form, ma purtroppo di tipo $form['admin']['name'][$subscription->ssid] , con quel'ultimo un variabile ed ovviamente diverso. Peccato...

Bypass fa la prima che hai scritto. Vedi realname.module riga 500 - almeno credo, sono un pò sotto tono oggi...

Quindi, si, bisogna fare qualcosa con simplenews (hai azzeccato la riga - stai faccendo progressi con 'sto programmazione ;-) ma mi pare che almeno viene chiamato una funzione di theming - la 'simplenews_subscription_list'. Infatti in simplenews.admin.inc, riga 1172, c'è il theme_simplenews_subscription_list($form), quindi (forse) basta fare l'override di quello, in un modulo o la tema...

Bisogna smanettare il codice un pò, ma almeno non devi modificare il modulo.

Più imparo, più dubito.

Ciao John e bohz...

...premetto che mi sono già portato avanti con CiviCRM - Drupal (e con tutte le sue problematiche da risolvere e che sto pian piano risolvendo...) per ottenere ciò che voglio ma, siccome ritengo che Simplenews sia un ottimo modulo, faccio fatica ad abbandonarlo anzi, non lo voglio abbandonare proprio:

- funziona benissimo
- è perfettamente integrato con drupal nel senso che, a differenza di CiviCRM che va in un certo senso a sballare a livello visivo il Layout Simplenews lo mantiene. E poi, CiviCRM è molto pesante infatti, in fase di registrazione utente (con CiviCRM sincronizzato con il Profilo di Drupal), i campi username e email (di default in drupal) appaiono subito mentre, i campi aggiuntivi del Profilo di CiviCRM (es. Nome Azienda - Telefono 1 - Telefono 2 - Posizione etc...) ci mettono a volte 5/6 secondi prima di apparire, e questo non mi garba molto se devo essere sincero...
- lavora perfettamente con I18n (Multilingua) nel senso che ti da la possibilità di creare un vocabolario/i nel quale inserire termini (Ciascun termine è una Newsletter) potendo scegliere la lingua del termine ITA/ENG (o altre... ) in fase di inserimento e, una volta create te le lista così:

Newsletter 01 (Italian)
Newsletter 01 (English)
Newsletter 02 (Italian)
Newsletter 02 (English)

...a questo punto, tramite la funzione "Translate", le "splitta/separa" nelle 2 lingue in modo che, se sei nell'interfaccia inglese, in fase di registrazione utente (e, ovviamente non solo...) i ceckebox che danno la possibilità all'utente di scegliere la newsletter alla quale iscriversi appaiono in inglese es:

Newletter 01 (eng)
Newletter 02 (eng)
etc...

...e così per tutte le altre lingue....

Sono veramente indeciso se usare Simplenews o CiviCrm. Si, in ogni caso civiCRM è sicuramente una scelta giusta ma se riesco ad aggiustare/adattare Simplenews, non è detto che poi alla fine usi quello.

Il codice di Bohz funziona perfettamente:

...ho fatto un po di prove e sembra essere stabile e non avere ripercussioni su altre cose di drupal.

Si potrebbe anche (nel campo cck in fase di registrazione) dare un istruzione all'utente ettichettando il campo es. "Nome Completo / Nome Azienda" in modo che, inserendo tali dati, in tutti i campi username apparira una cosa di questo tipo anzichè solo il nome azienda:

Giovanni Rossi - Azienda Rossi

...in questo modo, quando si va negli user o negli iscritti alle news, sono disponibili subito i dati: email, nome, cognome, azienda bypassando il casino di aggiungere una colonna come avevo chiesto...

Però mi rimane un dubbio:
Il codice proposto da bohz (che funziona perfettamente) sarà sicuro? ...potrebbe riservare delle sorprese in futuro? mah...

Grazie ancora

Ciao
Kipper

puoi combinare più campi nel realname nelle impostazioni del modulo (name pattern).
il codice che ho postato non fa altro che caricare l'oggetto $user a partire dall' user ID in tabella simplenews_subscription e farne il theming attraverso la funzione theme('username', $user) controllata da realname.
non dovrebbe essere pericoloso...