The page template is not loading, but the node template is loading

636 views Asked by At

sys info: drupal 6 installation, with tons of modules... too many to list.

the problem: only a certain content type will not load it's template file correctly. some nodes that would be displayed on these pages through views are making it to the markup. they are the only content that gets loaded. the template file that this content falls back on is node-event.tpl

the objective: to load page-team.tpl.php

template suggestions are loaded in two ways in template.php through preprocessing via

mytheme_preprocess_page(&$vars, $hook)

converted from _phptemplate_variables () in a drupal 5 installation.

method 1:

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

method 2:

if ($vars['node']->og_groups['0'] || preg_match('/fdl\//',$vars['node']->path) || (preg_match('/og\/manage/',$alias) || preg_match('/og\/invite/',$alias) || preg_match('/og\/users/',$alias)) || (preg_match('/node\/add/',$alias) && $_GET['gids'] != '') || $vars['node']->og_description || (arg(0) == 'user' && is_numeric(arg(1)))) { 
  $vars['template_files'][] = 'page-team';

}

page-team is the tpl that is missing, and i suspect there may be an error with my code above (method 2).

i'm attempting to load this template for all pages with the first path argument of "fdl" so site.com/fdl and all children of fdl.

i know there are lots of possibilities. but i have a feeling the error is here. thanks for any help you can offer.

4

There are 4 answers

0
Matt Ryan On BEST ANSWER

i found a deprecated link function in the template. updating the parameters fixed everything.

6
angryobject On

This is what i have in my template.php:


function frontend_preprocess_page(&$vars){
  if(strpos(drupal_get_path_alias($_GET['q']),'dummy_tests')===0){
      $vars['template_files'][] = 'page-dummy';
  }
}

frontend is the name of my theme. I have a file page-dummy.tpl.php inside the theme folder. To see that it works i added "IT WORKS" right after the body tag. Then cleared cache. Now i go to page "mydomain.com/dummy_tests/1" and see that IT WORKS.

If you are having problems, try to check the output of drupal_get_path_alias($_GET['q']). Just do


print drupal_get_path_alias($_GET['q']);

right inside the preprocess_page() function. And if it really starts with "fdl" everything should work. This is a working example, so you just try to play around and figure out why it's not working for you.

BTW, try to remove the node template and leave only the page template. I don't know why, but may be something is wrong and drupal messes them.

2
angryobject On

Well, did you clear cache? Because when dealing with themes, drupal usually catches newly added themes and templates after clearing cache.

And if you are not sure about your reg. exp., i believe you can simply write this:


if(strpos(drupal_get_path_alias($_GET['q']),'fdl')===0){
    $vars['template_files'][] = 'page-team';
}

And clear cache.

0
angryobject On

I tried adding custom templates in both page_preprocess and node_preprocess functions. And it worked both for page and node templates for me.


function frontend_preprocess_page(&$vars){
  if(strpos(drupal_get_path_alias($_GET['q']),'dummy_tests')===0){
      $vars['template_files'][] = 'page-dummy';
  }
}

function frontend_preprocess_node(&$vars){
  if(strpos(drupal_get_path_alias($_GET['q']),'dummy_tests')===0){
      $vars['template_files'][] = 'node-dummy';
  }
}