Rules

18 contenuti / 0 new
Ultimo contenuto
Rules

Salve,
ho configurato il modulo rules e mi servirebbe dare il permesso ad un utente specifico (utente A) per visualizzare una pagina determinata.

Ho letto di attivare gli eventi sulla singola form ma come si costruisce poi la regola in questione ?

Un'altra regola che mi servirebbe è per esempio contollare la lunghezza dei caratteri su un campo in una determinata form..

Grazie

Riguardo la costruzione di regole non ti so aiutare ma per il contatore di caratteri si, devi avere un po di dimestichezza con Drupal e il codice php:

La funzione init per caricare il file modulo.js (nome del file di esempio)

function modulo_init() {
  drupal_add_js(drupal_get_path('module', 'modulo') .'/includes/modulo.js');
}

Textarea con attributi nella funzione form ad esempio modulo_form() {

$form['presentazione'] = array(
        '#type' => 'textarea',
        '#maxlength' => 512,
        '#rows' => 9,
        '#cols' => 50,
        '#required' => TRUE,
        '#description' => '',
        '#prefix' => '<div class="div-presentazione-text">In questo campo puoi inserire qualche riga di presentazione personale riguardante la tua persona, le tue competenze e la tua esperienza lavorativa. <b>Ti invitiamo a non citare nomi di persone o di aziende.</b></div>',
        '#suffix' => '<div id="div-presentazione"><font color="white">...<font></div>',
        '#attributes' => array('onkeypress' => 'pollingPresentazione()', 'onblur' => 'stopPolling()'),
      );

Nel file modulo.js (nome del file di esempio) richiamto nell'hook init metti questo:

/**
* Implementation of candidati-div-presentazione polling
*/
var count = 0;
var doPolling;
function stopPolling(){
      clearTimeout(doPolling)
}
function pollingPresentazione(){
      doPolling = setTimeout("lookingPresentazione()",100);
}
function pollingCvpubblico(){
      doPolling = setTimeout("lookingCvpubblico()",100);
}
function lookingPresentazione(){
      document.getElementById('div-presentazione').blur;
      var candidati_div = document.getElementById('div-presentazione');
      var candidati_txt = document.getElementById('edit-presentazione');
      var candidati_txtvalue = candidati_txt.value;
      entered = candidati_txtvalue.length;
      candidati_div.innerHTML = entered + " carattere/i. Massimo 512 caratteri";
      count++
      if (entered>512) candidati_div.innerHTML = "<font color='#FF0000'>Raggiunta la lunghezza massima. Massimo 512 caratteri!</font>";
      pollingPresentazione();
}

Il javascript controlla alnche la lunghezza massima che si puo personalizzare. Se hai bisogno di delucidazioni dimmi pure. Ciao

Ciao danzisiweb, non riesco a trovare spiegazioni per Rules che mi interessa molto ma ti ringrazio per il codice sul contatore, conosco il php ma onestamente pensavo che utilizzando Rules il contollo di un campo fosse più immediato.

Ho compreso grosso-modo il tuo codice.... però non trovo l'elemento 'edit-presentazione' che richiami nella function "lookingPresentazione" e vedo la funzione $form per la creazione della textarea ma non ho capito dove viene chiamato modulo_form()..

Cmq, grazie

Ciao marco.latina,

Quote:
Un'altra regola che mi servirebbe è per esempio contollare la lunghezza dei caratteri su un campo in una determinata form..

sai io ti ho postato un codice che ho utilizzato io e andrebbe, probabilemente personalizzato al caso tuo.

Riguardo l'elemento 'edit-presentazione' è drupal che assegna questo id al form di nome $form['presentazione'] che ho indicato sopra.

Riguardo l'esempio modulo_form() { sta ad indicare la funzione dove costruisci il form personalizzato. Ma tu cosa intendi per 'determinata form' ? Se mi dai indicazioni precise posso postarti il codice giusto. Forse non hai nemmeno bisogno di implementare modulo_form() { ma solo di aggiungere gli attributi alla determinata form che mi dici.

Ciao fammi sapere....

Per controllare la lunghezza di un campo puoi anche usare questo modulo: http://drupal.org/project/maxlength

Balbo wrote:
Per controllare la lunghezza di un campo puoi anche usare questo modulo: http://drupal.org/project/maxlength[/quote]
Ma un modulo solo per controllare la lunghezza ? Ecco perchè vorrei capire bene come adoperare rules..
:)

