Меню

Joomla 2.5 вывод материалов из нескольких категорий. Материал в Joomla. Параметры отображения материала

Установка драйверов

Материалы

Давайте начнём с нескольких определений. Материалы в Joomla! это информация, которую вы хотите отобразить на сайте. Обычно они состоят из текста, изображений или других типов контента. Для многих сайтов Joomla! статьи являются основным контентом, презентованным на сайте.

Важно понять, что материал в Joomla! кардинально отличается от своего конечного вида на самом сайте. Например материал может быть оформлен разными шрифтами, цветами, заголовками и фонами, может быть представлен в различных частях самой страницы.

Разделы и категории

Разделы и категории в Joomla! позволяют, при желании, организовать расположение ваших материалов. Вот как это работает. Раздел содержит одну или более категорию, к которой могут быть прикреплены материалы. Один материал может находиться только в одной категории и одном разделе.

Допустим есть раздел под названием «Питомцы» и категории «Собаки» и «Кошки». Материалы о собаках прикрепим к категории «Собаки», о кошках к категории «Кошки». Таким образом материал о собаках будет находиться в разделе «Питомцы», в категории «Собаки». Один и тот же материал не может находиться в разных категориях. Чтобы обойти этот нюанс вы можете создать новую категорию «Кошки и собаки», либо создать новый материал, чтобы поместить его в нужную вам категорию.

Зачем использовать разделы и категории?

Есть две основные причины, исходя из которых вы захотите организовать ваши материалы в категории и разделы.

Схемы блогов и списков

Во-первых в Joomla! существуют встроенные пункты меню, чтобы пользоваться этими возможностями. Раздел блогов, раздел списков, категории блогов и категории списков. Эти вкладки меню позволяют с лёгкостью отобразить материалы, принадлежащие к определённому разделу или категории. Как только создан новый материал и определён в категорию и раздел, он будет автоматически помещён на ту страницу, которую вы указали в настройках.

Например у вас есть вкладка меню Категории блогов для категории «Питомцы» и вы указываете в настройках показывать новейшие материалы в начале категории. Когда вы в следующий раз добавите новый материал он будет отображаться в начале списка. От вас не потребуется никаких иных действий, кроме как добавить материал в категорию «Питомцы».

Организация материалов в Менеджере материалов

Если на вашем сайте большое количество материалов, вторая причина пользоваться разделами и категориями состоит в том, чтобы просто их упорядочить удобным для вас способом. Например в менеджере материалов вы можете отфильтровать материал по категории или разделу. Имея 200 статей на сайте вы можете с лёгкостью найти нужную, вспомнив принадлежащую ей категорию или раздел.

Разделы, категории и организация меню

Важно понимать,что если Joomla! использует организацию материалов в три уровня (Раздел>Категория>Материал), не обязательно от этого будет зависеть структура меню вашего сайта. Например у вашего сайта может быть один уровень меню, а может быть и шесть.

Другие типы категорий

Так же присутствует возможность некоторой путаницы, касающейся категорий. Разделы используются только для материалов. Тем не менее категории так же используются для компонентов, включая баннеры, контакты, новостные ленты и ссылки. Эти категории абсолютно не похожи на категории материалов и отображаются в других частях страницы в пользовательской части Joomla!. Так что, если сталкиваетесь с понятием категорий, могут иметься ввиду категории материалов, либо категории компонентов.

You have no rights to post comments

Приветствую Вас, уважаемые посетители моего блога о Joomla. В данной статье я покажу Вам, как можно быстро и безопасно избавиться от ID (идентификатор) материала в адресе ссылки в Joomla 2.5 и Joomla 3.

Как известно, движок Joomla добавляет в URL числовой идентификатор, который является, грубо говоря, порядковым номером материала или категории. В принципе, в нем нет ничего плохого, но выглядеть такая ссылка будет не очень красиво. Однако учтите, что ID - это специальный числовой номер, который присваивается каждому материалу отдельно. Служит он для уникализации ссылки в случае одинакового названия заголовков (например, у Вас есть 2 статьи с одинаковым названием - вот для их различия и существует ID). Соответственно, при его отключении, нельзя будет давать материалам одинаковые названия (только если они не будут находится в разных категориях).

Удалить идентификаторы из адреса ссылок можно с помощью специальных расширений, таких как ARTIO JoomSEF, SH404SEF и других аналогичных программ для создания красивых ЧПУ ссылок, но эти компоненты несут большую нагрузку на сервер и устанавливаются в крайнем случае. Как правило, их ставят тогда, когда на сайте используются другие компоненты, для которых не получается сделать ЧПУ ссылки стандартным SEF плагином Joomla.

