Категории и материалы. Теория - множественная кольцевая перелинковка материалов категории Создать архив материалов в джумла 2.5

Как я и обещал, начиная с этой статьи, мы будем знакомиться с различными типами меню в Joomla . И начнём мы с самого первого - это "Список материалов в архиве ".

Если Вы не знаете, то прочитайте сперва соответствующую статью про это. Так же, если Вы не знаете, то тоже сначала надо про это прочитать.

Теперь же давайте приступим к разбору типа меню - "Список материалов в архиве ":

Различные настройки слева мы с Вами уже рассматривали в статье: . А вот параметры, находящиеся справа, различаются в зависимости от типа меню. И сейчас мы с Вами познакомимся с параметрами для "списка материалов в архиве ":

Как мы видим, имеются три блока. Начнём с блока: "Параметры - Основные ":

  • Порядок . Здесь из выпадающего списка надо выбрать вариант сортировки материалов при их выводе на страницу.

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

  • Показывать ссылки на закрытый контент . Есть ссылки, которые открыты только для зарегистрированных пользователей (думаю, Вы такое часто встречали). И вот этой опцией можно показывать все посетителям, что ссылки существуют, и выводить их. Однако, если посетитель не авторизован, то он всё равно перейти по ссылке не сможет - его попросят сначала авторизоваться.
  • Показать текст заголовка . Показывать или нет названия статей.
  • Заголовок как ссылка . Отображать заголовок простым текстом или в виде ссылки на статью.
  • Показывать вступительный текст . Эта настройка позволяет выводить вступительный текст материалов на страницу.
  • Название раздела . Отобразить или спрятать название раздела, которому принадлежит статья.
  • Название раздела как ссылка . Отображать название раздела ссылкой или обычным текстом.
  • Название категории . Показать или нет название категории, которой принадлежит статья.
  • Название категории как ссылка . Показывать название категории как ссылку или простым текстом.
  • Имя автора . Показывать или нет автора статьи.
  • Дата и время создания . Выводить дату и время создания статьи или, наоборот, не выводить.
  • Дата и время последнего изменения . Выводить или нет дату и время последнего изменения статьи.
  • Показывать навигацию . Показывать содержание статьи или нет. Имеются ввиду материалы, которые состоят из нескольких страниц.
  • Ссылка подробнее . Если поставить "Показать " и у материала есть основной текст, то появится эта ссылка. Если хотя бы одно из условий не выполняется, то ссылка "Подробнее " не отобразится.
  • Голоса/Рейтинг статьи . Показать рейтинг статьи, а также дать возможность пользователям ставить ей оценку.
  • Иконки . Показывать иконки печати, PDF и E-mail или же нет.
  • Иконка PDF . Показать или спрятать иконку PDF .
  • Иконка печати . Показать или спрятать иконку вывода версии для печати статьи.
  • Иконка E-mail . Вывести иконку для возможности отправки статьи по E-mail другу, или же, наоборот, не выводить.
  • Хиты . Показать или спрятать количество просмотров статьи.
  • Показывать в RSS . Тут можно выбрать либо показывать только вступительный текст, либо только основной. Дело вкуса, но советую показывать только вступительный, чтобы человек, подписанный на Вашу RSS-ленту , пришёл на Ваш сайт дочитать статью.

Третий и последний блок - это "Параметры - Система ":

  • Заголовок страницы . Очень важная опция, в которой Вам надо поставить значение тега <title > на странице, куда будет вести пункт меню.
  • Показывать заголовок страницы . Показывать или нет заголовок страницы не только в теге <title >, но уже непосредственно и в контенте сайта.
  • Суффикс класса страницы . Если Вы хотите сделать индивидуальный дизайн, то для предупреждения путаницы с другими CSS-классами , Вам надо указать уникальный суффикс, который Вы будете использовать при оформлении страницы.
  • Картинка меню . Здесь можно выбрать картинку, которая будет располагаться рядом с названием пункта меню.
  • SSL включено . Эта опция определяет: нужно ли требовать при переходе по этой ссылке защищённого соединения. В большинстве случаев, надо оставлять "Игнорировть ".

Вот и рассмотрены нами все настройки при создании пункта меню типа: "Список материалов в архиве ". В следующей статье я продолжу описывать этот процесс, но уже с другими типами меню Joomla .

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

Примечание : В рамках данной статьи ограничением является категория. И это связано с тем, что для кольцевой перелинковки материалов всего сайта нужен более сложный механизм, учитывающий взаимосвязи самих категорий. Возможно, в рамках следующих статей будет написан модуль и для общего случая. Но, на текущий момент, все последующее рассуждение пойдет именно для материалов категории в CMS Joomla 2.5.

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

