Back-End

14 mai, 2014

Manipulando cache no Drupal

Publicidade

Olá, pessoal! Tudo bem? Vamos dar continuidade na sequência de artigos sobre cache (veja o artigo anterior). Hoje abordaremos a utilização de algumas das funções da API de cache do Drupal.

No exemplo de hoje iremos cachear uma lista de termos. Agora, mãos ao código!

/**
* Implements hook_menu().
*/
function custom_menu() {

$items['content-cache'] = array(
'title' => t('Content Cache'),
'page callback' => 'custom_cache',
'access arguments' => array('access content'),
'type' => MENU_NORMAL_ITEM,
);

return $items;
}

No código acima criamos uma pagina para aparecer a lista. No índice ‘page callback’ é informado o nome da função que irá retorna a lista.

/**
* Callback menu for content cache.
*/
function custom_cache() {

$data = &drupal_static(__FUNCTION__);
if (!isset($data)) {

if ($cache = cache_get('custom_cache')) {
$data = $cache->data;
}
else {

// Load vocabulary by machine name tags.
$vocabulary = taxonomy_vocabulary_machine_name_load('tags');

// Load the terms of taxonomy Tags.
$vocabulary = taxonomy_get_tree($vocabulary->vid);

foreach ($vocabulary as $key => $term) {
$data[] = array(
'data' => $term->name,
'class' => array('item'),
);
}

cache_set('custom_cache', $data, 'cache');
}
}

return theme('item_list',array(
'items' => $data,
'title' => '',
'type' => 'ul',
'attributes' => array('class' => array('list-tags', 'item-list'))
));
}

Acima é definida a função responsável por criar a lista com os itens vindos do cache ou não. Utilizamos a função drupal_static() e passamos por parâmetro __FUNCTION__, uma constante do PHP, que representa o próprio nome da função. Com isso, o Drupal armazena o nome da função onde drupal_static(__FUNCTION__) é chamada.

Em seguida, é feita uma verificação se a função cache_get() consegue recuperar o cache da chave “custom_cache”. Se o cache for encontrado, ele é retornado um objeto com o conteúdo na propriedade data. Caso não seja encontrado iremos pegar as informações da lista do próprio banco de dados. E com a função cache_set() inserimos as informações no cache.

Por último, a função retorna uma lista com as informações.

Vamos ver o resultado. Acessem a url “seusite.com/content-cache”.

ilustra-manipulacao-cache

Para conseguir os mesmos itens da listagem acima é necessário inseri-los no vocabulário de Tags.

Agora vamos recapitular:

Criamos uma pagina com o hook_menu. Depois definimos uma função callback, a qual é responsável por retornar as informações vindas do cache (se existir) ou carrega as informações e depois insere no cache. Simples assim!

Vou finalizar por aqui e qualquer dúvida, sugestão ou crítica é só deixar um comentário. Até o próximo artigo.

Referência: