#drupal
#drupal
Вопрос:
Мне нужно знать самый простой способ передачи переменной из пользовательского модуля в его шаблон
.Я создал custom.module и разместил custom.tpl.php в папке модуля
function custom_menu(){
$items = array();
$items['custom'] = array(
'title' => t('custom!'),
'page callback' => 'custom_page',
'access arguments' => array('access content'),
'type' => MENU_CALLBACK,
);
return $items;
}
function custom_page() {
$setVar = 'this is custom module';
return theme('custom', $setVar);
}
я добавил функцию темы, но она не работает, может кто-нибудь подсказать мне, что не так с этим кодом
function theme_custom($arg) {
return $arg['output'];
}
function custom_theme() {
return array(
'Bluemarine' => array(
'variables' => 'output',
'template' => 'Bluemarine',
),
);
}
Ответ №1:
Вы вызываете неправильную функцию темы. Вместо function theme_custom
этого должно быть function theme_Bluemarine
. Вам также необходимо передать массив в переменную piece of hook_theme() . Смотрите простой пример здесь.
Используя ваш пример:
function custom_menu(){
$items = array();
$items['custom'] = array(
'title' => t('custom!'),
'page callback' => 'custom_page',
'access arguments' => array('access content'),
'type' => MENU_NORMAL_ITEM,
);
return $items;
}
function custom_page() {
$setVar = 'this is custom module';
return theme('custom', array('output' => $setVar));
}
function custom_theme() {
$path = drupal_get_path('module', 'custom');
return array(
'custom' => array(
'variables' => array('output' => null),
'template' => 'custom',
),
);
}
Теперь в custom.tpl.php просто нужно <?php print $output; ?>
Ответ №2:
Это работает для меня:
function custom_menu(){
$items = array();
$items['custom'] = array(
'title' => t('custom!'),
'page callback' => 'custom_page',
'access arguments' => array('access content'),
'type' => MENU_NORMAL_ITEM,
);
return $items;
}
function custom_page() {
$result = db_query('SELECT * from node');
return theme('custom', array('output' => $result));
}
function custom_theme() {
return array(
'custom' => array(
'arguments' => array('output' => NULL),
'template' => 'custom',
),
);
}
function template_preprocess_custom(amp;$variables) {
}
Ответ №3:
Во-первых, вы должны объявить свою тему и как она ведет себя с помощью hook_theme . После этого вы можете легко использовать тему функции.
Кроме того, возможно, вам нужно будет использовать hook_preprocess .
Комментарии:
1. Спасибо за ответ, я использую тему Bluemarine. можете ли вы опубликовать пример кода относительно кода, который я опубликовал выше? пожалуйста, помогите
2. уважаемый Иван, я не совсем понял ваш ответ, пожалуйста, уточните, как я могу передать переменную в пользовательскую тему, спасибо