无法获得要识别的模板建议 -- theming 领域 drupal 相关 的问题

Can't get template suggestions to be recognized


3
vote

问题

中文

我使用d7。我在名为 dsfacet 的模块中声明了自定义模板 facet-item.tpl.php 。我的代码如下:

  /**  * Implements hook_theme().  */ function dsfacet_theme($existing, $type, $theme, $path) {   return array(     'facet_item' => array(       'variables' => array('facet_name' => NULL, 'facet_values' => array()),       'template' => 'facet-item',     ),   ); }   

使用以下代码从另一个模板中调用此自定义模板:

  <?php foreach ($facets as $name => $values): ?> <?php print theme('facet_item', array('facet_name' => $name, 'facet_values' => $values)); ?> <?php endforeach; ?>   

到目前为止,一切都适合,但我希望我的主题根据方面的名称使用更多专业的模板。

所以这就是我所做的:

1)我根据方框名称声明了模板建议:

  /**  * Implements template_preprocess_HOOK for facet-item.tpl.php.  * Adds template suggestions.  */ function template_preprocess_facet_item(&$variables) {   $variables['theme_hook_suggestions'][] = 'facet_item__' . $variables['facet_name']; }   

2)我更改了主题调用,以考虑方面名称:

  <?php print theme('facet_item__' . $name, array('facet_name' => $name, 'facet_values' => $values, 'node' => $node)); ?>   

3)我基于面部名称创建了一些模板:

  facet-item--address.tpl.php facet-item--phone.tpl.php ...   

然后我清除了缓存,但是......没有发生任何事情。仅使用主模板 http://website.org/category/year/25250 。在花几个小时后,我在我的机智结束时。任何想法?

(我已经尝试过硬编码各个方面的名字,以确保我的变量不是问题......我还尝试了单次/双划线/下划线的所有可能排列......)< / p>

英文原文

I am using D7. I have declared a custom template facet-item.tpl.php in a module named dsfacet. My code goes as follows:

/**  * Implements hook_theme().  */ function dsfacet_theme($existing, $type, $theme, $path) {   return array(     'facet_item' => array(       'variables' => array('facet_name' => NULL, 'facet_values' => array()),       'template' => 'facet-item',     ),   ); } 

This custom template is invoked from another template with the following code:

<?php foreach ($facets as $name => $values): ?> <?php print theme('facet_item', array('facet_name' => $name, 'facet_values' => $values)); ?> <?php endforeach; ?> 

Everything works great so far, but I'd like my theme to use more specialized templates based on the facet name.

So here's what I did:

1) I declared a template suggestion based on the facet name:

/**  * Implements template_preprocess_HOOK for facet-item.tpl.php.  * Adds template suggestions.  */ function template_preprocess_facet_item(&$variables) {   $variables['theme_hook_suggestions'][] = 'facet_item__' . $variables['facet_name']; } 

2) I changed the theme invocation to take into account the facet name:

<?php print theme('facet_item__' . $name, array('facet_name' => $name, 'facet_values' => $values, 'node' => $node)); ?> 

3) I created some templates based on facet names:

facet-item--address.tpl.php facet-item--phone.tpl.php ... 

I then cleared the cache but... nothing happens. Only the main template facet-item.tpl.php is used. After a few hours spent on this, I'm at my wit's end. Any ideas?

