Пользовательский URL для пользовательского модуля в Drupal? - PullRequest
1 голос
/ 14 марта 2011

Я новичок в разработке Drupal. Итак, я создал новый модуль и назвал его «apps».

Модуль просто запрашивает узел из моей базы данных и отображает его. Для доступа к этому модулю я обращаюсь к http://domain/apps/1, где 1 - это идентификатор узла.

Мой вопрос,

как мне изменить «приложения» на что-то другое, не меняя имя модуля?

Ответы [ 3 ]

3 голосов
/ 14 марта 2011

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

1 голос
/ 15 марта 2011

Кажется, вы также можете использовать аргумент загрузчика с подстановочными знаками . Если вы поместите % node в путь, он автоматически вызовет node_load () и обратный вызов страницы apps_view_node () получит полностью загруженный объект узла.

/**
* Implementation of hook_menu.
*/
function apps_menu() {
  $items = array();
  // With this menu callback, apps_view_node() will receive a node object, instead of an integer.
  $items['apps/%node/view'] = array(
    'type'           => MENU_CALLBACK,
    'page callback'  => 'apps_view_node_obj',
    // 1 is the node object, 2 is 'view'.
    'page arguments' => array(1, 2),
    // Tells the load callback function, node_load(), what part of the URL to load, in this case the literal number 1.
    'load arguments' => array(1),
  );

  // With this menu callback, apps_view_node() will receive an integer.
  $items['apps/%/edit'] = array(
    'type'           => MENU_CALLBACK,
    'page callback'  => 'apps_view_node_int',
    'page arguments' => array(1),
  );
  return $items;
}

/**
* Custom node view function.
* @param StdClass $node
*   Fully loaded Drupal node object.
*/ 
function apps_view_node_obj($node) {   
  // Do something with the $node object.
  $node->title = "Foo";
  $node->body = "Bar";
  node_save($node);
}

/**
* Custom node view function.
* @param int $id
*   Node id.
*/ 
function apps_view_node_int($id) {   
  // Because we are receiving an id, we must manually load the node object.
  $node = node_load($id);
  $node->title = "Hello";
  $node->body = "World";
  node_save($node);
}

Ссылка на документацию hook_menu .

1 голос
/ 14 марта 2011

Используйте модуль «путь», он включен в drupal distr., Затем создайте вручную связь «приложений» с чем-то другим псевдонимом. Pathauto также будет полезен, если вы хотите автоматизировать совмещение имен путей.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...