几个月前我问了一个类似的问题,但事实是关于正确的做法的信息非常少。
最简单的是使用arg()函数,但正如你在文档中读到的那样,这是最错误的做法。试着按照正确的步骤,这是我到目前为止:
包含我们需要的路径的菜单:
/*
* Category search section
*/
$items['products/search/%/%'] = array(
'title' => 'Products search filtering',
'description' => 'Show review categories.',
'page callback' => 'ThemeSearchProducts',
'page arguments' => array(2,3),
'access callback' => 'user_access',
'access arguments' => array('access content'),
'type' => MENU_NORMAL_ITEM,
'file' => 'includes/mymodule_reviews.inc',
);
这些论点是通过......论证发出的(抱歉这个笑话)。到themesearchproducts函数
/**
* THEME List of reviewable products
*
*/
function ThemeSearchProducts($arg1, $arg2){
// $output = theme('search_products', $arg1);
$output = theme('search_products', 'test');
echo 'args in theme: ' . $arg1 . $arg2 . ' || ';
return $output . theme('pager', 10);
}
回声工作正常,但现在问题。如何将此变量发送到模块的hook_theme,并从那里发送到tpl.php?我有类似的东西:
function MYMODULE_theme ($existing, $type, $theme, $path) {
$path = drupal_get_path('module', 'MYMODULE'); // . '/templates';
// ADD THE templates DIRECTORY
$path = $path . '/templates';
return array(
// as in 'theme('verbose_method',...)
'main_reviews' => array(
'template' => 'MYMODULE-main_page_reviews',
'path' => $path,
'variables' => array('forums' => NULL, 'topics' => NULL),
),
正如您所看到的,模块现在调用templates / MYMODULE-main_page_reviews.tpl.php中的tpl,但是我找不到从此处将变量发送到hook_theme的方法。向MYMODULE_theme添加一个新参数会引发错误,我无法摆脱它在ThemeSearchProducts中添加例如这个新参数,如下所示:
$output = theme('search_products', 'test');
我认为使用variable_set也是错误的,不是吗?我试图尽可能地遵循“Drupal正确方法”,但我无法理解如何做到最后一步。
非常感谢你提前
评论
好吧,我终于明白了
好吧,我终于明白了:-)。
我的_theme功能错了。我使用的是变量而不是参数。这就是它现在的样子:
然后,从以前的功能我有:
theme()是神奇的。它将参数发送到一个数组中,可以在tpl.php中读取它:
dpm($argument1);
或者,当然:
使用hook_menu将php页面传递给页面回调
我正在开发一个我使用的模块
hook_menu
。我知道我可以向'page callback'传递一个返回带有HTML / PHP代码的字符串的函数。
如何将整个PHP / HTML页面作为参数传递
'page callback' => '[my_page.php]'
而不是在my_page()
函数内创建字符串?1答案 正确答案
“页面回调”的值只能是函数名称。
如果你必须使用'一个完整的PHP / HTML页面',那么使用hook_theme来解决。
hook_theme()中'template'的值是文件的名称。创建扩展名为.tpl.php的模板文件,并将其放在与模块相同的目录中。您可以在文件中放置所需的任何html。