Dateiname der Kandidatenseitenvorlage für einen bestimmten benutzerdefinierten Inhaltstypeintrag


11

Ich arbeite an einer Drupal 7-Website. Ich habe einen benutzerdefinierten Inhaltstyp für Werke erstellt. Ich habe viele Felder, und einige davon beziehen sich auf das Seitenlayout, wie z. B. eine bestimmte Seite für jeden Eintrag. Daher benötige ich eine benutzerdefinierte page.tpl für diesen bestimmten Inhaltstyp.

Also habe ich das Theme Developer-Modul aktiviert und geöffnet und auf den Textbereich geklickt, um den Kandidatennamen für diesen bestimmten Seiteneintrag für den Inhaltstyp abzurufen. und es gibt mir den Bildschirm unten, der mir nichts bedeutet: / Wenn ich auf den Knotenbereich klicke, ist es in Ordnung, es gibt node - work.tpl.php, aber ich brauche für Seite. Ich habe versucht "page - work.tpl.php", es hat nicht funktioniert.

Was vermisse ich?

Geben Sie hier die Bildbeschreibung ein

Antworten:


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

Angenommen, der Name Ihres maschinenlesbaren Inhaltstyps lautet "work", funktioniert page - work.tpl.php.

Weitere Informationen finden Sie in diesem Thread .


Beeindruckend! es hat super funktioniert! Ich kann jetzt an page - work.tpl.php adressieren :) Obwohl es gut funktioniert, habe ich eine Fehlermeldung als d.pr/EaMa Ich habe gegoogelt und versucht zu lösen, versuche immer noch ... irgendeine Idee? Vielen Dank für Ihre Zeit!
Drupal Kerl

Oh, ich denke, das lag am Theme Developer-Modul. Ich deaktiviere das Modul und der Fehler ist verschwunden :) Vielen Dank!
Drupal Kerl

2

In template.php hinzufügen:

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

Sie können weglassen str_replace(); Testen Sie, welche Version für Sie am besten geeignet ist.

Erstellen Sie dann eine Vorlagendatei mit dem Dateinamen page - [content_type] .tpl.php. (Ersetzen Sie [content_type] durch den Computernamen des Inhaltstyps.)

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


1

Wenn Sie auch die Knoten-ID möchten, verwenden Sie diese.

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

0

Laut den Mitarbeitern von Drupal ist es keine gute Praxis, für jeden Inhaltstyp eine andere Vorlage zu haben. Dies ist der Grund, den Sie nicht page--work.tpl.phpin der Liste der Kandidatenvorlagendateien finden. Sie sind der Meinung, dass nur die Knotenvorlagendateien unterschiedlich sein sollten. Wenn Sie sich jedoch einhacken möchten, fahren Sie fort.

Verwenden Sie den Pfadalias, um einen Pfad basierend auf dem Inhaltstyp einzurichten. Und dann diesen Code einfügen

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

in die phptemplate_preprocess_page(&$vars)Funktion intemplate.php Themenordner.

Sie können den Code jedoch ein wenig ändern, um ihn effizienter zu gestalten.

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.