我在正文内容区域内的页面上使用 PHP 代码时遇到问题。我在这个站点、Drupal 的站点和其他站点上进行了不知疲倦的搜索,所以如果答案在这个站点的某个地方,我很抱歉,但我找不到它,我需要帮助。
我们在整个网站中重复使用了很多信息,我想将它们作为变量存储在 PHP 文件中。我们现在在我们的网站上这样做,但我正在重写我们的整个网站以使用 Drupal。因此,例如,我们销售软件,我想为网站上的各种“添加到购物车”按钮的每个产品 URL 设置一个变量。我不想将产品 URL 硬编码到每个链接中,而是设置我可以在任何 drupal 页面上调用的 PHP 变量。
我什么都做不了;我已经阅读了一些建议,但没有一个有效。我尝试将变量设置为它们自己的块,然后在创建新页面时从页面内调用它们。我可以在页面上回显变量,但只能在它们所在的块内,我不能调用它们并让它们从其他块或内容区域回显。我试过使用 global 关键字(根据一个建议),但这对我不起作用。
我希望这是有道理的。其他信息?我正在使用 Drupal 6.x,我在创建页面时启用了 PHP 代码,我确实启用了 PHP 过滤器模块,我可以让 PHP 代码呈现,所以我知道它正在工作,它只是在我需要的地方无法工作是。
我应该说(如果仅仅从阅读本文中不明显!)我是 Drupal 新手,所以如果有人可以帮助并尝试尽可能清楚地解释他们的建议,我将非常感激!
提前致谢。
编辑 2011 年 3 月 15 日
为了进一步解释,我将发布一些示例代码。我还没有这样做,因为还没有太多可以展示的东西,而且我认为这可能会使问题更加混乱。
所以,我制作了一个 Drupal “页面”,用于我们的软件试用下载。我要设置的 PHP 变量用于我们的下载链接;我想将它们设置在一个地方,这样如果将来需要更改下载链接,我只需在一个地方进行。你看,我们在各个网站页面上都有下载链接。我们的“立即购买”链接也是如此。这是页面代码:
<p>Try [product] free for 30 days.</p>
<!--<p>[token_custom_ewintry]</p>-->
<p><?php global $ewintry; ?><a href="<?php print $ewintry; ?>">Download for Windows PC</a></p>
<p><?php global $emactry; ?><a href="<?php print $emactry; ?>">Download for Mac OS X</a></p>
<p><?php global $ebbtry; ?><a href="<?php print $ebbtry; ?>">Download for BlackBerry</a></p>
<?php
$ebbtryprint = variable_get("ebbtry", "default");
print $ebbtryprint;
?>
<p><a href="<?php print $ewmtry; ?>">Download for Windows Mobile</a></p>
<p><?php global $ipewlstorelink; ?>iPhone, iPad, iPod touch owners: <a href="<?php print $ipewlstorelink; ?>">Download [product] on the iTunes App Store</a>. You'll be able to create 10 cards for free to try [product] before you buy!</p>
对于这个示例,我已经尝试过所有内容。你会看到我对全局变量的调用,但从未奏效。我在我创建并放置在我的“内容顶部”区域的自定义块中定义了全局变量。我了解到,显然该区域的任何内容实际上都无法访问我页面的正文内容,因为这些调用从未奏效。
我有一个昨天用 Tokens 模块制作的自定义令牌;它从来没有用过,但后来我在另一篇文章中读到,默认情况下,令牌在正文内容区域中可用,我需要一个特殊的过滤器。我还没有找到过滤器,所以我不确定这个解决方案是否会奏效。
我打电话给 variable_get。现在,这确实奏效了。我在我的 template.php 页面中定义了 variable_set。我的值在我的代码示例中使用上面的打印调用打印。但是,我今天早上看了这个页面,我认为这不是我需要的答案。因为现在我必须在所有页面上调用 variable_get 才能打印任何内容,对吗?这并不能解决我只想把所有东西都放在一个地方就可以在任何地方调用的问题。我尝试将 variable_get 调用放在我的自定义块中,但我再次无法从我的正文内容区域访问“内容顶部”中的任何内容。variable_get 调用会打印“内容顶部”中的值,但不会在内容区域的下方重新打印。
所以也许该代码会帮助某人帮助我。我现在要详细研究 CCK,因为这是我没有尝试过的唯一其他建议。如果有人可以提供帮助,请提前致谢。