Nombre de archivo de plantilla de página de candidato para entrada de tipo de contenido personalizado particular

11

Estoy trabajando en un sitio web de Drupal 7. Creé un tipo de contenido personalizado para obras. Tengo muchos campos, y algunos de ellos están relacionados con el diseño de la página, como la página particular bg para cada entrada. Por lo tanto, necesito page.tpl personalizado para este tipo de contenido en particular.

Así que activé y abrí el módulo Desarrollador de temas, e hice clic en el área del cuerpo para obtener el nombre del candidato para esta entrada de página de tipo de contenido particular. y me da la siguiente pantalla que no significa nada para mí: / Cuando hago clic en el área del nodo, está bien, me da node - work.tpl.php, pero necesito una página. Intenté "page - work.tpl.php", no funcionó.

¿Qué me estoy perdiendo?

ingrese la descripción de la imagen aquí

Chico Drupal
fuente

Respuestas:

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

Suponiendo que el nombre del tipo de contenido legible por máquina es "trabajo", la página - work.tpl.php funcionará.

Consulte este hilo para más información.

mingos
fuente
¡Guauu! funcionó muy bien! Puedo dirigirme a la página - work.tpl.php ahora :) aunque funciona bien, tengo un mensaje de error como d.pr/EaMa busqué en Google e intenté resolverlo, todavía lo intento ... ¿alguna idea? ¡¡Muchas gracias por su tiempo!!
Drupal chico
oh, supongo que fue por el módulo Theme Developer. Inhabilito el módulo y el error se ha ido :) muchas gracias!
Drupal guy
2

En template.php agrega:

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);
  }
}

Puedes omitir str_replace(); prueba qué versión funciona mejor para ti.

Luego, cree un archivo de plantilla cuyo nombre de archivo sea page –- [content_type] .tpl.php. (Reemplace [content_type] con el tipo de contenido nombre del equipo).

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

Mołot
fuente
1

En caso de que también desee la identificación del nodo, use esto.

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;
  }
}

fuente
0

Tener una plantilla diferente para cada tipo de contenido no es una buena práctica según los chicos de Drupal. Esa es la razón por la que no se encuentra page--work.tpl.phpen la lista de archivos de plantillas candidatas. Sienten que solo los archivos de plantilla de nodo deberían ser diferentes. Sin embargo, si quieres hackear, adelante.

Use el alias de ruta para configurar una ruta basada en el tipo de contenido. Y luego inserte 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;
      }
    }
  }

en la phptemplate_preprocess_page(&$vars)función template.phpen la carpeta del tema.

Sin embargo, puede modificar un poco el código para hacerlo más eficiente.

Gokul NK
fuente