(I've tried hard-coding the facet name everywhere to make sure it wasn't a problem with my variables... I've also tried every possible permutation of singe/double dashes/underscores...)

  

回答列表

3
 
vote
vote
最佳答案
 

我花了一点搞定,我想出的是这个问题似乎是Drupal的主题系统如果他们处于实际主题,而不是用模块一起寻找动态模板。< / p>

所以,你可以做两件事中的一个,第一个显然是将所有 facet-item 模板复制到你的主题目录中,并在清除缓存的缓存后给它调用它。

或...您可以像视图模块一样创造创意,并为每个模板文件创建主题注册表挂钩,如下所示:

  function dsfacet_theme($existing, $type, $theme, $path) {    $hooks=array();   $modulepath = drupal_get_path('module', 'dsfacet');    $hooks['facet_item']= array(     'variables' => array('facet_name' => NULL, 'facet_values' => array()),     'pattern' => 'facet_item__',     'template' => 'facet-item',     'path' => $modulepath . '/tpl/facet-items',   );    $hooks += drupal_find_theme_templates($hooks, '.tpl.php', $hooks['facet_item']['path']);   // $hooks += _views_find_module_templates($hooks, $hooks['facet_item']['path']);    return $hooks;  }   

如果您安装的视图,则安装的视图实际上会使用视图' _views_find_module_templates() 功能,为您完成所有工作。 (它基本上通过该目录传递给它并查找模板文件,并为其发现的每个人创建 $hooks['facet_name__foo'] 。)如果您没有或希望安装视图,则可以将其复制 This panel will be selected if Term being viewed vocabulary is "Package types", and NOT (Logged in user has role "authenticated user"). 0 ,并在您自己的模块中包含并重命名它。

加法/校正:DUH;您可以使用 This panel will be selected if Term being viewed vocabulary is "Package types", and NOT (Logged in user has role "authenticated user"). 1 同样可以轻松地使用/包括视图"类似的私人实现" 。

现在,如果您在自己的目录结构中放置了所有 This panel will be selected if Term being viewed vocabulary is "Package types", and NOT (Logged in user has role "authenticated user"). 2 模板(主要是找到的查找模板功能没有找到任何其他模板并旋转其轮子做额外的工作)并清除缓存,您现在应该看到所有模板。

 

It took me a bit to figure this out and what I came up with is that the issue appears to be that Drupal's Theme System will only look for dynamic templates if they are in an actual theme, not in with a module.

So, you can do one of two things, the first one obviously being to copy all of your facet-item templates into your theme directory and call it a day after clearing caches for Drupal to pick them up.

Or... you could get creative like the Views Module does and create theme registry hooks for each of the template files like so:

function dsfacet_theme($existing, $type, $theme, $path) {    $hooks=array();   $modulepath = drupal_get_path('module', 'dsfacet');    $hooks['facet_item']= array(     'variables' => array('facet_name' => NULL, 'facet_values' => array()),     'pattern' => 'facet_item__',     'template' => 'facet-item',     'path' => $modulepath . '/tpl/facet-items',   );    $hooks += drupal_find_theme_templates($hooks, '.tpl.php', $hooks['facet_item']['path']);   // $hooks += _views_find_module_templates($hooks, $hooks['facet_item']['path']);    return $hooks;  } 

which if you have Views installed will actually use Views' _views_find_module_templates() function to do all the work for you. (it basically goes through the directory passed to it and looks for template files and creates $hooks['facet_name__foo'] for each one it finds.) If you don't have or want Views installed, you can just copy it out of views.module and include and rename it accordingly in your own module.

ADDITION/CORRECTION: DUH; YOU CAN USE drupal_find_theme_templates() just as easily without worry about using/including Views' similiar private implementation.

And now if you have put all your facet-item templates under your module in their own directory structure (mostly so the find template function doesn't find any other templates and spin its wheels doing extra work) and cleared caches, you should now see all of your templates.

 
 
 
 

相关问题

1  在执行数据库模式更新时会导致CSS禁用什么?  ( What would cause css to become disabled when performing a database schema update ) 
我正在使用它们的eCosite服务在Greengeeks上运行Drupal 7.26。 除了Drupal Core文件,我使用以下模块: 上下文 delta webform ctools imce imce_wysiwyg omega_tools 有更多的模块,但是标准的标准,如令牌,视图...

6  为什么许多Drupal主题用TypeOf =“Foaf:image”属性标记图像?  ( Why do many drupal themes markup images with typeof foafimage attribute ) 
这个属性只是增强语义? ...

0  将模板应用于特定页面  ( Apply template to a specific page ) 
我需要将模板应用于特定页面,而不是遵循相同的URL模式的页面。 例如,我有一个带有路径/亚洲的页面。我还有路径/亚洲/印度,/亚洲/中国等的页面。我想创建一个仅适用于/亚洲的模板,而不是其他路径。我创建了模板文件页面 - Asia.tpl.php,但它也适用于/亚洲/印度和/亚洲/中国。有没有办法将模板专门映射到此...

0  我可以在管理新闻中使用drupal插件吗? [关闭]  ( Can i use drupal plugin in managing news ) 
关闭。这个问题需要更多聚焦。它目前不接受答案。 想要改进这个问题?更新问题,因此它仅拍摄了一个问题,仅通过编辑此帖。 closed 7年前。 ...

1  H6之后的站点口号在H2站点名称之后与WCAG 2.0要求不匹配  ( Site slogan in h6 following h2 site name not matching wcag 2 0 requirements ) 
配置:Drupal 7.26 / Omega 3 / Delta模块 在网站上使用Achecker.ca进行的可访问性检查给了我一个结果: 成功标准2.4.6标题和标签(AA) 检查38:H2后面的标题嵌套 - 标题不正确。 修复:修改标题级别,因此只有H3或任何小于H3的头部跟随H2。 错误行1...

0  表太宽了视图  ( Table too wide for view ) 
我创建了一个视图(从视图模块),其中我在表中显示我的内容。 该表包含大约22列: 表继续屏幕右侧(请参阅上面的屏幕截图)。 如何解决这个问题? (拟合它以查看边界或使视图区域更宽) ...

0  如何将<div>添加到所有复选框?  ( How can i add div to all checkboxes ) 
我只想在所有表单中包装这样的复选框,自动。 <div class="inline field"> <div class="ui checkbox"> <input type="checkbox"> <label>Checkbox</label> </div> </div> 如何实现这...

2  无法更改计划的徽标或颜色  ( Cannot change logo or colors of a scheme ) 
Hello我使用基于Drupal的Open Atrium。我可以使用标准的基数7.x主题,但即使我无法通过Colorize保存它来更改颜色方案。如果我然后使用另一个主题,我甚至无法获取徽标显示或出现任何子菜单。我不确定这是一个权限问题。该站点是在VM上安装的,作为设置的Webmin的一部分。我似乎在Drupal和O...

0  Drupal没有找到我的CSS  ( Drupal isnt finding my css ) 
我的stylesheet在我的.info文件中提到,但它没有将它添加到页面源并使用它。我在 styles.css 中的唯一风格是 body {background:#444} 。我尝试清除网站的缓存以及我的浏览器。 CSS压缩已关闭。任何想法? 这是我从头开始制作的主题。 info文件: name = PBme...

0  显示套件卸下类ID  ( Display suite removing class id ) 
i拆分2列我的contetnt节点使用显示套件并将自定义类添加到列。 (使用Bootsrap响应类Col-SM-3)但展示套件仍然渲染旧样式的列:组左和组右。我怎样才能删除旧样式? ...

0  我可以在非耳机网站上渲染我的Drupal网站的区域吗?  ( Can i render a region of my drupal site on a non drupal site ) 
这是我的情况。 我正在实现具有数百页的大站点的ropal作为主CMS。但是,直到可以完成DRUPAL的数据(超过几个月的持续过程),我希望旧的"非拖动" 页面至少要伪造成看起来像同一站点的一部分。基本上我只想用旧页面,新的Drupal页眉和页脚(是独立的区域)。 我想知道是否有一个已知的方法可以在常规PHP页面上显...

0  $ search_result在搜索结果中是如何生成的  ( How is search results in search results tpl php generated ) 
在哪里是$ search_results生成的? 我有一个apache solr搜索,我想以某种方式重新组织内容,并根据某些条件修改主题,但我拥有$ search_result的所有列表都是一个列表的字符串。< / p> 我想要的是基于Apache Solr创建的对象中的值分离搜索结果。 ...

1  更改管理面板模板  ( Change admin panel template ) 
我创建了一个自定义模板,错误地将我的模板选择为adminpanel模板。 摆脱了仪表板。如何将模板更改为默认模板。 ...

1  Drupal 7:新安装的自定义主题故障(本地到远程环境)  ( Drupal 7 custom theme failure on new install local to remote environment ) 
我已经根据本地Drupal 7安装上的框架主题创建了自定义Drupal主题。现在是时候开始开发更多网站,以便在我的同事将可以访问的服务器上创建一个新的Drupal 7安装,以获取审查和内容创建。新安装顺利,核心主题一切都是工作,基本框架主题甚至工作良好,但我的自定义主题正在具有重大问题。 在将主题设置为默认值时,管理...

1  如何使用相对或外部URL显示图像?  ( How do i show an image using a relative or external url ) 
似乎是一个简单的问题,但找不到一个简单的解决方案。 基本上我有馈电模块从具有相对图像的相对URL的另一数据库填充内容类型。 IE。 /images/image1.jpg 我在文本字段类型中存储此值。 有没有办法可以轻松地将此字段的输出转换为 .theme0 ? ...

0  如何使用多值字段上传的图像?  ( How to theme images uploaded with multi value field ) 
我有一个多价图像字段。现在我想根据上传的图像的数量来主题。 如果有一个图像{ //主题在这里 } 如果有2个图像{ //主题在这里 } 等等。我正在尝试在field - time_project_image.tpl.php文件中进行。我可以使用 foreach($items as $values => $...

0  如何将具有与标题相同的类添加一个类?  ( How would i add a class with the same name as the header ) 
我想添加一个与标题相同名称的类,以保持类似的标题列相同的大小。基本上,代码正在生成多个表,其中一些具有相同的标题项,其中一些没有。具有相同标题值的所有列将采用完全相同的样式。 $string .= theme('table', array('header' => array_values($headers[$gr...

0  我猜,Drupal主题课丢失了!如何解决它?  ( Drupal theme class is missing i guess how to fix it ) 
我在drupal 7.26上使用civicrm。当我使用默认主题时,我可以看到链接"查看所有贡献...." ,但从屏幕截图的顶部可以看出,它不会出现在引导主题上。有人可以帮我解决这个问题吗?谢谢 ...

2  调用视图中的字段 - 查看字段 - View-name.tpl.php - 错误  ( Calling a field in views view fields view name tpl php error ) 
我正在尝试使用代码行来调用字段: <?php print $field->handler->view->field['title_1']; ?> 但我不断收到此错误: 我使用devel dpm()寻找呼叫它的正确路径,它表示 handler->view->field['title_1'] 。我绝对难过...

3  命名字段收集主题文件的内容?  ( What to name field collection theme file ) 
这里有几个文章,解决主题现场收集,但没有专门涵盖实际达到Drupal识别所需的命名约定。 字段 - 字段 - 字段集合-name.tpl.php不适用于我。也许是因为我是主题我的现场集合的编辑页面,但字段 - field-collection-name - edit.tpl.php也不适用。我尝试了每一个渗透和...




© 2021 it.wenda123.org All Rights Reserved. 问答之家 版权所有


Licensed under cc by-sa 3.0 with attribution required.