Domanda

Ho Pathauto configurato per generare un alias in base al titolo di un nodo, per un tipo di contenuto specifico. Il problema è che voglio fare piccoli cambiamenti in questo titolo prima Pathauto utilizza per generare l'alias.

Il primo commento di questo post suggerisce l'uso di hook_token_values, ma non riusciva a capire davvero come usarlo, anche dopo aver letto il docs . Nel mio test, quando ho implementare questo libro, l'alias generato è sempre "allineamento", il che significa che mi manca qualcosa.

Qualsiasi aiuto? Grazie.

È stato utile?

Soluzione

Potrebbe essere che vi siete persi di implementare hook_token_list pure. Fornendo un nuovo token è un processo in due fasi:

  1. Implementare hook_token_list di dichiarare i gettoni che si sta per fornire. Questo sarà solo il nome dei gettoni, insieme ad una breve spiegazione, e le informazioni sul tipo di oggetti verranno applicati i token (ad esempio nodo, utente, tassonomia, ...)
  2. Implementare hook_token_value effettivamente generare il contenuto dei token. Questo verrà chiamato quando i token devono essere sostituiti con i contenuti che dovrebbero rappresentare.

Come si desidera solo per fornire una versione alternativa del titolo già gettone fornita dal modulo di token, è probabilmente meglio basta copiare le porzioni rilevanti token_node.inc, ridotta ai casi rilevanti e adattato per essere utilizzato in un altro modulo:

/**
 * Implementation of hook_token_list().
 */
function yourModule_token_list($type = 'all') {
  if ($type == 'node' || $type == 'all') {
    $tokens['node']['yourModule-title'] = t('Node title (customized version by yourModule)');

    return $tokens;
  }
}

Questo dice semplicemente che yourModule fornisce un token per oggetti nodo, chiamato yourModule-title, insieme a una breve descrizione. Il lavoro principale viene fatto in un altro gancio:

/**
 * Implementation of hook_token_values().
 */
function yourModule_token_values($type, $object = NULL, $options = array()) {
  $values = array();
  switch ($type) {
    case 'node':
      $node = $object;
      // TODO: Replace the check_plain() call with your own token value creation logic!
      $values['yourModule-title'] = check_plain($node->title);  
      break;
  }

  return $values;
}

Questo verrà chiamato ogni volta che occorrono le gettoni per oggetti nodo, con il nodo in questione viene passato come parametro $object (per un token utente, il $type sarebbe 'utente', e $object sarebbe l'oggetto utente, e così via per altri tipi). Ciò che fa è creare una matrice di valori, calettato il nome del token, con la sostituzione di quella pedina come valore. Il codice originale da token_node.inc esegue semplicemente il titolo attraverso check_plain(), quindi questo sarebbe il posto per inserire la propria logica.

Altri suggerimenti

In Drupal 7, la funzionalità token è stato spostato al core. Gettoni sono attuate dal hook_tokens e hook_token_info metodi. Per esempi di utilizzo, seguire i link forniti, e cercare i collegamenti alle funzioni che implementano hook_tokens e hook_token_info ... ho trovato il statistics_tokens e statistics_token_info funzione funzioni utili per capire come funziona questo gancio.

E 'probabilmente anche interessante notare che questa necessità gancio da attuare da un modulo ... il mio primo tentativo ho lasciato cadere le mie funzioni di test in template.php del tema, solo per avere nulla accadere a tutti :-p

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top