Форум русской поддержки Joomla! CMS |

23.04.2010, 20:25:08

Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь. Вам не пришло письмо с кодом активации? Войти

|  | Начало |  | Поиск | Joomla 1.5 FAQ | Joomla 1.0 FAQ | Правила форума | Новости Joomla | Войти | Регистрация | Помощь |

Страниц: [1] Вниз |

| Добавить закладку | Печать |

| Автор | Тема: Один материал в нескольких категориях (Прочитано 15192 раз)
0 Пользователей и 1 Гость смотрят эту тему.

Legion Leonhart Авторы модификаций Репутация: +3/-0 Offline Пол:
Сообщений: 30

| Один материал в нескольких категориях « : 14.08.2009, 19:01:27 » |

Столкнулся с такой необходимость, но не одного достойного готового решения не нашел (компоненты типа ZOO в топку).
Что делает: каждому материалу можно присвоить несколько категорий, но в пределах одного раздела. При просмотре материала будут показаны все категории, в которых содержится материал (хотя это уже на ваше усмотрение, можете и не показывать). При просмотре раздела, дубликатов, естественно, никаких нет.
Хак требует изменения как базы данных так и нескольких файлов самой Joomla, так что перед тем как редактировать файлы, сделайте их бакапы.
Приступим: Описание сделано для возможности указания 3х категорий, если нужно больше делайте по аналогии, принцип понять несложно.
Шаг 1 - Выполнить скрипт для БД, где # - префикс таблиц в вашей БД
Код:

    ALTER TABLE `#_content` ADD `catid2` INT ( 11 ) NOT NULL DEFAULT '-1' AFTER `catid` ;
    ALTER TABLE `#_content` ADD `catid3` INT ( 11 ) NOT NULL DEFAULT '-1' AFTER `catid2` ;
    ALTER TABLE `#_content` ADD INDEX ( `catid2` );
    ALTER TABLE `#_content` ADD INDEX ( `catid3` );

Шаг 2 - Обьясняем Joomla, что у нас в таблице content появились новые поля.
Редактируем файл libraries\joomla\database\table\content.php
Ищем
Код:

    	var $catid				= null;

Добавляем после
Код:

    	var $catid2				= null;
    	var $catid3				= null;

Шаг 3 - Добавляем в админке возможность при создании/редактировании материала указывать несколько категорий
Редактируем файл administrator\components\com_content\admin.content.html.php
Ищем
Код:

    				<?php echo $lists['catid']; ?>

Добавляем после
Код:

                    </br><?php echo $lists['catid2']; ?>
                    </br><?php echo $lists['catid3']; ?>

Редактируем файл administrator\components\com_content\controller.php
Ищем
Код:

    		$javascript = "onchange=\"changeDynaList ( 'catid', sectioncategories, document.adminForm.sectionid.options[document.adminForm.sectionid.selectedIndex].value, 0, 0);\"";

Заменяем на
Код:

    		$javascript = "onchange=\"changeDynaList ( 'catid', sectioncategories, document.adminForm.sectionid.options[document.adminForm.sectionid.selectedIndex].value, 0, 0);changeDynaList ( 'catid2', sectioncategories, document.adminForm.sectionid.options[document.adminForm.sectionid.selectedIndex].value, 0, 0);changeDynaList ( 'catid3', sectioncategories, document.adminForm.sectionid.options[document.adminForm.sectionid.selectedIndex].value, 0, 0);\"";

Ищем
Код:

    			foreach ($cat_list as $cat)
    			{
    				if ($cat->section == $section->id) {
    					$rows2[] = $cat;
    				}
    			}

Добавляем после
Код:

    			$sectioncategories[$section->id][] = JHTML::_('select.option', '-1', JText::_( 'Select Category' ), 'id', 'title');

Ищем
Код:

    		$lists['catid'] = JHTML::_('select.genericlist',  $categories, 'catid', 'class="inputbox" size="1"', 'id', 'title', intval ($row->catid));

