Как использовать PHP для отображения уникального заголовка IMG на основе пути на сайте Drupal? - PullRequest
1 голос
/ 15 января 2011

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

Проблема, с которой я столкнулся, заключается в том, что изображение баннера основывается на символах после первого символа "/" после example.com в URL. Например, example.com/forum возвращает баннер header-FORUM.png.

Мне нужно, чтобы он работал немного по-другому. Я хотел бы, чтобы в основе баннера были возвращены символы после второго символа "/" после example.com в URL. Например, example.com/category/term должен возвращать баннер header-TERM.png.

Любая помощь, которую вы можете предложить с этим, очень ценится.

Вот код, который я упоминал ранее через AdaptiveThemes (к вашему сведению, на этой странице есть комментарий, который пытается решить проблему, аналогичную моей, но я не могу заставить ее работать).

    <?php
// Return a file based on the URL alias, else return a default file
function unique_section_header() {
  $path = drupal_get_path_alias($_GET['q']);
  list($sections, ) = explode('/', $path, 2);
  $section = safe_string($sections);
  $filepath = path_to_theme() . '/images/sections/header-' . $section .'.png';
  if (file_exists($filepath)) {
    $output = $filepath;
  }
  else {
    $output = path_to_theme() . '/images/sections/header-default.png';
  }
  return $output;
}

//Make a string safe
function safe_string($string) {
  $string = strtolower(preg_replace('/[^a-zA-Z0-9_-]+/', '-', $string));
  return $string;
}
?>

Спасибо!

Ответы [ 3 ]

1 голос
/ 15 января 2011

Не совсем уверен, что вывод drupal_get_path_alias, но попробуйте это:

<?php
// Return a file based on the URL alias, else return a default file
function unique_section_header() {
  $path = drupal_get_path_alias($_GET['q']);
  $pathSegments = explode('/', $path, 3);
  $section = safe_string($pathSegments[2]);
  $filepath = path_to_theme() . '/images/sections/header-' . $section .'.png';
  if (file_exists($filepath)) {
    $output = $filepath;
  }
  else {
    $output = path_to_theme() . '/images/sections/header-default.png';
  }
  return $filepath;//$output;
}

//Make a string safe
function safe_string($string) {
  $string = strtolower(preg_replace('/[^a-zA-Z0-9_-]+/', '-', $string));
  return $string;
}

Единственные сделанные изменения касались использования explode. explode разделит путь на основе /, поэтому вам просто нужно получить доступ к другому элементу в этом массиве. Последний параметр explode - это максимальное количество элементов, которые должны быть возвращены, и может также потребоваться настроить

0 голосов
/ 16 января 2011

Вот что я бы сделал:

В файле template.php вашей темы создайте функцию THEMENAME_preprocess_page (замените THEMENAME на имя вашей темы) следующим образом. Если он уже существует, добавьте следующий код к этой функции. (дисклеймер: непроверенный код)

function THEMENAME_preprocess_page(&$variables) {
  $path = drupal_get_path_alias($_GET['q']);
  $path_segments = explode('/', $path, 3);
  if ($path_segments[0] == 'category' && !empty($path_segments[1])) {
    $safe_term = strtolower(preg_replace('/[^a-zA-Z0-9_-]+/', '-', $path_segments[1]));
    $filepath = path_to_theme() . '/images/sections/header-' . $safe_term .'.png';
    if (!file_exists($filepath)) {
      $filepath = path_to_theme() . '/images/sections/header-default.png';
    }
    $variables['header_image'] = theme('image', $filepath);
  }
}

Использование функции предварительной обработки (такой, как приведенная выше) - это способ Drupal сделать дополнительные переменные доступными для файла шаблона. Вам нужно только добавить новый элемент в массив $ variable. После того, как вы сделали вышеупомянутое, вы можете просто поместить следующую строку в вашем page.tpl.php:

<?php print $header_image; ?>

Будет напечатан полный элемент <img>.

PS. Обычно я не советую основывать подобный код на псевдонимах пути. Это метод, который легко ломается, потому что псевдонимы пути могут измениться.

0 голосов
/ 15 января 2011

Я добавляю ответ, чтобы добавить код.Это основано на ответе Джилиан.

/** Return a file based on the URL alias, else return a default file
 */
function unique_section_header() {
  $path = drupal_get_path_alias($_GET['q']);
  $pathSegments = explode('/', $path, 3);
  $section = safe_string($pathSegments[1]);
  $filepath = path_to_theme() . '/images/sections/header-' . $section .'.png';
  if (file_exists($filepath)) {
    $output = $filepath;
  }
  else {
    $output = path_to_theme() . '/images/sections/header-default.jpg';

  }
  return $output;
}

/** Make a string safe
 */
function safe_string($string) {
  $string = strtolower(preg_replace('/[^a-zA-Z0-9_-]+/', '-', $string));
  return $string;
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...