marco.latina wrote:

ho configurato il modulo rules e mi servirebbe dare il permesso ad un utente specifico (utente A) per visualizzare una pagina determinata.

Non so se ho capito il problema, ma non puoi semplicemente usare Content access+ACL per far vedere la pagina all'utente A (con un ruolo specifico)?

ciao

bgiody wrote:
marco.latina wrote:

ho configurato il modulo rules e mi servirebbe dare il permesso ad un utente specifico (utente A) per visualizzare una pagina determinata.

Non so se ho capito il problema, ma non puoi semplicemente usare Content access+ACL per far vedere la pagina all'utente A (con un ruolo specifico)?

ciao

Si, penso proprio di si Bgiody, per quello che mi è servito fino ad ora ho utilizzato Image Gallery Access con ACL.. Content Access ancora no.
Però mi incuriosiva saper adoperare bene Rules, mi sembra molto potente e da quello che ho capito lo puoi utlizzare per permessi utente, controllo campi, controlli su form ecc.... se non sbaglio me lo aveva consigliato Pinolo... però non riesco a trovare spiegazioni in merito ??!
:)

Ciao Danzisiweb,
riprendo la discussione perchè ho provato anche il modulo maxlength e ho visto che ti permette di contollare la lunghezza nel caso di campi creati in form con cck, ma a me servirebbe dare una maxlength al campo corpo-body della form che ti premette di inserire commenti ad una pagina (praticamente il modulo comment).
Mi potresti dare delucidazioni in merito? Se è possibile aggiungere e dove precisamente istruzioni php a riguardo o se basta cambiare qualche opzione in drupal ( ma non credo).

Grazie come al solito..
;)

Ciao,
se mi dici che si tratta del modulo comment, è praticamente già risolto: basta impostare '#maxlength' => 60, all'elemento. Si ma quale elemento? Se mi mandi il link della pagina in questione provo a guardare, oppure osserva il codice sorgente e cerca di trovare il nome dell'elemento a cui vuoi mettere il codice maxlength. Poi con un finder o un editor php trovi la stringa e la modifichi.

Fammi sapere

Quando commenti una pagina web ti viene fuori la form con il titolo e la text area dove aggiungere il testo del commento, ora il problema per me è proprio questo, se faccio visualizza sorgente della pagina magari individuo l'elemento

<div class="form-item" id="edit-comment-wrapper">
<label for="edit-comment">Testo (max 5 righe): <span class="form-required" title="Questo campo è obbligatorio.">*</span></label>
<textarea cols="60" rows="15" name="comment" id="edit-comment"  class="form-textarea resizable required ckeditor-mod"></textarea>
</div>

che dovrebbe essere la textarea id="edit-comment" ma dove devo andare ad aggiungere le istruzioni di maxlength a questo elemento ?
In qualche pagina nei themi o nel modulo comment ?

Guarda ho cercato di capire dove hai il codice postato sopra ma sarebbe utile che tu mi dica il link come ad esempio

http://www.drupalitalia.org/node/13459#comment-52047

oppure

http://127.0.0.1/drupal-6.19/?q=node/add

Ciao e scusami

Si, un link di esempio è http://www.mio_dominio.it/comment/reply/465#comment-form
Non ti posso dare il link con il dominio effettivo perchè sono pagine su cui sto lavorando, può entrare solo l'utente autorizzato e non ancora attivato la registrazione utente.
Ma dal link vedi che sono le pagine di inserimento di un commento che puoi fare con il modulo comment... come ti dicevo prima dove dovrei agire con le istruzioni maxlength, in quali pagine del modulo comment ?

Ciao Marco,
credo di aver capito qual'è il file e il codice ma mi viene in mente che la textarea non ha l'attributi maxlenght vedi per maggiori info:
http://api.drupal.org/api/drupal/developer--topics--forms_api_reference....

Le textarea nel modulo comment nella cartella modules/comment per capirci, ha 2 textarea:
modules\comment\comment.module (riga 1373): '#type' => 'textarea',
modules\comment\comment.module (riga 2143): '#type' => 'textarea',

