Как вы используете представление с аргументами в качестве главной страницы сайта в Drupal? - PullRequest
1 голос
/ 06 января 2011

У меня есть сайт Drupal, и я настроил представление для включения главной страницы.

Моя цель - иметь возможность передавать 0-2 аргумента на домашнюю страницу, которые передаются в представление.Однако мне все еще нужны нормальные страницы Drupal для работы.Список аргументов известен.

Например:

  • mysite.com / berlin / birds в первом аргументе передаст «berlin», а в качестве второго аргумента «birds»к представлению, поддерживающему первую страницу.
  • mysite.com / berlin просто передаст один аргумент, "berlin"
  • mysite.com / admin загрузит обычные страницы администратора в Drupal

Мне не ясно, как этого добиться.Есть ли крюк, который я могу использовать?Я не могу найти один или думать об этом.Есть ли способ указать это в аргументе для самого представления?Возможно, я смогу написать ловушку, которая прерывается при загрузке URL-адреса и перезаписывается в фоновом режиме?

В настоящее время у меня есть решение добавить эти пути (поскольку мои аргументы известны) в систему меню.Это работает, за исключением того, что когда я на страницах, они не являются главной страницей, поэтому страницы не используют темы узлов, которые мне нужны (они используют тему деталей узла).

Ответы [ 3 ]

2 голосов
/ 06 января 2011

Я не думаю, что вы действительно можете сделать это без специального кода. Представлению нужен путь до того, как он начнет принимать аргументы, а ваши URL начинаются с аргументов. Что вы можете сделать, это подделать его с пользовательским кодом. Я использовал что-то вроде этого:

/**
 * Implements hook_init().
 */
function mymodule_custom_init() {

  $item = menu_get_item(); // Matching Drupal path

  if (!$item) { // There is no matching Drupal path.
    $_GET['q'] = 'view_path/' . $_GET['q']; // Fake path path.
  } // if

} // mymodule_custom_init

Затем вы даете представлению путь "view_path", и он отвечает на все, что не соответствует ничему другому в путях Drupal.

0 голосов
/ 21 августа 2011

Другой способ - установить аргументы через hook_views_pre_view или hook_views_pre_build. Это лучше, потому что вы уверены, что не сломаете другие вещи (например, другой блок просмотра).

function MYMODULE_views_pre_view(&$view){
    if ($view->name == 'your_view_name' && drupal_is_front_page()) {
        $view->set_arguments(array('you_argument','you_second_argument'));
    }
}
0 голосов
/ 06 января 2011

В пользовательском интерфейсе представлений есть место для «кода обработки аргумента», которое принимает небольшой фрагмент php - http://drupal.org/node/70145

Вы можете запустить там какой-нибудь код, который проверяет, находитесь ли вы впередстраницы (или аргументы отсутствуют или что-то в этом роде) и вставьте нужные аргументы.

...