Как отобразить меню Drupal 6.20 в WordPress? - PullRequest
0 голосов
/ 14 августа 2011

Возможно ли отобразить (через php) главное меню сайта Drupal 6.20 в файле шаблона темы WordPress, расположенном в подкаталоге того же домена?

Прямо сейчас я отображаю менюскопировав статический html с сайта Drupal и добавив его в header.php в шаблоне WordPress на сайте, расположенном в mydomain.com/blog/.Но, конечно, это не сработает, когда на сайт Drupal будет добавлен другой элемент меню, или меню Drupal будет каким-либо образом изменено.

Так что есть функция Drupal php, которая будет тянуть меню в WPfile?

Если это не так, есть ли способ с помощью php проанализировать страницу Drupal для html меню (да, это было бы ужасно) и отобразить ее в WP?

Ответы [ 3 ]

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

Тематический движок Drupal очень модульный - вы можете сделать соответствующий вызов PHP в Drupal, чтобы получить только визуализированное меню, а затем сгенерировать этот HTML как часть вашей страницы WordPress.

0 голосов
/ 08 февраля 2012

g_thom ответ очень хороший, и если вы хотите создать очень простой модуль для вывода основной навигации, вы можете написать что-то вроде этого:

<?php

function getmenus_help($path, $arg) {
  // implementing the help hook ... well, not doing anything with it just now actually
}

function getmenus_all() {
  $page_content = '';

  $page_content = json_encode(menu_navigation_links(variable_get('menu_primary_links_source', 'primary-links')));
  // fill $page_content with the menu html

  print $page_content;

  return NULL;
}

function getmenus_menu() {
  $items = array();

  $items['getmenus'] = array(
    'title' => 'Get Menus',
    'page callback' => 'getmenus_all',
    'access arguments' => array('access getmenus'),
    'type' => MENU_CALLBACK,
  );

  return $items;
}

// permissions
function getmenus_perm() {
  return array('access getmenus');
}

В своем PHP-коде вы можете написать что-то вроде:

function primary_links() {
  $primary_links = file_get_contents(SITE_URL . '/getmenus');
  $primary_links = json_decode($primary_links);
  $primary_links = (array)$primary_links;

  $i = 0;
  $last = count($primary_links);
  $output = '';

  foreach ($primary_links as $pm) {
    $href = $pm->href;
    if (strpos($pm->href, 'http://') === FALSE) {
      if ($pm->href == '<front>') {
        $href = SITE_URL . '/';
      } else {
        $href = SITE_URL . '/' . $pm->href;
      }
    }

    $output .= '
      <li>
          <a href="'. $href .'" title="'.$pm->title.'">'.$pm->title.'</a></li>';
    $i++;
  }

  return $output;
}

Надеюсь, это поможет!

PS: Убедитесь, что вы обновили разрешения модуля, чтобы анонимные пользователи имели доступ к пути, заданному вами в вашем модуле - в противном случае вы получите403 Отказано в разрешении.

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

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

Вторая часть заключается в том, чтобы взять этот вывод из Drupal и фактически отобразить его на вашем сайте WordPress.

Вы можете добавить базу данных Drupal в качестве вторичной базы данных в WordPress, используя новый экземпляр $ wpdb объекта , написать запрос для получения нужного содержимого из таблиц и отформатировать результаты. Это может сработать, но может быть излишним.

Альтернативным работающим вариантом может быть использование JSON для форматирования вывода первичных ссылок с использованием функции drupal_json в Drupal, а затем использование JSON-ленты в Wordpress.

Я предполагаю:

  • у вас есть доступ администратора для входа на сайт Drupal, который вам понадобится для создания узлов, и очистки кеша темы
  • вы хотите вывести меню «Основные ссылки», которое используют более 90% сайтов Drupal. Вероятно, это правда, но возможно, ваш сайт использует пользовательские меню. Если это так, это все еще возможно, вы просто напишите немного другой код на шаге 3.

Шаги будут:

  1. Создать узел Drupal (вы можете называть его как угодно, это просто заполнитель)
  2. Получите идентификатор узла вашей фиктивной страницы (т. Е. Node / 234). Из идентификатора узла создайте одноразовый шаблон страницы в папке тем вашего сайта Drupal. Он должен называться page-node-xxxx.tpl.php, где xxxx - идентификатор вашего узла
  3. Добавьте этот код к page-node-xxxx.tpl.php:

    <?php drupal_json(menu_navigation_links(variable_get('menu_primary_links_source', 'primary-links'))); ?>

    Это создаст JSON-ленту для ваших пунктов меню.

  4. Очистите кэш тем вашего сайта на Drupal, посетив http://yoursite.com/admin/build/themes и посетите http://yoursite.com/node/xxxx, чтобы увидеть необработанный канал JSON.

  5. Теперь вы должны иметь возможность использовать метод jQuery, например $. GetJSON или $. Ajax , в вашей теме Wordpress для использования и отображения фида JSON или, возможно, используйте json_decode и curl для вывода массива в виде HTML.

Хорошая особенность функции drupal_json в Drupal состоит в том, что она уже отправляет правильные заголовки JSON, поэтому теперь все, что вам нужно сделать, это написать jQuery или PHP, который делает то, что вам нужно.

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

...