Detto questo potresti ovviare con un javascritpt, ma nota dolente se c'è un editor (FCKEditor, TinyMCE...) attivo lo script non viene eseguito.

Quella che ti interessa dovrebbe essere alla riga 1373:
è così:

<?php
  $form
['comment_filter']['comment'] = array(
   
'#type' => 'textarea',
   
'#title' => t('Comment'),
   
'#rows' => 15,
   
'#default_value' => $default,
   
'#required' => TRUE,
  );
?>

e deve diventare così:
<?php
  $form
['comment_filter']['comment'] = array(
   
'#type' => 'textarea',
   
'#title' => t('Comment'),
   
'#rows' => 15,
   
'#default_value' => $default,
   
'#required' => TRUE,
   
'#prefix' => '<div id="edit-comment-entered-msg">',
   
'#suffix' => '<font color="red"><b>Ammessi solo 2 caratteri</b></font></div>',
   
'#attributes' => array('OnChange' => 'var tx = this.value; var entered = tx.length; if (entered>2) alert("Ammessi solo 2 caratteri");'),
  );
?>

A mio avviso non è la soluzione ottimale perchè al salva del form i dati partono quindi lo script va messo nel bottone submit alla riga 1393 del comment.module così:
PRIMA:
$form['submit'] = array('#type' => 'submit', '#value' => t('Save'), '#weight' => 19);

DOPO:

<?php
$form
['submit'] = array(
'#type' => 'submit',
'#value' => t('Save'),
'#weight' => 19,
'#attributes' => array('OnClick' => 'var tx = this.value; var entered = tx.length; if (entered>2) { alert("Ammessi solo 2 caratteri"); return false; }'),
);
?>

ATTENZIONE: L'esempio è con 2 caratteri spero che si capisce.

Altra soluzione potrebbe essere nell' hook validate ma questo in un altra puntata.... :)

CIAO

Grande Danzisiweb!
Non è sempre immediato "sviscerare" codice.. ma tu sei, come al solito, di grande aiuto!!

Cara Danzisiweb, ho inserito il codice

$form['submit'] = array(
'#type' => 'submit',
'#value' => t('Save'),
'#weight' => 19,
'#attributes' => array('OnClick' => 'var tx = this.value; var entered = tx.length; if (entered>10) { alert("Ammessi solo 10 caratteri"); return false; }'),
);

DOPO:
$form['submit'] = array('#type' => 'submit', '#value' => t('Save'), '#weight' => 19);

però non mi scatta il controllo!
:(
Dicevi che il javascript non viene eseguito se c'è un editor .. io utilizzo CKEDITOR, quindi potrebbe essere a causa di questo..
Ma allora è tutto un cavolo, nel senso che non c'è soluzione se uso questo editor, ho capito bene ?
:)
Però mi sembra strano che non si possano implementare controlli simili.. avremmo troppo le mani legate.

Allora, forse c'è un po di confusione su cosa volevo dire quando ho scritto PRIMA e DOPO Ti spiego: intento dire che prima il codice è scritto in quel modo (vedi post sopra) DOPO è scritto come ho modificato cioè aggiungendo la riga #attributes

Mi spiace che non si riesce più di tanto a fare quello che si vuole ma sono i limiti che da drupal ma non per questo non è un buo software, solo che bisogna conoscerlo molto bene a livello di codice.

Riguardo all'editor incorporato se conoscessi bene dove mettere il codice te lo direi ma questo diventerebbe per tutte le textarea del sito, e non va bene secondo me.

Mi viene in mente che potresti cambiare il tipo di dato nel database nella tabella _comments e mettere varchar(10) anzichè longtext, ma attenzione tutti i commenti di tutto il sito saranno di 10 caratteri.

A risentirci

Ciao bjody,
ho attivato il permesso di inserimento commenti per gli utenti autenticati su alcune pagine del sito web, però vorrei che su determinate pagine solo alcuni utenti specifici possono inserire commenti.
Ho configurato anche CONTENT ACCESS +ACL ma non mi sembra che ti aiuti in questo perchè permette di gestire i grant ( update...) solo sui contenuti mentre non mi permette di gestire gli accessi utente per l'attività di inserimento commenti.
Sai come posso fare eventualmente ? ( spero di essermi spiegato).
Grazie