Примечание : Данная идея была встречена на форуме MaulTalk. Но, отсутствие каких-либо реализаций в интернете (по крайней мере в поисковиках ничего подобного не встретилось) привело как к реализации модуля, так и к написанию этой статьи.

А теперь, чуть более простым и понятным языком.

Немного о самой кольцевой перелинковке

Перелинковку можно организовать разными методами: большим количеством ссылок на продвигаемую страницу, связью "снизу-вверх"/"сверху-вниз", хаотично проставленными ссылками, кольцом, кубом и многими другими методами. Каждый из этих методов преследует свои цели, и нельзя сказать, что какой-то из них лучше или хуже. Все зависит от задачи.

В данном случае, основной интерес сосредоточен на кольцевой перелинковке, так как она дает достаточно много плюсов:

  1. Равномерное перераспределение веса. Т.е. весь внутренний вес и вес, который приходит с других сайтов, планомерно распределяются между всеми материалами. При перерасчете веса, каждый добавленный материал будет намного быстрее набирать собственный вес
  2. Все добавленные материалы как минимум имеют ссылки с нескольких других страниц сайта. Т.е. даже если поисковая система не добралась до этих материалов, или просто не захотела их включать в индекс, остается вероятность, что заголовок может привлечь посетителя, и материал не останется без внимания
  3. Простота понимания, даже при большом количестве материалов вы будете знать ответы на вопросы "что? куда? зачем?"
  4. Упорядоченность. Не секрет, что любые блоки со ссылками видят не только поисковые системы, но и посетители (И иногда даже щелкают по этим ссылкам). А это значит, что потенциально вы можете провести их по всем материалам сайта, с какой бы станицы не стартовал посетитель
  5. Связанность релевантных материалов. Отсутствия жесткого требования к порядку организации ссылок. Располагайте рядом наиболее ожидаемые материалы, а не те, которые требует схема

Конечно, у данного метода есть свои проблемы. Но, есть и свои решения.

Суть проблемы: выпадение из индекса, управляемость, включение в кольца

Достаточно часто в статьях "Как правильно оптимизировать ваш сайт" / "Используем перелинковку" / и т.д., употребляется такое слово как "кольцо". Суть метода достаточно проста. Страницы ссылаются таким образом, что образуют кольцо (см. рисунок ниже).

С другой стороны, у такого механизма есть несколько проблем. Две достаточно небольшие и одна большая. Небольшие - это управляемость в общем виде и включение новых материалов в кольца. Большая - выпадение из индекса одного из материалов. В случае управляемости, речь больше идет о технической стороне, т.е. по какому принципу организуется кольцо, и какие необходимы условия, чтобы материал был добавлен. В случае включения новых материалов, речь идет о действиях автора, т.е. что необходимо сделать, чтобы материал был добавлен в кольцо.

Если проблемы управляемости и включения материалов решаемы собственными силами, то для случае выпадения из индекса не все так просто. Как только одна их страниц выпадает, кольцо разрывается (См. рисунок).

Как видно, после выпадения страницы "M2" соседние материалы больше не передают вес по кольцу. В случае выпадения одной страницы на сайте с небольшим количеством материалов, это не будет так критично. Так как вы быстро сможете найти выпавшую страницу, и предпринять все необходимые действия, чтобы вернуть ее обратно в индекс. В крайнем случае, вы всегда можете подкорректировать кольцо.

Но, попробуйте представить, что выпала не одна страница, а несколько. Да, еще и материалов на сайте стало достаточно много. Найти все выпавшие страницы будет уже не так просто. Да, и не факт, что вы сможете оперативно обнаружить выпадение страниц.

Что же делать?

И именно тут возникает мысль. А что если сделать не одно, а несколько колец из материалов? Да, и сделать это так, чтобы не заставлять автора статьи бегать по всему списку материалов в поисках "Куда же эти ссылки вставить?", а возложить эти обязанности на сам сайт.

И самый простой и понятный вариант, который приходит в голову, - это сделать так, чтобы каждый материал ссылался на несколько предыдущих и следующих страниц (См. на рисунке выше). Тогда в случае выпадения какого-либо материала будет следующая картина:

Не смотря на то, что материал "Мат. 35" выпал, остальные кольца все же сохранились (синие стрелки показывают на как минимум одно сохранившееся кольцо).

Такая перелинковка будет не только минимизировать риск потери веса при выпадении страниц, но и оставаться управляемой. Вы всегда сможете сказать "куда и как" будет ссылаться материал. При этом добавление и удаление материалов с сайта, будет оставаться предсказуемым и происходить без участия автора.

