как передать переменную из пользовательского модуля в его tpl

#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. уважаемый Иван, я не совсем понял ваш ответ, пожалуйста, уточните, как я могу передать переменную в пользовательскую тему, спасибо