Nome do arquivo do modelo de página candidato para uma entrada específica de tipo de conteúdo personalizado

11

Estou trabalhando em um site do Drupal 7. Criei um tipo de conteúdo personalizado para obras. Eu tenho muitos campos, e alguns deles estão relacionados ao layout da página, como uma página específica para cada entrada. Então, preciso do page.tpl personalizado para esse tipo de conteúdo específico.

Então, ativei e abri o módulo Theme Developer e cliquei na área do corpo para obter o nome do candidato para esta entrada de página específica do tipo de conteúdo. e ele me mostra a tela abaixo, que não significa nada para mim: / Quando clico na área do nó, tudo bem, ele fornece o nó - work.tpl.php, mas eu preciso da página. Eu tentei "page - work.tpl.php", não funcionou.

o que estou perdendo?

insira a descrição da imagem aqui

Drupal guy
fonte

Respostas:

12
function mytheme_process_page(&$variables) {
    $variables['theme_hook_suggestions'][] = 'page__'. $variables['node']->type;
}

Supondo que o nome do tipo de conteúdo legível por máquina seja "work", a página - work.tpl.php funcionará.

Consulte este tópico para obter mais informações.

mingos
fonte
Uau! funcionou muito bem! Posso direcionar para a página - work.tpl.php agora :) embora funcione bem, tenho uma mensagem de erro como d.pr/EaMa pesquisei no google e tentei resolver, ainda tentando ... alguma idéia? Muito obrigado pelo seu tempo!!
Drupal guy
ah, acho que foi por causa do módulo Theme Developer. Desativei o módulo e o erro desapareceu :) muito obrigado!
Drupal guy
2

No template.php, adicione:

function themeName_preprocess_page(&$vars) {
  if (isset($vars['node'])) {
    // If the node type is "blog" the template suggestion will be "page--blog.tpl.php".
    $vars['theme_hook_suggestions'][] = 'page__'. str_replace('_', '--',    $vars['node']->type);
  }
}

Você pode omitir str_replace(); teste qual versão funciona melhor para você.

Em seguida, crie um arquivo de modelo cujo nome de arquivo seja page –- [content_type] .tpl.php. (Substitua [content_type] pelo nome da máquina do tipo de conteúdo.)

Veja http://drupal.org/node/1089656#comment-4426790 .

Mołot
fonte
1

Caso você queira o ID do nó, use isso.

function mytheme_process_page(&$variables) {
  if (isset($variables['node'])) { 
    $variables['theme_hook_suggestions'][] = 'page__type__'. $variables['node']->type;
    $variables['theme_hook_suggestions'][] = 'page__node__' . $variables['node']->nid;
  }
}

fonte
0

Ter um modelo diferente para cada tipo de conteúdo não é uma boa prática, de acordo com os funcionários do Drupal. Esse é o motivo pelo qual você não encontra page--work.tpl.phpna lista de arquivos de modelo candidato. Eles acham que apenas os arquivos de modelo de nó devem ser diferentes. No entanto, se você quiser invadir, vá em frente.

Use o alias do caminho para configurar um caminho com base no tipo de conteúdo. E então insira este código

 if (module_exists('path')) {
    $alias = drupal_get_path_alias(str_replace('/edit','',$_GET['q']));
    if ($alias != $_GET['q']) {
      $template_filename = 'page';
      foreach (explode('/', $alias) as $path_part) {
        $template_filename = $template_filename . '-' . $path_part;
        $vars['template_files'][] = $template_filename;
      }
    }
  }

para a phptemplate_preprocess_page(&$vars)função na template.phppasta do tema.

Você pode modificar um pouco o código para torná-lo mais eficiente.

Gokul NK
fonte