Практика - Множественная кольцевая перелинковка материалов категории

На практике оказалось, что не все так просто. Давайте рассмотрим наиболее известные модули и плагины (без названий, только механизмы).

Примечанием : Напоминаем, что основной фокус при рассмотрении модулей и плагинов - это организация кольца из материалов. Поэтому другие достоинства и недостатки модулей не будут рассмотрены.

Существуют модули в стиле "Похожие статьи", которые, в основном, полагаются на метатеги. И чаще всего это keywords. Этот механизм очень сильно смахивает на обычное облако тегов. И даже, если не думать об этом, и быть готовым наполнить keywords, то стоит взглянуть в настройки, и вам станет все ясно. В основном, речь идет либо о красивом выводе превьюшек, либо о множественной фильтрации и сортировке. Организовать таким способом кольцо - нереально.

Существуют плагины "Следующие/Предыдущие". Их основная задача "провести пользователя от и до". Такие плагины организуют лишь цепочку от начала до конца. Первый и последний материалы не будут ссылаться друг на друга. Поэтому кольцо построить нет возможности.

Примечание : Факт, но, к сожалению, в стандартной комплектации Joomla 2.5 выводить заголовки статей в плагине "Контент - Навигация по страницам" нельзя.

Все модули, каким-либо образом содержащие слово "Случайные", сразу отпадают, так как вероятность создать такими инструментами кольца или какую-либо понятную структуру - стремится к нулю. Плюс ко всему, такие модули приводят к появлению мигающих ссылок, что может негативно сказаться на ранжировании поисковыми системами.

Если смотреть в сторону модулей для контекстной перелинковки, то их основная задача в поднятии определенных страниц по определенным запросам. Конечно, организовать кольцо такими модулями можно, но это будет стоит вам кучу нервов и бессонных ночей.

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

Примечание : Возможно, под эти цели существуют специальные инструменты, но, к сожалению, они так и не нашлись.

Примечание : Конечно, ручным способом все же кольца можно создать, но представьте сколько сил от вас будет требовать не только добавление, но и отслеживание, что кольцо нигде не разорвалось.

Пишем свой модуль множественной перелинковки кольцами

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

Первое с чего необходимо начать - это придумать название. Не очень сильно мудрствуя, назовем модуль "Кольцевая перелинковка материалов категории". Техническое же имя будет "mod_circle_link_mat_by_cat".

Следующее, что необходимо сделать, это составить стандартную структуру файлов.

  • css
    • mod_circle_link_mat_by_cat.css
    • index.html
  • language
    • ru-Ru
      • mod_circle_link_mat_by_cat.ini
      • mod_circle_link_mat_by_cat.sys.ini
      • index.html
    • index.html
  • tmpl
    • default.php
    • index.html
  • helper.php
  • index.html

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

  • index.html - пустой файл, который находится во всех каталогах, включая основной каталог модуля
  • mod_circle_link_mat_by_cat.php - точка входа модуля. Этот файл будет запускаться первым при запуске модуля, и он же будет запускать остальные файлы (кроме языков и файла настройки)
  • mod_circle_link_mat_by_cat.xml - файл конфигурации, который включает все мета-настройки модуля. В данном случае используются:
    • название модуля и его описание
    • файлы, которые нужно скопировать
    • различные параметры, которые будут выведены в административной панели
    • подключение локализации
  • mod_circle_link_mat_by_cat.css - файл со стилями. Он пустой, и создан только с одной целью, чтобы в последствие, при подгонке стилей под ваш сайт (если таковое потребуется), вам не надо было смешивать общие стили сайта со стилями модуля
  • mod_circle_link_mat_by_cat.ini - файл локализации
  • mod_circle_link_mat_by_cat.sys.ini - файл локализации
  • default.php - шаблон отображения. Используется для генерации html-кода, который будет отображаться внутри блока с модулем
  • helper.php - в этот файл будут выноситься все необходимые функции для получения данных

Файл конфигурации - mod_circle_link_mat_by_cat.xml

Файл конфигурации имеет достаточно простую и понятную структуру. Вначале идет описание самого модуля, включая такие поля как автор и описание. Затем в теге "files" перечисляется структура файлов и папок, которую необходимо скопировать при установке. После чего следует тег "languages" с информацией о месторасположении файлов локализации в модуле. Ну и под конец, идет секция "config", в которой определяются необходимые параметры.

