получить ID материала, категории, раздела в шаблоне

  • 16 Ответов
  • 13918 Просмотров

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

*

e-life

  • Осваиваюсь на форуме
  • ***
  • 26
  • -1
Задача такая - есть несколько разделов на сайте.
Я хочу в зависимости от раздела вывести определенные картинки.

Нужно сделать это в шаблоне - в зависимости от текущего раздела вывести соответствующий кусок HTML.

На данный момент имею вот что:
ИД материала получаю через $menu = & JSite::getMenu(); далее через запрос в БД получаю ИД раздела.
Но это работает только если текущий материал есть в меню, а если сделать пункт меню категории (новости) и перейти на страницу новости, то этой страницы уже нет в меню.

То, что находил тут и вообще в инете не устроило. Так и не смог найти как получить ИД материала, категории и раздела прямо в шаблоне.

*

shprota

  • Разработчик расширений для Joomla 1.5
  • *
  • 772
  • 52
  • Тружусь, не покладая рук
Не надо в меню лазать. Все получается прямо из запроса.
Нечто вроде такого:
Код: php
$option = JRequest::getString('option');
if($option == 'com_content')
{
  $cid = JRequest::getInt('catid');
  $id = JRequest::getInt('id');
}

*

e-life

  • Осваиваюсь на форуме
  • ***
  • 26
  • -1
$cid = JRequest::getInt('catid'); - это ИД категории?
выдает 0.
И всетаки - как получить ИД раздела, скажем на странице со списком новостей, т.е. на странице категории?

Приведенный пример нерабочий. Кто сможет привести более внятный ответ. Думаю вопрос довольно конкретный задал.
« Последнее редактирование: 10.01.2010, 17:04:18 от e-life »

*

e-life

  • Осваиваюсь на форуме
  • ***
  • 26
  • -1
тут http://forum.joomla.org/viewtopic.php?f=466&t=302292
нашел вот такое решение:
Код
function getSection($iId) {
      $database = &JFactory::getDBO();
      if(JRequest::getVar( 'view', 'NONE') == "frontpage"){
         return 1;
      }else if(JRequest::getVar( 'view', 'NONE') == "section"){
         return JRequest::getVar( 'id', 'NONE');
      }else if(Jrequest::getVar( 'view', 'NONE') == "category"){
         //echo 'hit category';
         $sql = "SELECT section FROM #__categories WHERE id = $iId ";
         $database->setQuery( $sql );
         $row=$database->loadResult();
         return $row;
      }else if(Jrequest::getVar( 'view', 'NONE') == "article"){
         //echo 'hit article';
         $sql = "SELECT sectionid FROM #__content WHERE id = $iId ";
         $database->setQuery( $sql );
         $row=$database->loadResult();
         return $row;
      }
   }
   $sectionID=getSection(JRequest::getInt('id', 'NONE'));

здесь я его немного подправил, чтобы на главной странице выдавало первый раздел.

ПС пока что вроде решение устраивает, но, думаю, что в дальнейшем понадобится больше разбираться в этом вопросе.

*

SmokerMan

  • Профи
  • ********
  • 5329
  • 689
:) оригинальное решение. Делать лишний запрос к БД.
Хотя поторопился. Почитал тему думал id материала только нужно.

*

archer1981

  • Давно я тут
  • ****
  • 264
  • 13
Нужно решить именно такую задачу. Как при помощи означенной функции в условие вносить id категории?
http://walkspb.ru - Энциклопедия Санкт-Петербурга

*

4Fun

  • Захожу иногда
  • **
  • 15
  • 0
Сейчас мучаюсь, нужно получить id категории
вырос вот такой код, но он не работает если мы включаем ЧПУ, это из-за того что там не передаётся catid.
Код: php
$id=JRequest::getVar( 'id','' );
$catid=JRequest::getVar( 'catid','' );
$this->params->catid=$id;
if ($catid)
{$this->params->catid=$catid;}
else
{$this->params->catid=$id;}

