Manipulação de Cache #1

veja também o post 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ão 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." data-share-imageurl="">

E ae pessoal, tudo bem? Vamos dar continuidade na sequência de posts sobre cache (veja também o post 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ão 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 é retornado um objeto com o conteúdo na propriedade data. Caso o cache 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".

Resultado Manipulação de Cache

Para conseguir os mesmos itens da listagem acima é necessário inserí-los no vacabulário de Tags.

Galera agora vamos recapitular:

Criamos uma pagina com o hook_menu. Depois definimos uma função callback, na 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! =)

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

Ref.: A Beginner's Guide to Caching Data in Drupal 7

{pt: Nós vamos encorajá-lo a desenvolver as três grande virtudes de um programador: preguiça, impaciência e hybris.}

1. Para instalar o git flow no Ubuntu:

{en: For installing git flow on Ubuntu:}

apt-get install git-flow

Dica da Preguiça: Veja instruções para outros sistemas operacionais