Если все секции, кроме "config", содержат чисто технический характер, и их можно просто скопировать, то для секции с параметрами необходимо добавить небольшое пояснение.

  • isMain - это чекбокс, который запрещает вывод данных на главной странице. По умолчанию включен
  • exceptCat - строка, в которой через запятую перечисляются все ID категорий, для которых модуль не должен выводить ссылки. Например, категория "Uncategorised". По умолчанию, поле пустое
  • prev_mat_number - количество предыдущих материалов (с учетом кольца), которые необходимо вывести. По умолчанию, значение 3
  • next_mat_number - количество следующих материалов(с учетом кольца), которые необходимо вывести. По умолчанию, значение 3

Примечание : Различные имена в виде "MOD_CIRCLE_MAT_BY_CAT_ISMAIN" - это константы, которые будут взяты из файлов локализации.

Кольцевая перелинковка материалов категории FBT 1.0.0 27 Июня 2014 mod_circle_link_mat_by_cat.xml mod_circle_link_mat_by_cat.php index.html helper.php tmpl css language ru-RU/ru-RU.mod_circle_link_mat_by_cat.ini ru-RU/ru-RU.mod_circle_link_mat_by_cat.sys.ini

Точка входа модуля - mod_circle_link_mat_by_cat.php

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

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

Получение данных - это достаточно объемная задача. Именно поэтому она была вынесена в отдельный файл helper.php. В текущем файле только вызов функции "получить список". Ну, и в самом конце, вызов шаблона для составления html-кода. Каких-то особых сложностей здесь нет.

addStylesheet(JURI::root(true) . "/modules/".$module_name."/css/".$module_name.".css"); // Параметры $prevCount = $params->get("prev_mat_number"); $nextCount = $params->get("next_mat_number"); $idMat = JRequest::getVar("id",""); $idCat = $helper->getSection($idMat); // Проверка для главной страницы $menu = &JSite::getMenu(); // Исключаемые категории $exceptCat = explode (",", $params->get("exceptCat")); $isInExceptCat = false; // Проверяем категорию на исключенность $countExceptCat = count ($exceptCat); for($i = 0; $i < $countExceptCat; $i++) { if ((int) $exceptCat[$i] == $idCat) { $isInExceptCat = true; break; } } // Проверяем параметры if(!$isInExceptCat && ($params->get("isMain") != "1" or $menu->getActive()!= $menu->getDefault())) { // Получаем список $showList = $helper->getList($idMat, $idCat, $prevCount, $nextCount); // Выводим через шаблон require (JModuleHelper::getLayoutPath($module_name, $params->get("layout", "default"))); } ?>

Файлы локализации - mod_circle_link_mat_by_cat.ini

Файлы локализации строятся простым способом. Перечислением пар "ключ" = "значение". Каких-то сложных мест тут нет.

Примечание : Настоятельно рекомендуем, при составлении имен использовать уникальные имена ключей, чтобы случайно не пересечься с другими локализациями. Например, при составлении вы можете использовать конструкцию "{ИМЯ_МОДУЛЯ} + _ + {КЛЮЧ}".

Файл mod_circle_link_mat_by_cat.ini

MOD_CIRCLE_MAT_BY_CAT="CircleLinkByCat" MOD_CIRCLE_MAT_BY_CAT_PREV_MAT_LBL="Кол-во пред. материалов" MOD_CIRCLE_MAT_BY_CAT_PREV_MAT_LBL_DESC="Укажите желаемое количество предыдущих материалов" MOD_CIRCLE_MAT_BY_CAT_NEXT_MAT_LBL="Кол-во след. материалов" MOD_CIRCLE_MAT_BY_CAT_NEXT_MAT_LBL_DESC="Укажите желаемое количество следующих материалов" MOD_CIRCLE_MAT_BY_CAT_ISMAIN="Исключить главную" MOD_CIRCLE_MAT_BY_CAT_ISMAIN_DESC="Если вы не хотите, чтобы модуль подключался на главной странице, то выставьте пункт в значение ДА" MOD_CIRCLE_MAT_BY_CAT_EXCEPTCAT="Исключить категории" MOD_CIRCLE_MAT_BY_CAT_EXCEPTCAT_DESC="Если на вашем сайте существуют категории, которые необходимо исключить, то введите их ID через запятую"

Файл mod_circle_link_mat_by_cat.sys.ini

MOD_CIRCLE_MAT_BY_CAT="Кольцевая перелинковка материалов категории"

Шаблон отображения - default.php

Вся задача шаблона сводится к простому выводу списка материалов в теге ul. Если у вас используется специфическая верстка, например, через div-вы, то вы всегда можете подправить данный код.

