Разработка модуля в Drupal hook_menu () для полустатических страниц - PullRequest
0 голосов
/ 11 августа 2009

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

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

Теперь, у меня HAD список зданий работает, однако я внес небольшое изменение, и он перестал работать!

В настоящее время моя функция hook_menu () выглядит следующим образом:

<?php
/**
 * Implementation of hook_menu()
 */
function disability_menu()
{
    $items = array();

    // Ignore me, shell
    $items['quickreg'] = array(
        'title' => 'Quick Registration',
        'description' => t(''),

        'page callback' => 'drupal_get_form',
        'page arguments' => array(),
        'file' => 'disability.quickreg.view.inc',

        'access arguments' => array('access quick registration system'),

        'type' => MENU_SUGGESTED_ITEM,
    );

    $items['tests/status'] = array(
        'title' => 'Test Status Results',
        'description' => t('Check on the status of your tests'),

        'page callback' => 'disability_view_testing_status',
        'page arguments' => array(),
        'file' => 'disability.tests.view.inc',

        'access arguments' => array('access test check information'),

        'type' => MENU_CALLBACK,
    );

    $items['tests'] = array(
        'title' => 'Testing Services',
        'description' => t('Check on the status of your tests'),

        'page callback' => 'disability_view_testing',
        'page arguments' => array(),
        'file' => 'disability.tests.view.inc',

        'access arguments' => array('access test check information'),

        'type' => MENU_SUGGESTED_ITEM,
    );

    $items['access/%building'] = array(
        'title' => 'Campus Accessibility Guide',
        'description' => t('A summary list of detailed accessibliity information about each building on the A&M campus'),

        'page callback' => 'disability_view_access',
        'page arguments' => array(1),
        'file' => 'disability.access.view.inc',

        'access arguments' => array('access building access information'),

        'type' => MENU_SUGGESTED_ITEM,
    );

    return $items;
}

Перед некоторыми изменениями я должен был сделать так, чтобы пункт меню «Руководство по доступности кампуса» отображался правильно (после включения, конечно). URL /access будет работать правильно, отображая список всех зданий, а /access/12345 будет правильно отображать одну запись с идентификатором # 12345.

Теперь пункт меню access/%building даже не отображается и даже отправляет URL /access в цикл перенаправления (заставляя меня думать, что он передает что-то для идентификатора, который отправляет его в представление специальная функция, которая перенаправляет на /access, когда идентификатор не существует).

Может кто-нибудь сказать мне, что я делаю неправильно или что мне нужно сделать, чтобы поддержать 2 тематические страницы: шаблон /access и /access/%building url?

1 Ответ

1 голос
/ 11 августа 2009

Вы должны использовать% name вместо% в URL-адресах только в том случае, если у вас есть функция, которую вы хотите применить к URL-адресу. Drupal делает это повсеместно с пользователем и узлом, и это очень умно, так как вам нужно только одно место, чтобы иметь код для загрузки пользователя или узла, но он используется во многих местах. В этом случае я держу пари, что делать загрузку здания немного излишне. С другой стороны, преимущество состоит в том, что, делая это таким образом, вы получаете обработку 404, если никакой объект не может быть найден. Лучшее решение действительно сводится к тому, как вы хотите обрабатывать несуществующие здания. Вы даже можете настроить функцию «Руководство по доступности кампуса» на 404, что сделает эти два варианта более или менее одинаковыми. Я бы пошел на все, что вам проще всего сделать.

...