Drupal: полностью переопределить функцию поиска, но использовать систему шаблонов Drupal (из модуля)

Я пишу собственный модуль Drupal 7, который полностью переопределит страницу поиска и метод поиска для веб-сайта. Вот что у меня есть на данный момент:

/**
 * Custom search.
 */
function mymodule_search_page() {
  drupal_add_css('css/search.css');

  // Perform a search (not important how)
  $result = do_custom_search('foo');

  return '<p>Results:</p>';
}

Как видите, это еще не все. Я не знаю, как правильно вернуть из этого структурированный HTML. Как мне использовать встроенную систему шаблонов Drupal для визуализации результатов?


person damd    schedule 26.03.2013    source источник
comment
Зачем полностью «переопределять» поиск, если можно использовать собственную логику поиска? api.drupal.org/api/drupal/7/search/hook_search   -  person Pierre Buyle    schedule 27.03.2013


Ответы (2)


вы должны использовать встроенные функции drupal. Надеюсь, вы ищете что-то вроде этого http://api.drupal.org/api/drupal/includes!common.inc/function/drupal_render/7

person Soni Kishan    schedule 26.03.2013
comment
Выглядит примерно правильно ... Но не могли бы вы показать мне пример того, как использовать drupal_render в моем случае? Я не уверен, следует ли мне комбинировать это с переопределениями шаблонов темы или с каким содержимым должны быть мои массивы. - person damd; 26.03.2013
comment
есть ли у вас какие-либо знания о программировании на drupal? в противном случае я бы предпочел, чтобы вы прошли через этот drupal.org/developing/modules - person Soni Kishan; 26.03.2013
comment
Да, я сделал несколько небольших веб-сайтов, но я никогда не создавал собственный модуль Drupal. Я также относительно новичок в Drupal 7, раньше я использовал только 6. - person damd; 26.03.2013

Вот что я в итоге сделал:

/**
 * Implements hook_menu().
 */
function mymodule_search_menu() {
  $items = array();
  $items['search'] = array('page callback' => 'mymodule_search_page',
                       'access callback' => TRUE);
  return $items;
}

/**
 * Mymodule search page callback.
 */
function mymodule_search_page() {
  $variables = array();

  // Add stuff to $variables.  This is the "context" of the file,
  // e.g. if you add "foo" => "bar", variable $foo will have value
  // "bar".
  ...

  // This works together with `mymodule_search_theme'.
  return theme('mymodule_search_foo', $variables);
}

/**
 * Idea stolen from: http://api.drupal.org/comment/26824#comment-26824
 *
 * This will use the template file custompage.tpl.php in the same
 * directory as this file.
 */
function mymodule_search_theme() {
  return array ('mymodule_search_foo' =>
                array('template' => 'custompage',
                      'arguments' => array()));
}

Надеюсь, это кому-то поможет!

person damd    schedule 27.03.2013