Как использовать групповые символы в drupal - PullRequest
1 голос
/ 07 июля 2010

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

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

Работает хорошо, но проблема в том, чтодругая ссылка, которую генерирует электронная коммерция:

http://example.com/shop #The Page node i've created, this work
http://example.com/shop/catalog/fruit/ #here comes the trouble!

Внешнее приложение обрабатывает URL самостоятельно, поэтому мне нужно, чтобы drupal перенаправил все URL, начинающиеся с shop, на его shop Узел страницы ... что-то вроде

http://example.com/shop/* => load http://example.com/shop

Как лучше всего это сделать?

Ответы [ 2 ]

1 голос
/ 08 июля 2010

После того, как гуглил, я нашел Drupal custom_url_rewrite_inbound , который делает именно то, что мне нужно.

Я вставил функцию в мой /sites/default/settings.php:

function custom_url_rewrite_inbound(&$result, $path, $path_language) {
  if(preg_match("/^shop(\/)/", $path, $matches)) {
    $result = 'node/XX'; //XX is the ID of my Page Node with the ecommerce code.
  }
}

Работает как шарм!

1 голос
/ 07 июля 2010

Если вы создадите модуль, а не узел, это будет довольно просто.

используйте hook_menu () , чтобы соответствовать строке URL

function example_menu() {
  $menu = array()
  $menu['shop'] = array(
  'page callback' = 'example_callback';
  )
}

function example_callback() {
  // use arg() to get arguments.
  return shop_php();
}

Создание обратного вызова с подключаемым меню позволяет вам вызывать собственный код, значение, возвращенное обратным вызовом, будет отображаться на странице Когда drupal видит URL, который соответствует shop *, он вызывает функцию example_callback. В этой функции вы можете поместить код, который у вас есть в данный момент, в вашем узле страницы. И верните содержимое, которое вы хотите отобразить на странице.

...