Мы же будем реализовывать удаление ID из ссылок с помощью небольших модификаций в системных файлах. Главное - не забывайте сохранять данные файлы при обновлении Joomla!
Отключение ID материала в Joomla 2.5 и Joomla 3 - Вариант 1

Для всего этого нам нужно будет лишь сделать некоторые модификации файлов движка, которые помогут нам добиться нужного результата. В самой Joomla (начиная с версии 1.6) уже предусмотрена функция отключения ID материала из адреса ссылок, но для открытия этой возможности нам нужно добавить в файле: корень_сайта/administrator/components/com_content/config.xml строки:

type="radio"
default="1"
label="SEF: Удалить ID материала в ссылке?"
description="Удалить ID материала в ссылке?">


В принципе, эти строки можно добавить в любое место в данном файле, даже в самое начало (только не забудьте сохранить файл в кодировке UTF-8 без BOM, иначе вместо русских символов Вы увидите иероглифы). После добавления этих строк кода, Вы получили возможность включать и отключать ID из ссылок прямо из административной панели своего сайта. Для этого Вам нужно перейти в менеджер материалов и нажать "Настройки". И в настройках теперь у Вас будет находиться строка: "Удалить ID материала в ссылке?":

Нажимаете "Да". После этого очистите кэш сайта. Теперь ссылки в Joomla 2.5 будут отображаться без ID.