Добавляем после
Код:

    		$lists['catid2'] = JHTML::_('select.genericlist',  $categories, 'catid2', 'class="inputbox" size="1"', 'id', 'title', intval ($row->catid2));
    		$lists['catid3'] = JHTML::_('select.genericlist',  $categories, 'catid3', 'class="inputbox" size="1"', 'id', 'title', intval ($row->catid3));

Шаг 4 - Учим Joomla показывать материалы, в которых указано несколько категорий
Редактируем файл components\com_content\models\category.php
Ищем
Код:

    			$where .= ' AND a.catid = '.(int) $this->_id;

Заменяем на
Код:

    			$where .= ' AND (a.catid = '.(int) $this->_id.' OR a.catid2 = '.(int) $this->_id.' OR a.catid3 = '.(int) $this->_id.')';

Шаг 5 - Учим Joomla показывать при просмотре материала все категории, за которыми закреплен данный материал.
Редактируем файл components\com_content\models\article.php
Ищем
Код:

    			$this->_article = $this->_db->loadObject ();

Добавляем после
Код:

    			if ($this->_article->catid2 != -1) {
    			$query = 'SELECT title'.
    					' FROM #__categories' .
    					' WHERE id = '.$this->_article->catid2;
    			$this->_db->setQuery ($query);
    			$this->_cat2 = $this->_db->loadObject ();
    			$this->_article->category2	= $this->_cat2->title;
    			}

    			if ($this->_article->catid3 != -1) {
    			$query = 'SELECT title'.
    					' FROM #__categories' .
    					' WHERE id = '.$this->_article->catid3;
    			$this->_db->setQuery ($query);
    			$this->_cat3 = $this->_db->loadObject ();
    			$this->_article->category3	= $this->_cat3->title;
    			}

Редактируем файл components\com_content\views\article\tmpl\default.php
Ищем
Код:

    			<?php if ($this->params->get ('link_category')) : ?>
    				<?php echo '<a href="'.JRoute::_(ContentHelperRoute::getCategoryRoute ($this->article->catslug, $this->article->sectionid)).'">'; ?>
    			<?php endif; ?>
    			<?php echo $this->escape ($this->article->category); ?>
    			<?php if ($this->params->get ('link_category')) : ?>
    				<?php echo '</a>'; ?>
    			<?php endif; ?>

Добавляем после
Код:

                 <?php if ($this->params->get ('link_category') && $this->article->category2) : ?>
    				<?php echo ',
    				<a href="'.JRoute::_(ContentHelperRoute::getCategoryRoute ($this->article->catid2, $this->article->sectionid)).'">'; ?>
    			<?php endif; ?>
    			<?php echo $this->escape ($this->article->category2); ?>
    			<?php if ($this->params->get ('link_category') && $this->article->category2) : ?>
    				<?php echo '</a>'; ?>
    			<?php endif; ?>
                <?php if ($this->params->get ('link_category') && $this->article->category3) : ?>
    				<?php echo ',
    				<a href="'.JRoute::_(ContentHelperRoute::getCategoryRoute ($this->article->catid3, $this->article->sectionid)).'">'; ?>
    			<?php endif; ?>
    			<?php echo $this->escape ($this->article->category3); ?>
    			<?php if ($this->params->get ('link_category') && $this->article->category3) : ?>
    				<?php echo '</a>'; ?>
    			<?php endif; ?>