*

4Fun

  • Захожу иногда
  • **
  • 15
  • 0
Вот кстати финальная версия. Принцып работы очень прост, что позволяет работать даже с ЧПУ.
При желании её несложно доработать..
Код: php
	$id=JRequest::getVar( 'id','' );
if (JRequest::getVar('view')=='category')
{$this->params->catid=$id;}
if (JRequest::getVar('view')=='article') {
         $sql = "SELECT catid FROM #__content WHERE id = .$database->Quote($id) ";
         $database->setQuery( $sql );
         echo($database->loadResult());
}

*

SmokerMan

  • Профи
  • ********
  • 5329
  • 689
Сейчас мучаюсь, нужно получить id категории
вырос вот такой код, но он не работает если мы включаем ЧПУ, это из-за того что там не передаётся catid.
это как, не передается? :)
Цитировать
{$this->params->catid=$id;}
вообще не понятная строчка. Чего этим хотели добиться?

*

SmokerMan

  • Профи
  • ********
  • 5329
  • 689
Вот кстати финальная версия. Принцып работы очень прост, что позволяет работать даже с ЧПУ.
При желании её несложно доработать..
Код: php
	$id=JRequest::getVar( 'id','' );
if (JRequest::getVar('view')=='category')
{$this->params->catid=$id;}
if (JRequest::getVar('view')=='article') {
         $sql = "SELECT catid FROM #__content WHERE id = .$database->Quote($id) ";
         $database->setQuery( $sql );
         echo($database->loadResult());
}
код вообще бредовый :)
Код: php
if (JRequest::getVar('view') == 'category') {
  $id=JRequest::getInt('id');
} else if (JRequest::getVar('view')=='article') {
  $id=JRequest::getInt('catid');
}
echo 'ID category - '.$id;

*

maestra

  • Осваиваюсь на форуме
  • ***
  • 80
  • 5
Мучает аналогичная проблема. Разница в том, что надо в заголовке статьи публиковать ее ID, но только в том случае если она находится в определенной категории (идентифицировать тоже надо по ID`у категории).

Думаю, что делать это надо не в шаблоне, а непосредственно в com_content. Проблема в том, что не знаю как получить IDы статьи и категории (пытаюсь изучать API Joomla 1.5, но из-за слабости знания английского языка дело продвигается очень медленно...)

Поможете?

*

e-life

  • Осваиваюсь на форуме
  • ***
  • 26
  • -1
Код: php
  $id=JRequest::getInt('catid');

При включеном СЕО не работает!
А очень хотелось бы.
Получается только через БД чтоли?

*

vovchikku

  • Давно я тут
  • ****
  • 366
  • 1
парни, удалось решить проблему вывода разных модулей для разного материала если SEO включено?

smokerman, скажите ваш код подойдет для этой задачи? если да, то куда и как вставить вывод определенного модуля?
Цитировать
if (JRequest::getVar('view') == 'category') {
  $id=JRequest::getInt('id');
} else if (JRequest::getVar('view')=='article') {
  $id=JRequest::getInt('catid');
}
echo 'ID category - '.$id;
 

*

SmokerMan

  • Профи
  • ********
  • 5329
  • 689
vovchikku может это поможет, но не уверен :)
http://joomlaforum.ru/index.php/topic,132312.0.html

*

format1981

  • Новичок
  • *
  • 4
  • 0
Если еще не разобрались с проблемой, то вот ответ

echo $_GET['id'];
echo $_GET['catid'];

работает с seo

вот источник http://forum.joomla.org/viewtopic.php?f=431&t=320868

*

vovchikku

  • Давно я тут
  • ****
  • 366
  • 1
проще поставить advanced module manager

*

LadaDed

  • Новичок
  • *
  • 8
  • 0
Это нужно делать в default.php в category или куда там переадресация
$this->category->id