Создание страницы в Drupal с динамическим URL-адресом без представлений или панелей - PullRequest
0 голосов
/ 17 ноября 2010

Используя как представления, так и панели (через менеджер страниц), вы можете создать страницу, которая принимает аргументы, такие как users /% / points.

Однако мне не нужны никакие другие функции этих модулей, кроме создания URL-адреса этой динамической страницы. Я просто хочу создать страницу, которая будет появляться, когда кто-то будет по URL-адресу users /% / points. Как я могу настроить такой URL, не используя такой модуль, как Views или Panels?

Ответы [ 2 ]

3 голосов
/ 17 ноября 2010

В Drupal есть система для создания динамических страниц, это то, что происходит, когда вы просматриваете узел или пользователя. У вас есть несколько вариантов, но все это происходит в hook_menu .

function modulename_menu() {
    $items = array();
    $items['users/%user/points'] = array(
        'page callback' => callback, // the function to call
        'page arguments' => array(1), // The argument to pass, 1 = %user, which will be a user object.
         ...
    );
    $items['users/%/points'] = array(...);
    $items['users/points'] = array(...);
}

В первом примере вы используете систему загрузки Drupal. Drupal вызовет user_load для индекса аргумента в 1, если он найдет пользователя, который будет доступен вместо фактического аргумента (идентификатора пользователя). Если пользователь не найден, будет возвращено 404.

Во втором примере разрешен любой аргумент, что означает, что вы получите страницу, если попытаетесь получить доступ к user/my-little-pony/points.

В третьем примере используется, чтобы показать, что Drupal допускает дополнительные аргументы. Поэтому, если вы хотите получить доступ к user/points/pony, вы получите страницу user/points с дополнительными аргументами, которые можно использовать, если ваша функция обратного вызова позволяет это.

Не забудьте также установить какой-либо контроль доступа. Вы можете определить пользовательские функции, чтобы определить, должен ли пользователь иметь доступ, использовать систему меню drupal и требовать разрешения, например access content.

Готовый код:

/**
 * Implementation of hook_menu().
 */
function example_menu() {
  $items = array();

  $items['user/%/points'] = array(
    'title' => 'Page title here',
    'description' => 'Description here, mostly used for admin pages',
    'page callback' => 'example_callback',
    'page arguments' => array(1)
    'access arguments' => array('access content'),
  );
  return $items;
}

example_callback($arg) {
  return t('The arg is @arg', array('@arg' => $arg));
}

Это нужно будет перейти в example.module, и вам нужно будет создать файл example.info. Вы можете изменить пример на любой модуль, который вы создали.

2 голосов
/ 17 ноября 2010

Если я вас правильно понимаю, это можно сделать довольно просто с помощью hook_menu внутри пользовательского модуля. Вот пример для динамической страницы с динамическим заголовком, созданным с переменной, которую вставляет пользователь.

function MYMODULE_menu() {
$items = array();
$items['user/points/%/'] = array(
'page callback' => 'MY_PAGE_CALLBACK_FUNCTION',
'title callback' => 'MY_PAGE_CALLBACK_TITLE_FUNCTION',
'title arguments' => array(3), 
'type' => MENU_CALLBACK,
  );
  return $items;
}
function MY_PAGE_CALLBACK_TITLE_FUNCTION($arg) {
  return "My dynamic title: " . $arg;
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...