if ($count === 1) {

И заменить её на:

// then we assume it is a category. If they don"t we assume it is an article
if ($count === 1 && !$advanced) {

Внимание : Обратите внимание, что данный параметр может отличаться в разных версиях Joomla. Например, в Joomla 3 у меня было так:

if ($count === 1 {

А в Joomla 2.5 может быть вот так:

if ($count == 1 {

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

Важно: все категории должны быть привязаны к пунктам меню - если этого не будет, то могут возникнуть ошибки при генерации ссылок. Так же обратите внимание, что не будут работать ссылки, если название материала состоит из одного слова. Для решения этого косяка нужно опять открыть файл _ваш-сайт/components/com_content/router.php и найти строку:

->where($db->quoteName("alias"). " = " . $db->quote($db->quote($segment)));

И заменить её на:

->where($db->quoteName("alias"). " = " . $db->quote($segment));

Только не забудьте, что при обновлении Joomla этот файл будет заменен! Поэтому настоятельно рекомендую сохранить его в отдельном месте, чтобы потом заново не вносить изменения.

Отключение ID материала в Joomla 2.5 и Joomla 3 - Вариант 2

Второй метод так же работает на Joomla 2.5 и Joomla 3. Но его минус в том, что при каждом обновлении движка нужно будет заново вносить эти изменения или просто перезаписывать файл роутера поверх нового. Итак, в этом способе мы будем работать только с файлом _ваш-сайт/components/com_content/router.php.

Для начала найдите строку (примерно 27 строка):

$advanced = $params->get("sef_advanced_link", 0);

И замените её на:

$advanced = $params->get("sef_advanced_link", 1);

Затем найдите вот эту строку (в Joomla 2.5 - 228 строка, в Joomla 3 - 250):

$advanced = $params->get("sef_advanced_link", 0);

И замените её на:

$advanced = $params->get("sef_advanced_link", 1);

Теперь опускайтесь чуть ниже (в Joomla 2.5 - строка 228, в Joomla 3 - строка 272) и находите вот этот кусок кода:

if (strpos($segments, ":") === false)
{
$vars["view"] = "article";

return $vars;
}

И закомментируйте его (при комментировании, код перестает обрабатываться), чтобы получилось вот так:

/*if (strpos($segments, ":") === false)
{
$vars["view"] = "article";
$vars["id"] = (int) $segments;
return $vars;
}*/

Ну или полностью удалите, тут уже решать Вам. Но лучше закомментировать его, чтобы с случае чего можно было вернуть все на место.

Теперь ссылки на Вашем сайте в Joomla 2.5 и Joomla 3 будут отображаться без ID материалов. Но в Joomla 3 могут появиться ошибки 404 при использовании данного способа - чтобы избежать этого, читайте примечание ниже.

Важное примечание для Joomla 3: если при переходе по ссылкам без ID у Вас возникает 404 ошибка, то найдите в файле _ваш-сайт/components/com_content/router.php строку 376 (в разных версиях Joomla эта строка может отличаться):

->where($db->quoteName("alias") . " = " . $db->quote($db->quote($segment)));

И замените её на:

->where($db->quoteName("alias") . " = " . $db->quote($segment));

Административная панель Joomla позволяет очень быстро загружать любые файлы с компьютера. Об этом мы знаем из урока - Загрузка и сохранение файлов в Joomla 3 . Также нам известен способ вывода изображений на сайте. Но как же быть с другими файлами, к примеру pdf, doc и другими, которые необходимо представить пользователю для скачивания? Об этом в данном уроке.

В данном случае рассматривается создание ссылок на собственные файлы.

Загрузка файла

1.Все файлы, которые мы предоставляем для скачивания хранятся в разделе медиа-менеджер.

2. Первым делом, нужно определиться с папкой , куда будем загружать все наши файлы. Если их не много, то можно загружать в текущее место.

3. В появившемся окне выбираем необходимые файлы для скачивания. М ожно загружать сразу несколько файлов (ctrl).

При загрузке обращайте внимание на название: оно должно быть на англ. языке и без пробелов.

В случае если файл не допускается к загрузке, необходимо задать некоторые настройки.

Самое главное - это указать расширение файла и при необходимости размер.

В случае, если файл всё равно не загружается - используем для этого сторонний файловый менеджер.

После загрузки файла одним из способов можно ставить на него ссылку.

Создание ссылки на файл

2. Однако в отличие от ссылок из Интернета, ссылки на собственные файлы мы создаем вручную. Для этого прописываем следующий адрес: images/file_name.format .

Папка images - это корневая папка, где хранятся файлы из медиа-менеджера.

В случае если мы создавали дополнительные папки, то дописываем их в пути: images/papka_name/file_name.format


Как восстановить сайт из резервной копии и т. д. Теперь поговорим о материалах сайта.
Материалы – это самая важная часть сайта. Будь то новостной портал, корпоративный или персональный сайт, сайт адвокатской конторы или школы. Посетитель приходит на такой сайт в первую очередь за информацией, и большая часть информации содержится в материалах. Поэтому очень важно правильно размещать и упорядочивать материалы, чтобы посетителям сайта было удобно получать нужные сведения.

Для работы с информационным наполнением сайта, в Joomla используются различные расширения. Из самого слова следует, что расширения расширяют функционал, возможности CMS. Они могут быть как стандартными, т. е. входящими в официальную сборку Joomla так и продуктами сторонних разработчиков. Все расширения делятся на три части: компоненты, модули и плагины. Компоненты – это основные и наиболее функциональные расширения. При каждом обращении к сайту на Joomla, происходит обращение к какому-нибудь компоненту. Модули, в основном, требуются для отображения небольших частей контента, которые зачастую отображаются рядом с основным содержимым страницы. Плагины – это своего рода дополнения для расширений и CMS. Плагины добавляют дополнительные возможности для различных компонентов и модулей.
В этой статье мы рассмотрим работу с двумя стандартными компонентами – это «Менеджер материалов» и «Медиа-менеджер». В Joomla, основная работа с информационными материалами происходит в административной части сайта, которую по-другому называю бэкендом или админкой. Эту часть сайта обычные посетители не видят. В Joomla так же можно работать с материалами и в пользовательской части сайта, называемой фронтендом. Забегая вперед скажу, что для работы с материалами во фронтенде надо быть зарегистрированным пользователем сайта и иметь определённые права. Но об этом поговорим в одной из следующих статей. А сейчас вернёмся к работе в административной части сайта, где перейдём в меню «Материалы».

Меню «Материалы» состоит из четырех пунктов: «Менеджер материалов», «Менеджер категорий», «Избранные материалы» и «Медиа-менеджер». Первые три пункта меню относятся к стандартному компоненту «Менеджер материалов», а четвёртый пункт соответственно к стандартному компоненту «Медиа-менеджер». На первых порах может возникнуть некоторая путаница из-за названия первого пункта меню «Материалы». На мой взгляд, его было бы правильнее назвать «Менеджер статей», т. к. материалы – понятие более широкое, включающее в себя кроме текстовых ещё и медиа-материалы. Но... таков стандартный перевод. Пошли дальше. Для удобства, первые два пункта меню – «Менеджер материалов» и «Менеджер категорий» имеют по одному пункту подменю для быстрого создания статьи или категории соответственно. Удобно – не надо переходить в основной пункт меню и там выбирать кнопку «Создать». Каждый из трёх первых пунктов меню «Материалы» откроет соответствующий раздел компонента «Менеджер материалов». Например, откроем «Менеджер категорий». Выглядеть это будет так.

В пределах менеджера материалов можно быстро перейти к избранным материалами или статьям.

Получить доступ к материалам можно не только из меню «Материалы», но и из панели управления сайтом. Так как основная работа с сайтом это работа с материалами, то разработчики для быстрого доступа вывели на панель управления кнопки: «Менеджер категорий», «Менеджер материалов», «Медиа-менеджер» и кнопку «Создать материал».

В этой статье мы познакомились с общими сведениями по работе с материалами сайта на Joomla. Переходим к . Следите за новостями или подпишитесь на рассылку .

Ещё статьи о Joomla 2.5

    • В Joomla, в версии 2.5 появилось полезное нововведение – CAPTCHA . CAPTCHA это аббревиатура, расшифровывающаяся как Completely Automated Public Turing test to tell Computers and Humans Apart. Что переводится как «Полностью автоматизированный...

    • Макеты на основе этой системы предоставляются в достаточно широком ассортименте. Тех, кто желает иметь собственный интернет-ресурс, привлекает огромный выбор расширений, легкость управления. Шаблоны сайтов используют как разработчики...

    • В этой статье мы поговорим о карте сайта, а точнее о том, как создать карту сайта на Joomla в форматах HTML и XML. Карта сайта в формате HTML представляет собой страницу со ссылками на материалы сайта. Она помогает посетителям...

Что делает: каждому материалу можно присвоить несколько категорий. При просмотре материала будут показаны все категории, в которых содержится материал (хотя это уже на ваше усмотрение, можете и не показывать). При просмотре категорий дубликатов, естественно, никаких нет.

Хак требует изменения как базы данных так и нескольких файлов самой Joomla, так что перед тем как редактировать файлы, сделайте их копии.

Шаг 1 - Выполнить скрипт для БД, где # - префикс таблиц в вашей БД. Лучше всего это делать через phpMyAdmin .

ALTER TABLE `#_content` ADD `catid2` INT (11) NOT NULL DEFAULT "0" AFTER `catid` ;
ALTER TABLE `#_content` ADD `catid3` INT (11) NOT NULL DEFAULT "0" AFTER `catid2` ;
ALTER TABLE `#_content` ADD INDEX (`catid2`);
ALTER TABLE `#_content` ADD INDEX (`catid3`);

Шаг 2 - Добавляем в админке возможность при создании/редактировании материала указывать несколько категорий
Редактируем файл administrator\components\com_content\views\article\tmpl\edit.php
Ищем

form->getInput("catid"); ?>

Добавляем после

form->getInput("catid2"); ?>form->getInput("catid3"); ?>

Редактируем файл administrator\components\com_content\models\forms\article.xml
Ищем

label="JCATEGORY"
class="inputbox" required="true"
>

Добавляем после


>

label="JCATEGORY" description="JFIELD_CATEGORY_DESC"
class="inputbox" required="false" default="0"
>

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

escape($item->category_title); ?>

и заменяем на

escape($item->category_title);
if ($item->category_title2) echo "


".$this->escape($item->category_title2);
if ($item->category_title3) echo "
".$this->escape($item->category_title3);
?>

В описанном варианте выводится список категорий просто в столбик. Разделение сделано горизонтальной линией для удобства. Удобно для небольшого колличества категорий, не более 3х.

Редактируем файл administrator\components\com_content\models\articles.php
Ищем

// Join over the categories.
$query->select("c.title AS category_title");
$query->join("LEFT", "#__categories AS c ON c.id = a.catid");

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


$query->
$query->
$query->
$query->

$query->where("c.lft >= ".(int) $lft);
$query->where("c.rgt <= ".(int) $rgt);

и заменяем на

$query->where("(c.lft >= ".(int) $lft." AND c.rgt <= ".(int) $rgt.") OR (sister2.lft >= ".(int) $lft." AND sister2.rgt <= ".(int) $rgt.") OR (sister3.lft >= ".(int) $lft." AND sister3.rgt <= ".(int) $rgt.")");

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

$query->select($this->getState(


"a.mask, a.catid, a.created, a.created_by, a.created_by_alias, " .

Заменяем на

$query->select($this->getState(
"item.select", "a.id, a.asset_id, a.title, a.alias, a.title_alias, a.introtext, a.fulltext, " .
// If badcats is not null, this means that the article is inside an unpublished category
// In this case, the state is set to 0 to indicate Unpublished (even if the article state is Published)
"CASE WHEN badcats.id is null THEN a.state ELSE 0 END AS state, " .
"a.mask, a.catid, a.catid2, a.catid3, a.created, a.created_by, a.created_by_alias, " .
// use created if modified is 0

// Join on category table.
$query->select("c.title AS category_title, c.alias AS category_alias, c.access AS category_access");
$query->join("LEFT", "#__categories AS c on c.id = a.catid");

Добавляем после

// Join over the categories to get other category titles
$query->select("sister2.title as category_title2");
$query->join("LEFT", "#__categories as sister2 ON sister2.id = a.catid2");
$query->select("sister3.title as category_title3");
$query->join("LEFT", "#__categories as sister3 ON sister3.id = a.catid3");

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

$url = "item->catslug))."">".$title."";?>
get("link_category") and $this->item->catslug) : ?>


Заменяем на

$title2 = $this->escape($this->item->category_title2);
$title3 = $this->escape($this->item->category_title3);
$url = "item->catid)) . "">" . $title . "";
$url2 = "item->catid2)) . "">" . $title2 . "";
$url3 = "item->catid3)) . "">" . $title3 . "";
?>
get("link_category")) : ?>
if ($this->item->category_title2) echo ", ".$url2;
if ($this->item->category_title3) echo ", ".$url3;
?>

if ($this->item->category_title2) echo ", ".$title2;
if ($this->item->category_title3) echo ", ".$title3;

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

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


$query->select(
$this->getState(
"list.select",

"a.catid, a.created, a.created_by, a.created_by_alias, " .

Заменяем на

// Select the required fields from the table.
$query->select(
$this->getState(
"list.select",
"a.id, a.title, a.alias, a.title_alias, a.introtext, " .
"a.checked_out, a.checked_out_time, " .
"a.catid, a.catid2, a.catid3, a.created, a.created_by, a.created_by_alias, " .

// Join over the categories to get parent category titles
$query->select("parent.title as parent_title, parent.id as parent_id, parent.path as parent_route, parent.alias as parent_alias");
$query->join("LEFT", "#__categories as parent ON parent.id = c.parent_id");

Добавляем после

// Join over the categories to get other category titles
$query->select("sister2.title as category_title2");
$query->join("LEFT", "#__categories as sister2 ON sister2.id = a.catid2");
$query->select("sister3.title as category_title3");
$query->join("LEFT", "#__categories as sister3 ON sister3.id = a.catid3");

$categoryEquals = "a.catid ".$type.(int) $categoryId;

Заменяем на

$categoryEquals = "a.catid ".$type.(int) $categoryId." OR a.catid2 ".$type.(int) $categoryId." OR a.catid3 ".$type.(int) $categoryId;

Следующзее изменение добавлено 20.03.2015

$query->where("a.catid ".$type." (".$categoryId.")");

заменяем на

$query->where("a.catid ".$type." (".$categoryId.") OR a.catid2 ".$type." (".$categoryId.") OR a.catid3 ".$type." (".$categoryId.")"); Редактируем файл components\com_content\views\category\tmpl\blog_item.php
найти $url = "item->catid)) . "">" . $title . ""; ?>
get("link_category")) : ?>


Заменить на

$title2 = $this->escape($this->item->category_title2);
$title3 = $this->escape($this->item->category_title3);
$url = "item->catid)) . "">" . $title . "";
$url2 = "item->catid2)) . "">" . $title2 . "";
$url3 = "item->catid3)) . "">" . $title3 . "";
?>
get("link_category")) : ?>
if ($this->item->category_title2) echo JText::sprintf("COM_CONTENT_CATEGORY", $url2);
if ($this->item->category_title3) echo JText::sprintf("COM_CONTENT_CATEGORY", $url3);
?>

if ($this->item->category_title2) echo JText::sprintf("COM_CONTENT_CATEGORY", $title2);
if ($this->item->category_title3) echo JText::sprintf("COM_CONTENT_CATEGORY", $title3);

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

Шаг 6 - добавляем возможность указания нескольких категорий в fronted редакторе (если нужно)
Редактируем файл components\com_content\models\forms\article.xml
Ищем

id="catid"
name="catid"
type="categoryedit"
extension="com_content"
label="JCATEGORY"
description="JFIELD_CATEGORY_DESC"
class="inputbox"
required="true">

Добавляем после

id="catid2"
name="catid2"
type="categoryedit"
extension="com_content"
label="JCATEGORY"
description="JFIELD_CATEGORY_DESC"
class="inputbox"
default="0"
required="false">


id="catid3"
name="catid3"
type="categoryedit"
extension="com_content"
label="JCATEGORY"
description="JFIELD_CATEGORY_DESC"
class="inputbox"
default="0"
required="false">

Редактируем файл components\com_content\views\form\tmpl\edit.php
найти

form->getInput("catid"); ?>

заменить на

form->getInput("catid"); ?>form->getInput("catid2"); ?>form->getInput("catid3"); ?> Всё, теперь можно работать.