我必须在Drupal 6 project之一更改模板。
在每个“页面”节点类型上存储CCK字段中的图像。我已经制作了新的设计模板来通过CSS改变设计。但现在客户的需求是仅在我的新设计模板中更改名为“field_obr”(每个节点一个)的CCK字段中的图像。他可以切换主题和图像将与主题相对应(当前设计=来自CCK的原始图像,新设计=来自原始CCK场路径的改变路径的图像)。图像名称可以相同,只更改目录。
原始图像存储在以下文件夹中:
sites/default/files/image1.jpg
sites/default/files/image2.jpg
...
我想在新主题中将图片的路径更改为:
sites/default/files/new_img/image1.jpg
sites/default/files/new_img/image2.jpg
...
=在图像之前的路径中添加“/ new_img”文件夹。 (或者以后我的模板文件的路径 - 我知道怎么做,但我在这里寻找原则。)
模板将图像输出为:
<img class="imagefield imagefield-field_obr" width="229" height="346" alt="" src="/sites/default/files/radek_home_0.jpg?1354577633" />
我喜欢这个解决方案:
第一个解决方案 - 通过preg_replace()
更改$ content输出在“node-page.tpl.php”中查看$ content throug preg_replace()函数,找到路径并根据需要更改/添加字符串。 - 这是可行的,但我觉得这不是Drupal-flow的最佳解决方案。
第二个解决方案 - 使用hook_page_alter()或hook_page_build()函数
我知道可以通过使用hook_page_alter()和hook_page_build()函数来改变变量的内容。
我在phptemplate_preprocess_page(&amp; $ vars)函数之前将这些函数放到我的“template.php”中,似乎它们什么都不做:
function hook_page_build(&$page) {
// print_r($page);
$page['node']->field_obr['0']['filepath'] = "sites/default/files/new_img/radek_home_0.jpg";
echo "Test function hook_page_build() has run";
}
我在文档中发现,这些函数适用于Drupal 7+: - (
问题: 谁能解释一下解决一开始描述的情况的最佳解决方案?如何通过profi“Drupal方式”实现它? 谢谢。 弗兰蒂谢克
答案 0 :(得分:1)
我做了一些研究,Drupal 6找到了针对上述问题的单一简易工作解决方案。它是模板page.tpl.php
中提到的PHP preg_replace()函数:
print preg_replace('#/sites/default/files/#', '/sites/default/files/_new/', $content);