0) { ?>

Составляем хэлпер - helper.php

Данный файл достаточно большой, в нем порядка 250 строк. Поэтому основное внимание будет сосредоточено на двух SQL-запросах и одном куске кода, формирующего реальные ссылки на материалы. Полный же исходный файл вы можете посмотреть в архиве модуля.

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

Код для получения предыдущих статей:

/* получаем предыдущие статьи */ select id, link, title, access, alias, 0 as afterCircle from (select * from (select id, "" as link, title, access, alias from #__content where /* все предыдущие статьи в категории в опубликованном состоянии */ catid = ".$idCat." and id < ".$idMat." and state > 0 /* дата публикации не закончилась */ and (publish_down is null or publish_down > < NOW()) /* нужно получать с конца списка */ order by id desc limit 0,".$prevCount.") sort order by id asc) a union /* получаем данные для случая, если предыдущих статей меньше, чем надо */ select id, link, title, access, alias, 1 as afterCircle from (select * from (select id, "" as link, title, access, alias from #__content where /* все последующие статьи в категории в опубликованном состоянии */ catid = ".$idCat." and id > ".$idMat." and state > 0 /* дата публикации не закончилась */ and (publish_down is null or publish_down >= NOW()) /* материал опубликован */ and (publish_up is null or publish_up < NOW()) /* нужно получать с конца списка */ order by id desc limit 0,".$prevCount.") sort order by id desc) b

Запрос может показаться несколько сложным и большим, но на самом деле все очень просто. Первая часть, до union, выбирает из всех материалов только предыдущие для данной статьи. Вторая часть, после union, нужна для получения последних материалов. Т.е. как бы продолжается поиск материалов по кольцу.

Пример . Допустим, в категории есть 5 материалов:

  • А - Б - В - Г - Д.

Для простоты, они следуют друг за другом в алфавитном порядке. И вы хотите вывести два предыдущих материала для статьи "Б". В таком случае, предыдущими статьями являются как "А", так и "Д" (так как "Д" является последним материалом). Материал "А" найдется первой частью запроса, а "Д" найдется второй частью запроса.

Для получения следующих материалов, SQL-запрос отличается только проверками и порядком сортировок. Сам код:

/* получаем следующие статьи */ select id, link, title, access, alias from (select * from (select id, "" as link, title, access, alias from #__content where /* все следующие статьи в категории в опубликованном состоянии */ catid = ".$idCat." and id > ".$idMat." and state > 0 /* дата публикации не закончилась */ and (publish_down is null or publish_down >= NOW()) /* материал опубликован */ and (publish_up is null or publish_up < NOW()) /* нужно получать с начала списка */ order by id asc limit 0,".$nextCount.") sort order by id asc) a union /* получаем данные для случая, если следующих статей меньше, чем надо */ select id, link, title, access, alias from (select * from (select id, "" as link, title, access, alias from #__content where /* все предыдущие статьи в категории в опубликованном состоянии */ catid = ".$idCat." and id < ".$idMat." and state > 0 /* дата публикации не закончилась */ and (publish_down is null or publish_down >= NOW()) /* материал опубликован */ and (publish_up is null or publish_up < NOW()) /* нужно получать с начала списка */ order by id asc limit 0,".$nextCount.") sort order by id asc) b

Как видите, основное отличие только в обратном порядке поиска и сортировки данных.

Если рассматривать, пример, то для статьи "Г" двумя последующими материалами являются: "Д" и "А" (так как "А" является первым в списке).

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

// Для всех полученных элементов добавляем link if(count($showList) > 0) { $countShowList = count ($showList); for ($i = 0; $i < $countShowList; $i++) { /* Получаем пункт меню */ $itemid = &JSite::getMenu()->getItems("link", "index.php?option=com_content&view=article&id=".($showList[$i]->id), true); /* Если пункт меню существует, то формируем ссылку для него */ if(!empty($itemid)) { $showList[$i]->link = JRoute::_("index.php?Itemid=".$itemid->id); } /* Если пункта меню не существует, то формируем ссылку с учетом SEF */ else { /* Получаем пункт меню для категории */ $catitemid = JSite::getMenu()->getItems("link", "index.php?option=com_content&view=category&id=".$idCat, true); /* Если пункт меню существует, то формируем ссылку для него */ if(!empty($catitemid)) $showList[$i]->link = JRoute::_("index.php?option=com_content&view=article&id=".($showList[$i]->id).":".($showList[$i]->alias)."&catid=".$idCat."&Itemid=".$catitemid->id); /* Если пункта меню не существует, то формируем ссылку с учетом SEF */ else $showList[$i]->link = JRoute::_("index.php?option=com_content&view=article&id=".($showList[$i]->id).":".($showList[$i]->alias)."&catid=".$idCat); } } }

Вся загвоздка заключается в том, что при обращении к материалу через пункт меню, для него формируется совершенно другая ссылка (это часто применяемый способ, чтобы избавиться от ID материала в Url). При этом важно, чтобы в конструкции "JRoute::_("index.php?Itemid=".$itemid->id)" параметр "Itemid" писался с учетом регистра. Если вы напишите не "Itemid", а "itemid", то на выходе вы получите страшного вида ссылку. С чем это связано? Сложно сказать, но факт остается фактом, параметр регистрозависимый.

Теперь все, что нам осталось, это заархивировать файлы в Zip-архив. Для этого можете использовать бесплатные архиваторы . И все, модуль готов!

Устанавливаем и настраиваем полученный модуль

После всех проделанных трудов, осталось установить и настроить модуль.

Установка достаточна проста. Все что вам нужно - это открыть "Менеджер расширений" и загрузить архив с модулем.

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

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

Теперь необходимо настроить модуль. Щелкаем левой кнопкой мыши на модуле. И переходим к настройке.

Первым делом необходимо настроить основные параметры, а именно: указать позицию модуля, изменить состояние на "опубликовано" и определиться с вопросом "Будете ли вы выводить название модуля?".

Теперь необходимо перейти к настройке стандартного блока "Привязка к пунктам меню". Сама настройка ничем не отличается от настройки любого другого модуля. В данном случае был выбран пункт "На всех страницах".

Со стандартными параметрами закончено. Производим настройку параметров самого модуля. Указываем будет ли модуль отображаться на главной. Перечисляем исключаемые категории. Например, указываем ID категории "Uncategorised" (для каждого сайта данная категория может иметь разный ID, поэтому вначале зайдите в "менеджер категорий" и найдите нужную). Выбираем количество предыдущих и следующих материалов.

Рейтинг 4.83 (9 Голосов)


В предыдущей статье мы познакомились с общими сведениями о материалах в Joomla . Теперь подробнее познакомимся с категориями материалов. И для этого перейдём в «Менеджер категорий». Категории материалов нужны для систематизирования информации и удобной её подачи пользователям сайта. Категории – это своего рода папки для материалов (статей). Определённая группа статей относится к определённой категории. Например, можно создать категорию «Спорт», которая будет содержать статьи, относящиеся к спортивной тематике или можно создать категорию «Новости», содержащую новостные статьи. Категории могут содержать подкатегории, для более точного систематизирования материала. Например, категория «Новости» может содержать вложенную категорию (подкатегорию) «Краткие новости», а категория «Спорт» может содержать подкатегорию «Плавание». Как уверяют разработчики Joomla, вложенность категорий неограниченна. Если материалы категоризированы (разбиты по категориям), то с ними проще работать и их можно выводить на сайте одним из удобных для восприятия посетителей способов. Например, в виде блога категории. О том, как это сделать мы поговорим в статье, посвящённой работе с меню.

В процессе инсталляции Joomla 2.5 мы устанавливали демо-материалы, теперь они нам пригодятся. Посмотрите самостоятельно на структуру категорий демо-материалов и продумайте структуру своего сайта. Даже если вы планируете сделать сайт из пяти страниц, то всё равно полезно ввести категории. Скажем так – «на вырост».
Теперь давайте познакомимся с инструментами для работы с категориями.

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

В левой части этого окна заполнить некоторые поля.
Заголовок. Это поле обязательное, оно помечено красной звёздочкой. Если не заполнить заголовок, то категория не будет сохранена
Алиас. Псевдоним заголовка. Это поле не обязательное. Его рекомендуется заполнить в том случае, если вы хотите указать своё название псевдонима, отличное от написания заголовка в транслите. Дело в том, что если в общих настройках сайта включено создание SEF ссылок (смотрим «Общие настройки сайта на Joomla»), то при сохранении категории, Joomla автоматически заполнит его сама, переведя заголовок категории в транслит.
Следует помнить, что если переместить категорию в корзину, а затем создать категорию с таким же заголовком, то Joomla откажется её сохранять т. к. алиасы у новой категории и категории в корзине будут одинаковыми, а это недопустимо.
Родитель. Это поле для выбора родительской категории. Если нужно создать подкатегорию, то в этом поле выбирается уже существующая категория или подкатегория. Она будет считаться родительской для создаваемой категории. Если создается обычная категория, не являющаяся ничьей подкатегорией, то в этом поле ничего не выбирается и остаётся значение по умолчанию «Нет родителя»
Состояние. Это поле выбора имеет четыре значения: «Опубликовано», «Не опубликовано», «В архиве» и «В корзине», которые соответствуют четырём возможным состояниям материала. Если выбрано значение по умолчанию «Опубликовано», то это значит, что категория включена и все опубликованные в ней материалы будут показываться (публиковаться) на сайте. Если выбрать значение «Не опубликовано», то все материалы, входящие в эту категорию будут сняты с публикации на сайте (выключены). Выбрав состояние «В архиве» мы переместим материалы данной категории в архив. Материалы не будут удалены или выключены и их можно вывести в специальном разделе сайта. Состояние «В корзине» говорит само за себя – это значит, категория удалена. Но категория не удалена совсем и её можно восстановить на сайте, изменив состояние. Чтобы удалить материал совсем – нужно очистить корзину. Как это сделать, написано ниже.
Доступ. В этом поле определяется доступ к материалам категории для различных групп пользователей. В 90% случаев доступ к категории даётся «Для всех». Мы же хотим, чтобы наши материалы видело как можно большее количество людей. В остальных 10% случаев для некоторых материалов сайта устанавливается специальный доступ, только для избранных. Но это тема отдельной статьи. Оставим значение этого поля по умолчанию.
Права. В этом поле находится кнопка «Установить разрешения», нажав на которую мы попадём в нижнюю часть окна, где можно установить права доступа для различных групп пользователей сайта. Описание настройки прав пользователей выходит за рамки этой статьи и будет описано позже. Сейчас это не важно, поэтому пропускаем этот пункт.
Язык. Это поле имеет значение в многоязыковых сайтах. Будут ли материалы категории отображаться на сайте при переключении последнего на тот или иной язык. Для одноязычного сайта оставляем значение по умолчанию «Все».
ID. Это поле недоступно для редактирования и заполняется автоматически. ID – это уникальный идентификатор категории. До сохранения категории id всегда равен 0. Во время сохранения категории Joomla присвоит ей последний свободный идентификатор.
Описание. В это поле вводится информация, которая может быть отображена на сайте при выводе материалов категории. В этом поле присутствуют две кнопки: «Материал» и «Изображение». Кнопка «Материал» вставляет в описание категории гиперссылку на существующий материал. Кнопка «Изображение» соответственно вставляет какое-либо изображение в описание категории.
В правой части окна находятся панель управления категории и три раздела: «Параметры публикации», «Основные параметры» и «Метаданные».

Параметры публикации категории содержат только одно поле «Автор». Если нужно явно указать автора категории, то это можно сделать с помощью кнопки «Выбрать пользователя». Если оставить это поле пустым, то при сохранении категории, Joomla выберет текущего пользователя.
В разделе «Основные параметры» категории можно выбрать: альтернативный макет для отображения материалов категории, изображение для категории и написать примечание к категории. В отличие от описания категории, примечание нигде не публикуется и не выводится кроме бэкенда.
Поля в разделе «Метаданные» заполняются информацией, которая требуется поисковым системам.

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

Если нажать кнопку «Сохранить», Joomla сохранит нашу новую категорию и оставит её окно открытым для редактирования. При этом в панели управления категории появится дополнительная кнопка «Сохранить копию». После нажатия кнопки «Сохранить и закрыть», система сохранит новую категорию и откроет окно менеджера категорий. Если будет нажата кнопка «Сохранить и создать», то категория будет сохранена и будет открыто новое окно создания новой категории. Это удобно, когда требуется создать несколько категорий подряд. Нажатие на кнопке «Отменить» приведёт к закрытию окна новой категории без её сохранения. Нажмем кнопку «Сохранить и закрыть» и продолжим знакомство с менеджером категорий.
Вторая кнопка панели управления менеджера категорий – «Изменить». Эта кнопка в некотором смысле лишняя. Работает она так: выбирается категория из списка категорий (ставится галочка напротив названия) и нажимается кнопка «Изменить». В результате этих действий откроется окно категории для редактирования. Но этого же эффекта можно достичь, просто кликнув на названии категории в списке категорий. Откроем категорию «Спорт» для редактирования любым понравившимся способом. В панели управления категории присутствует кнопка «Сохранить копию». Нажатие этой кнопки создает копию категории. Происходит следующее: закрывается окно копируемой категории, одновременно открывается окно копии, категории при этом Joomla изменяет заголовок и псевдоним копии, добавляя цифровой индекс, и сразу сохраняет копию.

Если нас устраивает такой вариант, то нажимаем кнопку «Отменить» (новая категория уже сохранена) или «Сохранить и закрыть». Если же нам нужно что-то другое, то редактируем параметры категории и сохраняем её. Например, изменим заголовок на «Плавание», алиас удалим и выберем родителем категорию «Спорт».

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

У нас получилась подкатегория «Плавание» в категории «Спорт». В списке категорий, подкатегория отображается с отступом. Один отступ означает первый уровень вложенности, два отступа соответственно второй уровень и т. д.
Продолжим знакомство с панелью управления менеджера категорий. Следующие две кнопки нужны для быстрой публикации/депубликации одной или нескольких категории. Делается это так: в списке категорий выбираются нужные (ставятся галочки) и нажимается соответствующая кнопка. При этом в списке менеджера категорий, в столбце «Состояние» отображается соответствующий значок. Операцию публикации/депубликации можно сделать и по-другому. Нужно всего лишь кликнуть на значке в столбце «Состояние» и статус категории изменится на противоположный. Если категория была включена, то она станет выключенной и наоборот.
Далее следует кнопка для быстрого перемещения категории в архив. Когда какой либо материал сайта устаревает, имеет смысл перенести его в архив. Т. е. большинству посетителей сайта материал уже не интересен, на сайте он мешает, удалить жалко – вдруг кому-нибудь ещё пригодится. Вот для этих целей и нужен архив. Кнопка «Архив» позволяет быстро перенести категорию со статьями в архив. На сайте можно сделать отдельный пункт меню, указывающий на материалы в архиве, и интересующиеся могут просмотреть «исторические» статьи. После переноса в архив, категория не отображается в списке менеджера материалов. Не пугайтесь, ниже я расскажу, как увидеть архивные категории.
Кнопка «Разблокировать» нужна для деблокирования категорий. Что за блокировка спросите вы и из-за чего она происходит? Joomla – многопользовательская система управления сайтом, т. е. доступ к редактированию материалов может быть у нескольких пользователей сайта. Так вот чтобы предотвратить одновременное редактирование одного и того же материала разными пользователями и используется блокировка. Как только вы открыли для редактирования, например, категорию, она сразу же блокируется системой для редактирования другим пользователем. И пока первый пользователь не освободит категорию, сохранив или отменив изменения, она будет заблокированной. Напротив заблокированной категории отображается значок замка.

Так же блокировка материала может произойти из-за неправильного его освобождения. Что это значит? Материал правильно освобождается только после нажатия кнопок «Сохранить и закрыть» или «Отменить». Если вы во время редактирования категории, например, закроете админку, то категория не будет освобождена и при следующем входе на сайт вы увидите, что категория заблокирована. Разблокировать материал может либо пользователь, который его редактировал либо суперпользователь. Для этого нужно снова открыть материал для редактирования и закрыть его, сохранив изменения. Или выделить материал, в нашем случае это категория, и нажать кнопку «Разблокировать» в менеджере категорий. Упомяну ещё один способ разблокировки. В меню сайта переходим в Сайт -> Обслуживание -> Снять блокировки

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

Он работает как обычный поиск. В поле ввода фильтра можно набрать название категории или псевдонима, целиком или только часть.
С правой стороны, напротив фильтра, расположены четыре раскрывающихся списка – это панель отбора категорий.

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

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

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

Быстро восстановить категорию из корзины можно кликнув на значке в столбце «Состояние». Но в отличие от восстановления из архива, категория будет восстановлена сразу во включенном состоянии.
В списке отбора категорий по состоянию, присутствует пункт «Все». Вот он то и отвечает за отображение в списке категорий во всех состояниях. Если в списке отбора установлено значение по умолчанию «Выбор состояния», то в списке менеджера категорий отображаются только включенные и выключенные категории. И это удобно. Чаще всего в работе с Joomla приходится менять состояние материалов с включенного на выключенное и наоборот. Работы по удалению категорий или перемещению их в архив проводятся намного реже. Вот разработчики Joomla и придумали такой удобный режим отображения. А тем, кто хочет видеть категории во всех состояниях стоит лишь выбрать пункт «Все».
В панели отбора категорий осталось ещё два выпадающих списка, мы не будем их рассматривать подробно. Отбор по уровню доступа говорит сам за себя. Отбираются категории для определённого уровня доступа. Об уровнях доступа читайте в одной из следующих статей. Отбор по языку имеет смысл в многоязычных сайтах.
С панелью отбора разобрались, обратимся теперь к самому списку категорий. Обратим внимание на заголовки столбцов. Кликнув на названии заголовка можно отсортировать список категорий в порядке увеличения или уменьшения значения в столбце.
Ниже списка категорий находится стандартный в Joomla выпадающий список, который называется «Количество строк». Выбирая значения из этого списка можно настроить под себя размер списка.
В самом низу окна менеджера категорий находится блок пакетной обработки.

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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


Приветствую Вас, уважаемые посетители моего блога о 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));