Ho creato un modulo personalizzato che reindirizza l'utente in base a varie regole personalizzate. Il mio problema è capire dove posizionare il codice. In questo momento, ho:Dove inserire la logica di reindirizzamento in Drupal?
function mymodule_init() {
mymodule_redirect_now();
}
Il "mymodule_redirect_now" in genere non fa nulla nella maggior parte dei casi, ma a volte può portare a "drupal_goto" essere licenziato off. Ciò funziona in pratica, ma causa altri problemi:
- Anche uno dei file cron ha esito negativo. (Cioè cron.php)
- test unitari sicuro (come in essi non possono finire perché questa "avanzamento" è visto come un fallimento)
dove sarebbe il posto più corretta per mettere reindirizzare logica simili , per evitare guasti ai test delle unità e guasti ai cron job?
UPDATE
Ho cercato di semplificare questa domanda, dal piuttosto portando verso il basso per una più semplice domanda. Fondamentalmente, voglio sapere come fermare cron di eseguire il seguente codice:
function mymodule_init() {
mymodule_redirect_now();
}
Cron esegue sempre qualcosa in init, ma in questo caso, immaginiamo che il reindirizzamento ha la seguente logica:
function mymodule_redirect_now()
{
if (!$currentPathIsUS && $ipIsUS) { // lets pretend for now this always happens...
drupal_goto("us");
}
}
In sostanza, se l'uso ha un indirizzo IP USA e il percorso corrente non è il percorso USA, è necessario reindirli al percorso/us.
Il problema è che, se eseguo cron dalla riga di comando, o da un browser, viene colpito il codice precedente prima di passare a qualsiasi altra funzione, ma a causa del "drupal_goto", non esegue mai effettivamente il cron codice.
- È una cattiva pratica fare ciò che sto facendo sopra? e se sì, qual è l'alternativa migliore?
- Come posso impedire a cron di eseguire il codice init in questo caso?
Sto usando init come un luogo da cui controllo e, in base a ciò, reindirizzare l'utente utilizzando drupal_goto. Il problema è che questo rompe anche i test di unità e cron, perché in alcuni casi stanno innescando le regole. Quindi, senza fare eccezioni specifiche per determinati percorsi, mi piacerebbe sapere, qual è il modo generale di gestire le regole che reindirizzano un utente che si affida alla prima volta che colpiscono il server? – coderama
Non c'è un "modo generale", il modo dipende da cosa si sta testando, a meno che non si parli del modulo Regole (che ha la sua [documentazione] (https://www.drupal.org/documentation/modules /regole)). Tutti i visitatori che non hanno effettuato l'accesso in Drupal sono lo stesso utente (ID utente 0), ciò significa che non è possibile salvare una variabile sull'oggetto utente da controllare, ma sospetto che si possa risolvere ciò con 'user_cookie_save ($ valori) '. A seconda di quali sono le tue condizioni effettive, dovrai utilizzare diversi hook Drupal per ottenere il tuo reindirizzamento. –
Siamo d'accordo con questo pseudo-codice: 'if ($ visitor_hits_server_first_time === true) {then_only_do_redirect_once(); } '? –