0 Пользователей и 1 Гость просматривают эту тему.
  • 0 Ответов
  • 4598 Просмотров
*

monitorlab

  • Новичок
  • 7
  • 0 / 0
Решение относится к Joomla! 1.0 (возможно, будет работать в Joostina).

В этом FAQ по Joostina написано следующее:

Цитировать
Вопрос: Как узнать id материала, категории, раздела?
Ответ: В Joostina (как и в Joomla!) страницы не пронумерованы. Можно только узнать id материала в режиме его просмотра, id раздела или категории в режиме их просмотра, и т.д.

Это неверно. На самом деле страницы как раз пронумерованы (id материала! ;) )
А в переменной $GLOBALS хранится нужная информация, надо лишь только ее добыть. Если посмотреть var_dump'ом ее содержимое, можно найти в этом массиве элемент "cache":
Код
var_dump($GLOBALS['cache'];

Он представляет собой объект, у которого есть метод "_cache", который возвращает другой объект, у которого есть метод "_id". Этот последний метод возвращает очень интересную строку, содержащую массу полезных сведений. В том числе, интересующий нас id категории. Вот ее фрагмент:
Код
"23";s:4:"mask";s:1:"0";s:5:"catid";s:3:"105";s:7:"created";s:19:"2011-07-22 17:06:20";
Внимание! Эта строка содержит HTML-код материала, так что если будете в ней копаться, сделайте тестовый материал из одного символа. В нем и смотрите.

Нас интересует конкретный фрагмент, явно описывающий id категории:
Код
"catid";s:3:"105"

"catid" - это явно имя интересующего нас параметра,
s:3 - очевидно, тип данных строка, длина 3 символа,
"105" - а это и есть искомый номерочек категории.

Добываем эту строку:
Код
$doc_properties = $GLOBALS['cache']->_cache->_id;

Далее нужно выдернуть этот номер с помощью регулярного выражения:
Код
$pattern = "/(?<=\"catid\";s:\d:\")\d+/";
preg_match_all($pattern, $doc_properties, $matches);
$cat_id_detected = $matches[0][0];

Этот код можно втыкать в самое начало шаблона, и далее использовать переменную $cat_id_detected для своих целей.

Аналогично можно добыть id раздела, имя раздела или категории, а также многое другое. В мануале по PHP есть очень хорошая статья "Синтаксис регулярных выражений". Можно там почитать, как создать несложный паттерн.

P.S. Возможно, есть более элегантный способ, или менее затратный по ресурсам сервера. Может быть, лучше обратиться к соответствующему классу. У меня не получилось сходу найти его имя. Я в этом плохо разбираюсь, я не программист. Буду рад, если меня поправят сведущие люди.
« Последнее редактирование: 22.07.2011, 21:17:49 от monitorlab »
Чтобы оставить сообщение,
Вам необходимо Войти или Зарегистрироваться
 

"Персональные" CSS для каждого пункта меню

Автор mdd

Ответов: 13
Просмотров: 7805
Последний ответ 28.04.2006, 11:18:34
от raduga