Примечание: эту же операцию необходимо проделать и с используемыми вами шаблонами, если в них есть этот файл. Например его содержит шаблон ja_purity/html/com_content/article/default.php
Шаг 6 - Ну и наконец знакомим другие модули Joomla с нашим хаком (например модули mainmenu и breadcrumbs)
Редактируем файл components\com_content\views\category\view.html.php
Ищем
Код:

    		if (($item->params->get ('show_readmore') && @ $item->readmore) || $item->params->get ('link_titles'))
    		{

Добавляем после него
Код:

    			$itemid = JRequest::getInt ('id',0);

Далее ищем
Код:

    				$item->readmore_link = JRoute::_(ContentHelperRoute::getArticleRoute ($item->slug, $item->catslug, $item->sectionid));

Заменяем на
Код:

    				$item->readmore_link = JRoute::_(ContentHelperRoute::getArticleRoute ($item->slug, $itemid, $item->sectionid));

Ищем
Код:

    				$returnURL = JRoute::_(ContentHelperRoute::getArticleRoute ($item->slug, $item->catslug, $item->sectionid),false);

и заменяем на
Код:

    				$returnURL = JRoute::_(ContentHelperRoute::getArticleRoute ($item->slug, $itemid, $item->sectionid),false);

Шаг 7 - учим админку показывать при фильтрации по категории материалы привязанные к нескольким категориям
Редактируем файл administrator\components\com_content\controller.php
Найти
Код:

    $where[] = 'c.catid = ' . (int) $catid;

и заменить на
Код:

    $where[] = '(c.catid = ' . (int) $catid .' OR c.catid2 = ' . (int) $catid .' OR c.catid3 = '. (int) $catid .')';

Шаг 8 - делаем возможность для материалов привязанных к нескольким категориям в столбце Категория показывать все категории, к которым привязан материал. Разделение сделано горизонтальной линией для удобства.
Редактируем файл administrator\components\com_content\controller.php
Ищем
Код:

    // Get the articles
    		$query = 'SELECT c.*, g.name AS groupname, cc.title AS name, u.name AS editor, f.content_id AS frontpage, s.title AS section_name, v.name AS author' .
    				' FROM #__content AS c' .
    				' LEFT JOIN #__categories AS cc ON cc.id = c.catid' .
    				' LEFT JOIN #__sections AS s ON s.id = c.sectionid' .
    				' LEFT JOIN #__groups AS g ON g.id = c.access' .
    				' LEFT JOIN #__users AS u ON u.id = c.checked_out' .
    				' LEFT JOIN #__users AS v ON v.id = c.created_by' .
    				' LEFT JOIN #__content_frontpage AS f ON f.content_id = c.id' .
    				$where .
    				$order;

и заменяем на
Код:

    // Get the articles
    		$query = 'SELECT c.*, g.name AS groupname, cc.title AS name, cc2.title AS name2, cc3.title AS name3, u.name AS editor, f.content_id AS frontpage, s.title AS section_name, v.name AS author' .
    				' FROM #__content AS c' .
    				' LEFT JOIN #__categories AS cc ON cc.id = c.catid' .
    				' LEFT JOIN #__categories AS cc2 ON cc2.id = c.catid2' .
    				' LEFT JOIN #__categories AS cc3 ON cc3.id = c.catid3' .
    				' LEFT JOIN #__sections AS s ON s.id = c.sectionid' .
    				' LEFT JOIN #__groups AS g ON g.id = c.access' .
    				' LEFT JOIN #__users AS u ON u.id = c.checked_out' .
    				' LEFT JOIN #__users AS v ON v.id = c.created_by' .
    				' LEFT JOIN #__content_frontpage AS f ON f.content_id = c.id' .
    				$where .
    				$order;

Редактируем файл administrator\components\com_content\admin.content.html.php
Ищем (найдется две строки, сделать для обоих)
Код:

    				$row->cat_link 	= JRoute::_( 'index.php?option=com_categories&task=edit&cid[]='. $row->catid );

и добавляем после :
Код:

    	$row->cat_link2 	= JRoute::_( 'index.php?option=com_categories&task=edit&cid[]='. $row->catid2 );
    				$row->cat_link3 	= JRoute::_( 'index.php?option=com_categories&task=edit&cid[]='. $row->catid3 );

Ищем (найдется две строки, сделать для обоих)
Код:

    <a href="<?php echo $row->cat_link; ?>" title="<?php echo JText::_( 'Edit Category' ); ?>">
    							<?php echo $row->name; ?></a>

и добавить после них
Код:

                            <?php if ($row->catid2 && $row->catid2!=-1) : ?>
    							<hr><a href="<?php echo $row->cat_link2; ?>" title="<?php echo JText::_( 'Edit Category' ); ?>">
    							<?php echo $row->name2; ?></a>
    						<?php endif; ?>
                            <?php if ($row->catid3 && $row->catid3!=-1) : ?>
    							<hr><a href="<?php echo $row->cat_link3; ?>" title="<?php echo JText::_( 'Edit Category' ); ?>">
    							<?php echo $row->name3; ?></a>
    						<?php endif; ?>

Замечание: если выделали хак для привязки более чем к 3м категориям, то данный вариант для вас скорее всего будет не очень удобен, строка материала слишком растянется. В этом случае лучше пойти иным путем, например: заменить название категории надписью "Список категорий...", по щелчку на котором появится список категорий для данного материала. Если сами не знаете как такое сделать, можете написать мне в ЛС и я по возможности допишу это здесь.
Шаг 9 - добавляем возможность указания нескольких категорий в fronted редакторе
Редактируем файл components\com_content\views\article\view.html.php
Ищем
Код:

    $lists['catid'] = JHTML::_('select.genericlist',  $categories, 'catid', 'class="inputbox" size="1"', 'id', 'title', intval($article->catid));

Добавляем после
Код:

    		$lists['catid2'] = JHTML::_('select.genericlist',  $categories, 'catid2', 'class="inputbox" size="1"', 'id', 'title', intval($article->catid2));
    		$lists['catid3'] = JHTML::_('select.genericlist',  $categories, 'catid3', 'class="inputbox" size="1"', 'id', 'title', intval($article->catid3));

найти
Код:

    $javascript = "onchange=\"changeDynaList( 'catid', sectioncategories, document.adminForm.sectionid.options[document.adminForm.sectionid.selectedIndex].value, 0, 0);\"";

заменить на
Код:

    $javascript = "onchange=\"changeDynaList ( 'catid', sectioncategories, document.adminForm.sectionid.options[document.adminForm.sectionid.selectedIndex].value, 0, 0);changeDynaList ( 'catid2', sectioncategories, document.adminForm.sectionid.options[document.adminForm.sectionid.selectedIndex].value, 0, 0);changeDynaList ( 'catid3', sectioncategories, document.adminForm.sectionid.options[document.adminForm.sectionid.selectedIndex].value, 0, 0);\"";

найти
Код:

    			foreach ($cat_list as $cat)
    			{
    				if ($cat->section == $section->id) {
    					$rows2[] = $cat;
    				}
    			}

Добавляем после
Код:

    			$sectioncategories[$section->id][] = JHTML::_('select.option', '-1', JText::_( 'Select Category' ), 'id', 'title');

Редактируем файл components\com_content\views\article\tmpl\form.php
Ищем
Код:

    		<?php echo $this->lists['catid']; ?>

Добавляем после
Код:

            </br><?php echo $this->lists['catid2']; ?>
            </br><?php echo $this->lists['catid3']; ?>

Шаг 10 - Учим Joomla показывать при просмотре раздела или категории все категории, за которыми закреплены материалы.
Редактируем файл components\com_content\models\section.php
найти
Код:

    			$limit		= JRequest::getVar('limit', 0, '', 'int');
    			$limitstart	= JRequest::getVar('limitstart', 0, '', 'int');

Добавляем после
Код:

    			$query = 'SELECT id, title'.
    					' FROM #__categories'.
    					' WHERE section = '.(int) $this->_id;
    			$this->_db->setQuery($query);
    			$this->_cat = $this->_db->loadObjectList();
    			foreach ($this->_cat as $data)
    			{
    				$cati[$data->id] = $data->title;
    			}

немного ниже найти
Код:

    				// check to determine if section or category has proper access rights
    				$rows[$i] = $row;

Добавляем после
Код:

    				if ($rows[$i]->catid2 != -1) $rows[$i]->category2	= $cati[$rows[$i]->catid2];
    				if ($rows[$i]->catid3 != -1) $rows[$i]->category3	= $cati[$rows[$i]->catid3];

найти
Код:

    		$query = 'SELECT a.id, a.title, a.alias, a.title_alias, a.introtext, a.fulltext, a.sectionid, a.state, a.catid, a.created, a.created_by, a.created_by_alias, a.modified, a.modified_by,' .
    				' a.checked_out, a.checked_out_time, a.publish_up, a.publish_down, a.attribs, a.hits, a.images, a.urls, a.ordering, a.metakey, a.metadesc, a.access,' .

заменить на
Код:

    		$query = 'SELECT a.*,' .

Редактируем файл components\com_content\models\category.php
найти
Код:

    			$limit		= JRequest::getVar('limit', 0, '', 'int');
    			$limitstart	= JRequest::getVar('limitstart', 0, '', 'int');

Добавляем после
Код:

    			$query = 'SELECT id, title'.
    					' FROM #__categories'.
    					' WHERE section = '.(int) $this->_category->section;
    			$this->_db->setQuery($query);
    			$this->_cat = $this->_db->loadObjectList();
    			foreach ($this->_cat as $data)
    			{
    				$cati[$data->id] = $data->title;
    			}

найти
Код:

    				// check to determine if section or category has proper access rights
    				$rows[$i] = $row;

Добавляем после
Код:

    				$rows[$i]->category1	= $cati[$rows[$i]->catid];
    				if ($rows[$i]->catid2 != -1) $rows[$i]->category2	= $cati[$rows[$i]->catid2];
    				if ($rows[$i]->catid3 != -1) $rows[$i]->category3	= $cati[$rows[$i]->catid3];

найти
Код:

    		$query = 'SELECT cc.title AS category, a.id, a.title, a.alias, a.title_alias, a.introtext, a.fulltext, a.sectionid, a.state, a.catid, a.created, a.created_by, a.created_by_alias, a.modified, a.modified_by,' .
    			' a.checked_out, a.checked_out_time, a.publish_up, a.publish_down, a.attribs, a.hits, a.images, a.urls, a.ordering, a.metakey, a.metadesc, a.access,' .

заменить на
Код:

    		$query = 'SELECT cc.title AS category, a.*,' .

Редактируем файл components\com_content\views\section\tmpl\blog_item.php
найти
Код:

    			<?php if ($this->item->params->get('link_category')) : ?>
    				<?php echo '</a>'; ?>
    			<?php endif; ?>

Добавляем после
Код:

                <?php if ($this->item->params->get ('link_category') && $this->item->category2) : ?>
    				<?php echo ',
    				<a href="'.JRoute::_(ContentHelperRoute::getCategoryRoute ($this->item->catid2, $this->item->sectionid)).'">'; ?>
    			<?php endif; ?>
    			<?php echo $this->escape ($this->item->category2); ?>
    			<?php if ($this->item->params->get ('link_category') && $this->item->category2) : ?>
    				<?php echo '</a>'; ?>
    			<?php endif; ?>
                <?php if ($this->item->params->get ('link_category') && $this->item->category3) : ?>
    				<?php echo ',
    				<a href="'.JRoute::_(ContentHelperRoute::getCategoryRoute ($this->item->catid3, $this->item->sectionid)).'">'; ?>
    			<?php endif; ?>
    			<?php echo $this->escape ($this->item->category3); ?>
    			<?php if ($this->item->params->get ('link_category') && $this->item->category3) : ?>
    				<?php echo '</a>'; ?>
    			<?php endif; ?>

Редактируем файл components\com_content\views\category\tmpl\blog_item.php
найти
Код:

    		<?php echo $this->escape($this->item->category); ?>
    			<?php if ($this->item->params->get('link_category')) : ?>
    				<?php echo '</a>'; ?>
    			<?php endif; ?>

Заменить на
Код:

    		<?php echo $this->escape($this->item->category1); ?>
    		<?php if ($this->item->params->get('link_category')) : ?>
    			<?php echo '</a>'; ?>
    		<?php endif; ?>
                <?php if ($this->item->params->get ('link_category') && $this->item->category2) : ?>
    				<?php echo ',
    				<a href="'.JRoute::_(ContentHelperRoute::getCategoryRoute ($this->item->catid2, $this->item->sectionid)).'">'; ?>
    			<?php endif; ?>
    			<?php echo $this->escape ($this->item->category2); ?>
    			<?php if ($this->item->params->get ('link_category') && $this->item->category2) : ?>
    				<?php echo '</a>'; ?>
    			<?php endif; ?>
                <?php if ($this->item->params->get ('link_category') && $this->item->category3) : ?>
    				<?php echo ',
    				<a href="'.JRoute::_(ContentHelperRoute::getCategoryRoute ($this->item->catid3, $this->item->sectionid)).'">'; ?>
    			<?php endif; ?>
    			<?php echo $this->escape ($this->item->category3); ?>
    			<?php if ($this->item->params->get ('link_category') && $this->item->category3) : ?>
    				<?php echo '</a>'; ?>
    			<?php endif; ?>

Примечание: эту же операцию с файлами blog_item.php необходимо проделать и с используемыми вами шаблонами, если в них есть этот файл. Например его содержит шаблон ja_purity (ja_purity\html\com_content\section\blog_item.php и ja_purity\html\com_content\category\blog_item.php)
Усё, теперь можете идти в админку и смотреть результат

« Последнее редактирование: 12.02.2010, 16:01:50 от Legion Leonhart » | Записан

Legion Leonhart Авторы модификаций Репутация: +3/-0 Offline Пол:
Сообщений: 30

| Re: [Hack] Один материал в нескольких категориях « Ответ #1 : 25.08.2009, 11:18:06 » |

Внимание внесены изменения в инструкцию:
изменены Шаги: 1, 5, 8
добавлен Шаг: 9
Для тех кто устанавливал hack до этих изменений необходимо провести следующие действия:
Выполнить скрипт для БД, где # - префикс таблиц в вашей БД
Код:

    ALTER TABLE `#_content` CHANGE `catid2` `catid2` INT( 11 ) NOT NULL DEFAULT '-1';
    ALTER TABLE `#_content` CHANGE `catid3` `catid3` INT( 11 ) NOT NULL DEFAULT '-1';
    UPDATE `frip_content` SET catid2 = '-1' WHERE catid2 =0;
    UPDATE `frip_content` SET catid3 = '-1' WHERE catid3 =0;

В файле components\com_content\models\article.php
найти
Код:

    if ($this->_article->catid2 != 0 || $this->_article->catid2 != -1)

заменить на
Код:

    if ($this->_article->catid2 != -1)

найти
Код:

    if ($this->_article->catid3 != 0 || $this->_article->catid3 != -1)

заменить на
Код:

    if ($this->_article->catid3 != -1)

В файле components\com_content\views\article\tmpl\default.php
найти (найдется два раза)
Код:

    <?php if ($this->params->get ('link_category') && $this->article->catid2) : ?>

заменить на
Код:

    <?php if ($this->params->get ('link_category') && $this->article->category2) : ?>

найти (найдется два раза)
Код:

    <?php if ($this->params->get ('link_category') && $this->article->catid3) : ?>

заменить на
Код:

    <?php if ($this->params->get ('link_category') && $this->article->category3) : ?>

В файле administrator\components\com_content\admin.content.html.php
найти
Код:

    <?php if ($row->catid2) : ?>

заменить на
Код:

    <?php if ($row->catid2 && $row->catid2!=-1) : ?>

найти
Код:

    <?php if ($row->catid3) : ?>

заменить на
Код:

    <?php if ($row->catid3 && $row->catid3!=-1) : ?>

Выполнить Шаг 9 инструкции в первом сообщение (ну если оно вам нужно конечно)

| Записан

beliyadm Joomlapedia team Репутация: +1200/-48 Offline Пол:
Сообщений: 8706
Севастополь==Россия

| Re: [Hack] Один материал в нескольких категориях « Ответ #2 : 25.08.2009, 11:25:37 » |

Legion Leonhart - а не проще было бы сделать select типа мультивыбора (через CTRL), через запятую писать в одном поле БД (catid) а на выходе делить на массив и проверять соответствие? Я лично так давным давно делал под один проект, плохо что не документировал и надо сначала повторять процесс

| Записан

Замороженные сиськи растревожили меня, замороженные сиськи очень странная фигня
-=Joomla FAQ=- || Работаем..с || Private Joomla Blog

Legion Leonhart Авторы модификаций Репутация: +3/-0 Offline Пол:
Сообщений: 30

| Re: [Hack] Один материал в нескольких категориях « Ответ #3 : 25.08.2009, 12:00:05 » |

Так нагляднее и проще. Изначально я тоже думал сделать массивом в catid, но поразмыслив понял, что это не всегда есть гуд. Ведь в случае сайта с большим количеством контента (а я делал именно для такого) выборка по индексированным полям в БД будет производится быстрее нежели проверка на соответствие в массиве catid для каждой строки.
PS Отчасти на решение повлияло и то что это мой первый опыт общения с Joomla и всех её тонкостей я ещё не знаю.

« Последнее редактирование: 25.08.2009, 12:03:51 от Legion Leonhart » | Записан

Legion Leonhart Авторы модификаций Репутация: +3/-0 Offline Пол:
Сообщений: 30

| Re: Один материал в нескольких категориях « Ответ #4 : 10.12.2009, 20:34:54 » |

Внимание внесены изменения в инструкцию:
изменен Шаг: 9
добавлен Шаг: 10
Для тех кто устанавливал hack до этих изменений необходимо провести следующие действия:
Редактируем файл components\com_content\views\article\view.html.php
найти
Код:

    $javascript = "onchange=\"changeDynaList( 'catid', sectioncategories, document.adminForm.sectionid.options[document.adminForm.sectionid.selectedIndex].value, 0, 0);\"";

заменить на
Код:

    $javascript = "onchange=\"changeDynaList ( 'catid', sectioncategories, document.adminForm.sectionid.options[document.adminForm.sectionid.selectedIndex].value, 0, 0);changeDynaList ( 'catid2', sectioncategories, document.adminForm.sectionid.options[document.adminForm.sectionid.selectedIndex].value, 0, 0);changeDynaList ( 'catid3', sectioncategories, document.adminForm.sectionid.options[document.adminForm.sectionid.selectedIndex].value, 0, 0);\"";

найти
Код:

    			foreach ($cat_list as $cat)
    			{
    				if ($cat->section == $section->id) {
    					$rows2[] = $cat;
    				}
    			}

Добавляем после
Код:

    			$sectioncategories[$section->id][] = JHTML::_('select.option', '-1', JText::_( 'Select Category' ), 'id', 'title');

Выполнить Шаг 10 инструкции в первом сообщение (ну если оно вам нужно конечно)

| Записан

Legion Leonhart Авторы модификаций Репутация: +3/-0 Offline Пол:
Сообщений: 30

| Re: Один материал в нескольких категориях « Ответ #5 : 12.02.2010, 16:07:30 » |

Внимание внесены изменения в инструкцию: (исправляет ошибку, когда вместо названия первой категории материала, при просмотре категории в виде блога, отображалось название текущей категории)
Изменен Шаг: 10
Для тех кто устанавливал hack до этих изменений необходимо провести следующие действия:
Редактируем файл components\com_content\models\category.php
найти
Код:

    				// check to determine if section or category has proper access rights
    				$rows[$i] = $row;

Добавить после
Код:

    				$rows[$i]->category1	= $cati[$rows[$i]->catid];

Редактируем файл components\com_content\views\category\tmpl\blog_item.php
найти
Код:

    		<?php echo $this->escape($this->item->category); ?>

заменить на
Код:

    		<?php echo $this->escape($this->item->category1); ?>

Примечание: эту же операцию с файлами blog_item.php необходимо проделать и с используемыми вами шаблонами, если в них есть этот файл. Например его содержит шаблон ja_purity (ja_purity\html\com_content\section\blog_item.php и ja_purity\html\com_content\category\blog_item.php)

| Записан

Страниц: [1] Вверх |

| Добавить закладку | Печать |

Перейти в:

| Powered by SMF 1.1.11 | SMF © 2006, Simple Machines LLC |

Загружается...