Новости Joomla

Вышел WT Quick links v.2.4.0 - релиз модуля для Joomla

Вышел WT Quick links v.2.4.0 - релиз модуля для Joomla.Это модуль-конструктор для быстрого создания набора элементов. Это могут быть ссылки на компоненты Joomla, пункт меню или пользовательская ссылка. Есть условия для исключений показа элементов списка. Вы можете создавать собственные макеты вывода модуля, создавая таким образом почти всё, что угодно: от простого списка ссылок до стены фотографий на главную страницу или ссылки-теги для перелинковки категорий интернет-магазина, список FAQ, табы или аккордеоны. Модуль позволяет выводить изображения, адаптивные изображения, видео, адаптивные видео.v.2.4.0. Что нового?Добавлена поддержка новых компонентов. Добавлены новые типы ссылок и исключений для них: - Phoca Download, - Phoca Gallery, - RadicalMart (@radicalmart).Joomla 6. Успешно протестирована работа модуля на Joomla 6-alpha2.РазработчикамПроведён большой рефакторинг кода. Для типов ссылок созданы классы-драйверы. Теперь для того, чтобы добавить новый тип ссылки в модуль достаточно скопировать класс-образец из
modules/mod_wt_quick_links/src/Driver/Collection и наполнить его данными по образцу, а так же добавить необходимые языковые константы в панели администратора Joomla.Модуль бесплатный. Страница расширенияGitHub расширенияJoomla Extensions Directory👩‍💻 Подпишись на @joomlafeed.#joomla #разработка

Свои типы полей в Joomla.Это большая тема, о которой можно говорить очень много

Свои типы полей в Joomla.Это большая тема, о которой можно говорить очень много

👩‍💻 Свои типы полей в Joomla.Это большая тема, о которой можно говорить очень много. Самое главное, что возможности применения ограничиваются только вашей больной фантазией. Вы строите интерфейс своего модуля или плагина и вам нужно подтянуть данные из сторонней системы (список чего-нибудь по какому-нибудь API), чтобы сохранить выбранный id в Joomla. Или сделать какую-то проверку и в зависимости от неё показать то или иное сообщение пользователю. Для этого подойдут свои пользовательские типы полей. Интерфейс Joomla по большей части описан в XML-файлах. У каждого из них свои параметры. Некоторые не описаны в документации (manual.joomla.org), поэтому самым любопытным будет полезно заглянуть в собственно файлы фреймворка по пути

libraries/src/Form/FormField.php, а так же в
libraries/src/Form/Fields. У каждого класса поля перечислены его специфические свойства, которые можно описывать в XML. А в своём типе поля вы можете устанавливать эти значения программно. В моём модуле WT Quick links под капотом происходят изменения. Теперь для работы (в админке) ему нужен вспомогательный плагин. А в самом модуле нам бы проверить, а не выключен ли он? В Joomla есть тип поля Note - заметка. Его можно использовать для вывода примечаний.

<field type="note"     name="your_note_for_user"     label="Заголовок примечания"     title="Альтернативный способ для заголовка"     description="Текст примечания"     class="col-12 alert alert-info"     heading="h1"     close="true"/>
heading - указывать уровень заголовка.
close - позволяет закрыть это примечание. В классе поля
libraries/src/Form/Field/NoteField.php описана логика вывода. И в принципе оно нам подходит для нашей задачи. Но оно будет выводить сообщение всегда, а нам нужно только тогда, когда плагин отключён.Поэтому берём и создаём свой класс поля, который мы унаследуем от
NoteField. Это значит, что у нас в руках будет весь инструментарий стандартного поля
Note + то, что мы сами добавим. В XML-манифест добавляем наше поле
<field type="systempluginstatus"      name="systempluginstatus"     addfieldprefix="Joomla\Module\Wtquicklinks\Site\Fields"/>
-
type - имя файла и класса,-
addfieldprefix - указываем namespace к нашему классу, может быть любой нам нужный-
name - нельзя полю без имени...Это означает, что Joomla будет использовать класс поля из файла
modules/mod_wt_quick_links/src/Fields/SystempluginstatusField.php.А в классе поля будет написано следующее:
<?php// namespace для атрибута addfieldprefixnamespace Joomla\Module\Wtquicklinks\Site\Fields;// нельзя напрямую обращаться к этому файлуdefined('_JEXEC') or die;// подключаем родительский класс для переопределенияuse Joomla\CMS\Form\Field\NoteField;use Joomla\CMS\Language\Text;use Joomla\CMS\Plugin\PluginHelper;// имя класса и имя файла точь-в-точьclass SystempluginstatusField extends NoteField{     protected $type = 'Systempluginstatus';     protected function getLabel()          {               // если плагин не включён               if(PluginHelper::isEnabled('system','wtquicklinks')) {                    // меняем свойства родительского класса                    $this->class = 'alert alert-danger w-100';                    $this->element['label'] = '⚠️ А-а-а-а!';                    $this->element['description'] = 'Плагин не включён!!';                    // и просто рендерим его с нашими свойствами                    return parent::getLabel();               }          // А иначе всё хорошо, скрываем поле из виду.          $this->parentclass = 'd-none';          return '';     }}
Просто и удобно. И людям приятно, что о них позаботились и рассказали почему что-то не работает.@webtolkru#joomla #php #webdev #разработка

Обновлена информация в Плане развития Joomla

👩‍💻 Обновлена информация в Плане развития Joomla.Здесь собрана информация о датах релизов, описаны принципы версионирования, указаны ответственные за релизы, а так же даты окончания поддержки релизов. Опираясь на эту информацию вы можете планировать развитие ваших интернет-проектов.👩‍💻 Что нового?⛔️ Joomla 4.Дата окончания исправления ошибок безопасности в версии 4.x - 14 октября 2025г. ⚠️ После этой даты Joomla 4 прекратит получать какие-либо обновления, в том числе безопасности - вообще. Рекомендуем обновить ваши сайты до актуальной Joomla 5.✅ Joomla 5.- Дата окончания исправления ошибок в версии 5.x - 13 октября 2026г.- Дата окончания исправления ошибок безопасности в версии 5.x - 12 октября 2027 года.- Текущая актуальная (на момент написания заметки) версия - 5.3.1.- Опубликовано расписание выхода релизов Joomla 5.4. Стабильный релиз ожидается 14 октября 2025 года.✅ Joomla 6.- Дата окончания исправления ошибок в версии 6.x - 17 октября 2028г.- Дата окончания исправления ошибок безопасности в версии 6.x - 16 октября 2029г.- Опубликовано расписание выхода релизов Joomla 6.0. Стабильный релиз ожидается 14 октября 2025 года.- Для разработчиков уже доступна Joomla 6.0.0-alpha1.✅ Joomla! Framework.Обновлена информация о Joomla! Framework - полноценном PHP-фреймворке для разработки. Он в версиях 1.х и 2.х был самостоятельным параллельным проектом, однако начиная с версии Joomla 4.0 стал её основой. Добавлена информация о Joomla! Framework 3.x, который вышел 6 октября 2023 года. Его можно использовать в тех случаях, когда вам в проекте не нужна CMS Joomla целиком.Подробнее на сайте Joomla-сообщества Joomlaportal.ru#joomla #community

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

j-lubitel

  • Осваиваюсь на форуме
  • 14
  • 0 / 0
Код: php
unset($query['task']);
Это разве не название компонента?, по идее "zoo" в ссылке уже не должно быть, а он почему-то есть.
*

j-lubitel

  • Осваиваюсь на форуме
  • 14
  • 0 / 0
Видимо сложная задача )))
*

j-lubitel

  • Осваиваюсь на форуме
  • 14
  • 0 / 0
Если кто-то знает ответ, подскажите пожалуйста хотя-бы где копать, дальше сам попробую разобраться.
*

j-lubitel

  • Осваиваюсь на форуме
  • 14
  • 0 / 0
А если кликать по тегам из item'а то ссылка получается сайт.ру/all/tag/all/статья )))
Теперь, плюс ко всему, нужно как-то поубирать эти "all"
*

ankoch

  • Захожу иногда
  • 498
  • 50 / 1
Так же обновился до последней версии, но item и catalog остались. возможно настройки где есть?
Заметил, что item и category исчезают только тогда, когда создаёшь пункт меню на определенный элемент каталога.
*

Abiladenda

  • Захожу иногда
  • 181
  • 5 / 0
Версия zoo 2.5.14 и Joomla 2.5.2, при данном способе замены роутера тем что здесь выложен, в canonical ссылках появляется ?view=item&layout=item после самой ссылки, а также на всех ссылках на items если из меню указывается категория. Но самое главное то что canonical получается с ?view=item&layout=item в конце а base без них, вот если бы было наоборот тогда можно и не обращать внимания на то что на странице категории ссылки с этим ?view=item&layout=item, по тому как для индексации берется ссылка с canonical. Вобоще же на форуме yootheme этот вопрос обсуждается уже давно, и пока yootheme не хочет убирать item из линка, только если вы делаете прямую ссылку на item из меню, хорошо хоть так а то раньше даже при прямой ссылке из меню - item всеравно было, плюс еще и category. Вывод такой решения пока нет, на мой взгляд лучше ставить родной роутер и делать прямые ссылки на items, так как в этом случае canonical будет без ?view=item&layout=item и не будет item в самом линке, итог - хорошая индексация. Ну и ждать от самой yootheme что бы алиасы были уникальными как в Joomla тогда все эти проблемы отпадут.
*

Виталик

  • Завсегдатай
  • 1244
  • 130 / 0
вот мой router.php на Zoo 2.5.12
ссылки на материалы без item
Код: php
<?php
/**
* @package   com_zoo
* @author    YOOtheme http://www.yootheme.com
* @copyright Copyright (C) YOOtheme GmbH
* @license   http://www.gnu.org/licenses/gpl.html GNU/GPL
*/

// load config
require_once(JPATH_ADMINISTRATOR.'/components/com_zoo/config.php');

function ZooBuildRoute(&$query) {

$app = App::getInstance('zoo');

// init vars
$segments = array();

// frontpage
$task = 'frontpage';

if (@$query['task'] == $task || @$query['view'] == $task) {
if (@$query['task'] == $task) {
$segments[] = $task;
}
unset($query['task']);
unset($query['view']);
unset($query['layout']);

// pagination
if (isset($query['page'])) {
$segments[] = $query['page'];
unset($query['page']);
}
}

// category
$task = 'category';

if (@$query['task'] == $task || @$query['view'] == $task) {
if (@$query['task'] == $task) {
$segments[] = $task;
}
if (@$query['category_id']) {
$segments[] = $app->alias->category->translateIDToAlias((int) $query['category_id']);
}
unset($query['task']);
unset($query['view']);
unset($query['layout']);
unset($query['category_id']);

// pagination
if (isset($query['page'])) {
$segments[] = $query['page'];
unset($query['page']);
}
}

// alpha index
$task = 'alphaindex';

if ((@$query['task'] == $task || @$query['view'] == $task) && isset($query['alpha_char']) && isset($query['app_id'])) {
$segments[] = $task;
$segments[] = $app->alias->application->translateIDToAlias((int) $query['app_id']);
$segments[] = $query['alpha_char'];
unset($query['task']);
unset($query['view']);
unset($query['alpha_char']);
unset($query['app_id']);

// pagination
if (isset($query['page'])) {
$segments[] = $query['page'];
unset($query['page']);
}
}

// tag
$task = 'tag';

if ((@$query['task'] == $task || @$query['view'] == $task) && isset($query['tag']) && isset($query['app_id'])) {
$segments[] = $task;
$segments[] = $app->alias->application->translateIDToAlias((int) $query['app_id']);
$segments[] = $query['tag'];
unset($query['task']);
unset($query['view']);
unset($query['tag']);
unset($query['app_id']);

// pagination
if (isset($query['page'])) {
$segments[] = $query['page'];
unset($query['page']);
}
}

// item
$task = 'item';

if (@$query['task'] == $task || @$query['view'] == $task) {
if (@$query['task'] == $task && @$query['item_id']) {
$segments[] = $app->alias->item->translateIDToAlias((int) $query['item_id']);
}
unset($query['task']);
unset($query['view']);
unset($query['layout']);
unset($query['item_id']);
unset($query['category_id']);
}

// feed
$task = 'feed';

if ((@$query['task'] == $task || @$query['view'] == $task) && isset($query['type']) && isset($query['app_id']) && isset($query['category_id'])) {
$segments[] = $task;
$segments[] = $query['type'];
$segments[] = $app->alias->application->translateIDToAlias((int) $query['app_id']);
if ($query['category_id']) {
$segments[] = $app->alias->category->translateIDToAlias((int) $query['category_id']);
}
unset($query['task']);
unset($query['view']);
unset($query['type']);
unset($query['app_id']);
unset($query['category_id']);
}

// submission
$task = 'submission';

if (((@$query['task'] == $task || @$query['view'] == $task) && @$query['layout'] == 'submission')) {
$segments[] = $task;
$segments[] = @$query['layout'];
$segments[] = $app->alias->submission->translateIDToAlias((int) $query['submission_id']);
$segments[] = $query['type_id'];
$segments[] = $query['submission_hash'];
$segments[] = $app->alias->item->translateIDToAlias((int) @$query['item_id']);
unset($query['task']);
unset($query['view']);
unset($query['layout']);
unset($query['submission_id']);
            unset($query['type_id']);
            unset($query['submission_hash']);
            unset($query['item_id']);
}

// submission mysubmissions
$task = 'submission';

if (((@$query['task'] == $task || @$query['view'] == $task) && @$query['layout'] == 'mysubmissions')) {
$segments[] = $task;
$segments[] = @$query['layout'];
$segments[] = $app->alias->submission->translateIDToAlias((int) $query['submission_id']);
unset($query['task']);
unset($query['view']);
unset($query['layout']);
unset($query['submission_id']);
}

return $segments;
}

function ZooParseRoute($segments) {

$app = App::getInstance('zoo');

// init vars
$vars  = array();
$count = count($segments);

// fix segments (see JRouter::_decodeSegments)
foreach (array_keys($segments) as $key) {
$segments[$key] = str_replace(':', '-', $segments[$key]);
}

// frontpage (with optional pagination)
$task = 'frontpage';

if ($count == 1 && $segments[0] == $task) {
$vars['task'] = $task;
}

if ($count == 2 && $segments[0] == $task) {
$vars['task'] = $task;
$vars['page'] = (int) $segments[1];
}

// category (with optional pagination)
$task = 'category';

if ($count == 2 && $segments[0] == $task) {
$vars['task']        = $task;
$vars['category_id'] = (int) $app->alias->category->translateAliasToID($segments[1]);
}

if ($count == 3 && $segments[0] == $task) {
$vars['task']        = $task;
$vars['category_id'] = (int) $app->alias->category->translateAliasToID($segments[1]);
$vars['page']        = (int) $segments[2];
}

// alpha index (with optional pagination)
$task = 'alphaindex';

if ($count == 3 && $segments[0] == $task) {
$vars['task']       = $task;
$vars['app_id'] = (int) $app->alias->application->translateAliasToID($segments[1]);
$vars['alpha_char'] = (string) $segments[2];
}

if ($count == 4 && $segments[0] == $task) {
$vars['task']       = $task;
$vars['app_id'] = (int) $app->alias->application->translateAliasToID($segments[1]);
$vars['alpha_char'] = (string) $segments[2];
$vars['page']       = (int) $segments[3];
}

// tag (with optional pagination)
$task = 'tag';

if ($count == 3 && $segments[0] == $task) {
$vars['task']   = $task;
$vars['app_id'] = (int) $app->alias->application->translateAliasToID($segments[1]);
$vars['tag']    = (string) $segments[2];
}

if ($count == 4 && $segments[0] == $task) {
$vars['task']   = $task;
$vars['app_id'] = (int) $app->alias->application->translateAliasToID($segments[1]);
$vars['tag']    = (string) $segments[2];
$vars['page']   = (int) $segments[3];
}

// item
$task = 'item';

if ($count == 1 && (int) $app->alias->item->translateAliasToID($segments[0]))
{
$vars['task']    = $task;
$vars['item_id'] = (int) $app->alias->item->translateAliasToID($segments[0]);
}

// feed
$task = 'feed';

if ($count == 3 && $segments[0] == $task) {
$vars['task'] = $task;
$vars['type'] = (string) $segments[1];
$vars['app_id'] = (int) $app->alias->application->translateAliasToID($segments[2]);
}

if ($count == 4 && $segments[0] == $task) {
$vars['task']        = $task;
$vars['type']        = (string) $segments[1];
$vars['app_id'] = (int) $app->alias->application->translateAliasToID($segments[2]);
$vars['category_id'] = (int) $app->alias->category->translateAliasToID($segments[3]);
}

// submission
$task = 'submission';
    $layout = 'submission';

if ($count == 2 && $segments[0] == $task && $segments[1] == $layout) {
$vars['task']   = $task;
$vars['layout'] = (string) $segments[1];
}

if ($count == 5 && $segments[0] == $task && $segments[1] == $layout) {
$vars['task']            = $task;
$vars['layout']          = (string) $segments[1];
$vars['submission_id']   = (int) $app->alias->submission->translateAliasToID($segments[2]);
            $vars['type_id']         = (string) $segments[3];
            $vars['submission_hash'] = (string) $segments[4];
}

if ($count == 6 && $segments[0] == $task && $segments[1] == $layout) {
$vars['task']            = $task;
$vars['layout']          = (string) $segments[1];
$vars['submission_id']   = (int) $app->alias->submission->translateAliasToID($segments[2]);
            $vars['type_id']         = (string) $segments[3];
            $vars['submission_hash'] = (string) $segments[4];
            $vars['item_id']         = (int) $app->alias->item->translateAliasToID($segments[5]);
}

// submission mysubmissions
$task = 'submission';
    $layout = 'mysubmissions';

if ($count == 2 && $segments[0] == $task && $segments[1] == $layout) {
$vars['task']   = $task;
$vars['layout'] = (string) $segments[1];
}

if ($count == 3 && $segments[0] == $task && $segments[1] == $layout) {
$vars['task']          = $task;
$vars['layout']        = (string) $segments[1];
$vars['submission_id'] = (int) $app->alias->submission->translateAliasToID($segments[2]);
}

// try to retrieve vars from menu item
if (empty($vars)) {
if ($menu_item = $app->object->create('JSite')->getMenu()->getActive()) {
$vars['task'] = @$menu_item->query['view'];

switch ($vars['task']) {
case 'frontpage':
if ($count == 1) {
$vars['page'] = (int) $segments[0];
}

break;
case 'category':
if ($count == 1) {
$vars['page'] = (int) $segments[0];
$vars['category_id'] = @$menu_item->query['category_id'];
}
break;
}
}
}

return $vars;
}


изменения только здесь:
Код: php
// item
$task = 'item';

if (@$query['task'] == $task || @$query['view'] == $task) {
if (@$query['task'] == $task && @$query['item_id']) {
$segments[] = $app->alias->item->translateIDToAlias((int) $query['item_id']);
}
unset($query['task']);
unset($query['view']);
unset($query['layout']);
unset($query['item_id']);
unset($query['category_id']);
}
и здесь:
Код: php
// item
$task = 'item';

if ($count == 1 && (int) $app->alias->item->translateAliasToID($segments[0]))
{
$vars['task']    = $task;
$vars['item_id'] = (int) $app->alias->item->translateAliasToID($segments[0]);
}
*

Abiladenda

  • Захожу иногда
  • 181
  • 5 / 0
Виталик Да с вашим последним роутером все работает как надо, на моем zoo 2.5.14 и Joomla 2.5.2.
canonical стали таким как надо, и item и category исчезли из линков.
Зачет вам.
Однако следует добавить что если все хорошо, не нужно обновлять zoo иначе все может слететь.

Есть еще одна проблема для zoo на сегодняшний день, это генерация файла sitemap.xml, дело в том что последний плагин zoo plugin for Xmap 2.0 с включенным родным SEF Joomla 2.5  добавляет в линк component/zoo. То есть ссылки в XML файле выглядят вот так mysite.com/component/zoo/item or category name, пока решения нет и приходится использовать вот эти сайты http://www.xml-sitemaps.com/ и http://www.mysitemapgenerator.com/ для генерации файла с ссылками, заодно и проверять дубли, потом в ручную уничтожаю component/zoo или с заменой вставляю то что мне  нужно. Есть jcrawler который якобы может генерить файл с картой сайта в XML, но у меня не работает на Joomla 2.5.2 и zoo 2.5.14.

Нет еще zoo плагина для Xmap который убирал бы component/zoo поэтому вот и мучаемся.

*

theWurm

  • Захожу иногда
  • 51
  • 0 / 8
Почему-то category все равно осталось?

А можно как-то сделать, чтобы линк на статью был вида "сайт/название категории/название статьи"

Если за деньги только, то предложения в ЛС

Версия  Joomla - 2.5.2. zoo - 2.5.14
*

Abiladenda

  • Захожу иногда
  • 181
  • 5 / 0
В этом роутере все так и сделано сайт/название категории/название статьи
а категория (category) у вас показывается в линке только в том случае если название категории совпадает с алиосом статьи,
смотрите как вы делаете ссылки меню, если на категорию тогда выведется список items в этой категории, и при клике на item не должно быть категрии в линке, у меня так работает вот здесь ukraineadopt.com только одна категория осталась с (category) в линке, я так понимаю из за того что категория в zoo имеет тоже название что и алиас статьи, то есть item
*

Virocracy

  • Осваиваюсь на форуме
  • 15
  • 0 / 0
Доброго времени суток!
Скажите пожалуйста поэтапно, как вы добились изменения вида ссылок, т.е. без category и item. У меня Joomla 2.5.3 и zoo 2.5.12. Создаю приложение product catalog, потом категорию, потом сам элемент, алиасы естественно различные. Создаю меню, выбираю fronpage и созданное приложение, в итоге даже с переписанным router.php описанном на форуме category не пропадает..., может проклял кто конечно меня, но маловероятно ))).
Еще не много непонятно, цитирую "последнее время не убираю, так как на все категории есть пункты меню", "Вывод такого решения пока нет, на мой взгляд лучше ставить родной роутер и делать прямые ссылки на items, так как в этом случае canonical будет без ?view=item&layout=item и не будет item в самом линке, итог - хорошая индексация", если создавать меню под каждый item или отдельную категорию, то как потом вывести это все на одной страничке, допустим в качестве главной? Строго не судите, ногами не бейте, с zoo столкнулся впервые...
*

Apoca1ypto

  • Давно я тут
  • 749
  • 71 / 0
Без item - изменение файла ваш_сайт/components/com_zoo/router.php (чуть выше есть код, что и на что нужно изменить).
Без category - необходимо сделать пункты меню для каждой категории в Zoo.
После этих действий все ссылки будут правильного вида.
Как это работает можно посмотреть здесь gam3r.pro (каталоги игр и устройств).
Во время спора в Интернете Ваш оппонент приводит неопровержимые доказательства своей точки зрения? Не отчаивайтесь. До...тесь до орфографии.
*

Reiver

  • Осваиваюсь на форуме
  • 15
  • 0 / 0
Сделал по вышеописанному методу... ссылки на товары выглядят красиво (Site.ru/название категории/товар.html) но вот категории выглядят ужасно (Site.ru/название категории/category/название категории.html) хотя эта же страница доступна и по урлу  (Site.ru/название категории.html)

У меня категории выставлены на главной странице и кликая по одной из них попадаешь на страницу с урлом (Site.ru/название категории/category/название категории.html), а можно сделать чтобы я попадал на страницу с урлом (Site.ru/название категории.html)?

Может есть способ решить это?
Спасибо!
*

Apoca1ypto

  • Давно я тут
  • 749
  • 71 / 0
Сделал по вышеописанному методу... ссылки на товары выглядят красиво (Site.ru/название категории/товар.html) но вот категории выглядят ужасно (Site.ru/название категории/category/название категории.html) хотя эта же страница доступна и по урлу  (Site.ru/название категории.html)

У меня категории выставлены на главной странице и кликая по одной из них попадаешь на страницу с урлом (Site.ru/название категории/category/название категории.html), а можно сделать чтобы я попадал на страницу с урлом (Site.ru/название категории.html)?

Может есть способ решить это?
Спасибо!
Необходимо сделать пункты меню для каждой категории в Zoo.
Во время спора в Интернете Ваш оппонент приводит неопровержимые доказательства своей точки зрения? Не отчаивайтесь. До...тесь до орфографии.
*

Reiver

  • Осваиваюсь на форуме
  • 15
  • 0 / 0
Apoca1ypto, пункты меню категорий созданы...но урл же все равно такого вида mysite.ru/этот_самый_пункт_меню/category/название_категории.
Хотя, как я сказал выше, есть дубль этой страницы с урлом mysite.ru/этот_самый_пункт_меню

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

На вашем же сайте на главной странице размещены только товары, а чтобы зайти в категорию нужно пройти по ссылке через меню! А эту самую ссылку вы уже можете ввести на страницу с красивым урлом!
Кстати как у вас с индексацией после изменений в роутере компонента zoo? Все ок?
*

Apoca1ypto

  • Давно я тут
  • 749
  • 71 / 0
Да, с индексацией проблем нет.
Яндекс и Google понимают канонические URL, так что проблем нет, даже если на страницу ведет несоклько URL - то в базе у них только один (правильный).
Линканите Ваш сайт (можно в личку).
Во время спора в Интернете Ваш оппонент приводит неопровержимые доказательства своей точки зрения? Не отчаивайтесь. До...тесь до орфографии.
*

Georgiy77

  • Захожу иногда
  • 164
  • 2 / 0
  • Развивайся, живи, люби - ты на пути!
Подскажите пожалуйста как убрать item в версии Zoo 2.4? Все предыдущие попытки замены выложенных здесь файлов обернулись неудачей. Вот мой Router.PHP

Спойлер
[свернуть]
   
*

fishi

  • Осваиваюсь на форуме
  • 19
  • 0 / 0
Добрый вечер.  zoo 2.4.9  , удалила из файла $segments[] = $task; . item пропали из урлов, НО перестали открыватся товары со страниц каталога, выходит ошибка 404. Как все таки сделать что б item ушли и  товары открывались. Спасибо.
*

usemind

  • Осваиваюсь на форуме
  • 33
  • 4 / 0
Дело еще в том, что используя вышеупомянутые способы возникает ошибка.
Убирая item из ссылки, мы получаем несуществующую первую страницу. То есть если по навигации пройти на 2 страницу, потом нажать не Предыдущая, а на цифру 1, то мы получим 404. как решить это я не знаю...
*

t2me

  • Осваиваюсь на форуме
  • 11
  • 0 / 0
Спаибо за роутер, очень помогло.
*

shima

  • Захожу иногда
  • 113
  • 7 / 0
Помогите с роутером в версии 2.6.1
не могу убрать /item/ в ссылках,
в sh404Sef  добавлять постранично элементы #items  отключено
провел выше описаные манипуляции
и никаких изменений не произошло
« Последнее редактирование: 01.08.2012, 13:06:24 от shima »
*

wusoldier

  • Осваиваюсь на форуме
  • 41
  • 1 / 0
Zoo 2.5.19, мучаюсь с /category/ в ссылках
как в router.php убрать эту строчку? заранее спасибо

использую родной SEF Joomla 2.5.6
« Последнее редактирование: 04.08.2012, 02:29:26 от wusoldier »
*

wusoldier

  • Осваиваюсь на форуме
  • 41
  • 1 / 0
неужели никто не знает? :(
*

Georgiy77

  • Захожу иногда
  • 164
  • 2 / 0
  • Развивайся, живи, люби - ты на пути!
Насчет как убрать item из Zoo 2.4 решений также не удалось никому найти?
*

Apoca1ypto

  • Давно я тут
  • 749
  • 71 / 0
Насчет как убрать item из Zoo 2.4 решений также не удалось никому найти?
Решение которое опубликовано чуть выше, не подходит для 2.4?
Во время спора в Интернете Ваш оппонент приводит неопровержимые доказательства своей точки зрения? Не отчаивайтесь. До...тесь до орфографии.
*

Georgiy77

  • Захожу иногда
  • 164
  • 2 / 0
  • Развивайся, живи, люби - ты на пути!
Да, именно не подходит! Я оставлял чуть выше свой файл Router.PHP, если можно посмотрите пожалуйста в чем может быть причина неисправности. Спасибо.
*

mexx63

  • Новичок
  • 4
  • 0 / 0
Виталик, спасибо большое! по вашей схеме все отлично получилось и работает.
*

voland

  • Легенда
  • 11028
  • 588 / 112
  • Эта строка съедает место на вашем мониторе
Виталик, спасибо большое! по вашей схеме все отлично получилось и работает.
А где версии используемых компонентов?
*

Dmitriy50

  • Захожу иногда
  • 96
  • 4 / 11
  • TV
А как быть с версией 3.0.10?  Как убрать item?
*

Виталик

  • Завсегдатай
  • 1244
  • 130 / 0
А как быть с версией 3.0.10?  Как убрать item?
router.php для 3.0.10
Код: php
<?php
/**
* @package   com_zoo
* @author    YOOtheme http://www.yootheme.com
* @copyright Copyright (C) YOOtheme GmbH
* @license   http://www.gnu.org/licenses/gpl.html GNU/GPL
*/

// load config
require_once(JPATH_ADMINISTRATOR.'/components/com_zoo/config.php');

function ZooBuildRoute(&$query) {

$app = App::getInstance('zoo');

// init vars
$segments = array();

// frontpage
$task = 'frontpage';

if (@$query['task'] == $task || @$query['view'] == $task) {
if (@$query['task'] == $task) {
$segments[] = $task;
}
unset($query['task'], $query['view'], $query['layout']);

// pagination
if (isset($query['page'])) {
$segments[] = $query['page'];
unset($query['page']);
}
}

// category
$task = 'category';

if (@$query['task'] == $task || @$query['view'] == $task) {
if (@$query['task'] == $task) {
$segments[] = $task;
}
if (@$query['category_id']) {
$segments[] = $app->alias->category->translateIDToAlias((int) $query['category_id']);
}
unset($query['task'], $query['view'], $query['layout'], $query['category_id']);

// pagination
if (isset($query['page'])) {
$segments[] = $query['page'];
unset($query['page']);
}
}

// alpha index
$task = 'alphaindex';

if ((@$query['task'] == $task || @$query['view'] == $task) && isset($query['alpha_char'], $query['app_id'])) {
$segments[] = $task;
            if (!($menu = $app->system->application->getMenu('site')
                    and $menu instanceof JMenu
                    and isset($query['Itemid'])
                    and $item = $menu->getItem($query['Itemid'])
                    and @$item->component == 'com_zoo'
                    and $app_id = $item->params->get('application')
                    and $query['app_id'] == $app_id)) {
                // Set app alias in the url only if we can't get the app_id from the menu item
                $segments[] = $app->alias->application->translateIDToAlias((int) $query['app_id']);
            }
$segments[] = $query['alpha_char'];

unset($query['task'], $query['view'], $query['alpha_char'], $query['app_id']);

// pagination
if (isset($query['page'])) {
$segments[] = $query['page'];
unset($query['page']);
}
}

// tag
$task = 'tag';

if ((@$query['task'] == $task || @$query['view'] == $task) && isset($query['tag'], $query['app_id'])) {
$segments[] = $task;
            if (!($menu = $app->system->application->getMenu('site')
                    and $menu instanceof JMenu
                    and isset($query['Itemid'])
                    and $item = $menu->getItem($query['Itemid'])
                    and @$item->component == 'com_zoo'
                    and $app_id = $item->params->get('application')
                    and $query['app_id'] == $app_id)) {
                // Set app alias in the url only if we can't get the app_id from the menu item
                $segments[] = $app->alias->application->translateIDToAlias((int) $query['app_id']);
            }
$segments[] = $query['tag'];

unset($query['task'], $query['view'], $query['tag'], $query['app_id']);

// pagination
if (isset($query['page'])) {
$segments[] = $query['page'];
unset($query['page']);
}
}

// item
$task = 'item';

if (@$query['task'] == $task || @$query['view'] == $task) {
if (@$query['task'] == $task && @$query['item_id']) {
//$segments[] = $task;
$segments[] = $app->alias->item->translateIDToAlias((int) $query['item_id']);
}
unset($query['task'], $query['view'], $query['layout'], $query['item_id']);
}

// feed
$task = 'feed';

if ((@$query['task'] == $task || @$query['view'] == $task) && isset($query['type'], $query['app_id'], $query['category_id'])) {
$segments[] = $task;
$segments[] = $query['type'];
$segments[] = $app->alias->application->translateIDToAlias((int) $query['app_id']);
if ($query['category_id']) {
$segments[] = $app->alias->category->translateIDToAlias((int) $query['category_id']);
}
unset($query['task'], $query['view'], $query['type'], $query['app_id'], $query['category_id']);
}

// submission
$task = 'submission';

if (((@$query['task'] == $task || @$query['view'] == $task) && @$query['layout'] == 'submission')) {
$segments[] = $task;
$segments[] = @$query['layout'];
$segments[] = $app->alias->submission->translateIDToAlias((int) $query['submission_id']);
$segments[] = $query['type_id'];
$segments[] = $query['submission_hash'];
$segments[] = $app->alias->item->translateIDToAlias((int) @$query['item_id']);
unset($query['task'], $query['view'], $query['layout'], $query['submission_id'], $query['type_id'], $query['submission_hash'], $query['item_id']);
}

// submission mysubmissions
$task = 'submission';

if (((@$query['task'] == $task || @$query['view'] == $task) && @$query['layout'] == 'mysubmissions')) {
$segments[] = $task;
$segments[] = @$query['layout'];
$segments[] = $app->alias->submission->translateIDToAlias((int) @$query['submission_id']);
unset($query['task'], $query['view'], $query['layout'], $query['submission_id']);
}

$app->event->dispatcher->notify($app->event->create(null, 'application:sefbuildroute', array('segments' => &$segments, 'query' => &$query)));

return $segments;
}

function ZooParseRoute($segments) {

$app = App::getInstance('zoo');

// init vars
$vars  = array();
$count = count($segments);

// fix segments (see JRouter::_decodeSegments)
foreach (array_keys($segments) as $key) {
$segments[$key] = str_replace(':', '-', $segments[$key]);
}

// frontpage (with optional pagination)
$task = 'frontpage';

if ($count == 1 && $segments[0] == $task) {
$vars['task'] = $task;
}

if ($count == 2 && $segments[0] == $task) {
$vars['task'] = $task;
$vars['page'] = (int) $segments[1];
}

// category (with optional pagination)
$task = 'category';

if ($count == 2 && $segments[0] == $task) {
$vars['task']        = $task;
$vars['category_id'] = (int) $app->alias->category->translateAliasToID($segments[1]);
}

if ($count == 3 && $segments[0] == $task) {
$vars['task']        = $task;
$vars['category_id'] = (int) $app->alias->category->translateAliasToID($segments[1]);
$vars['page']        = (int) $segments[2];
}

// alpha index (with optional pagination)
$task = 'alphaindex';

        if ($count == 2 && $segments[0] == $task && $menu_item = $app->menu->getActive()) {
            $vars['task']       = $task;
            $vars['alpha_char'] = (string) $segments[1];
            $vars['app_id'] = $menu_item->params->get('application');
        }

        if ($count == 3 && $segments[0] == $task) {
            $vars['task']           = $task;
            if (!$vars['app_id'] = (int) $app->alias->application->translateAliasToID($segments[1]) and $menu_item = $app->menu->getActive()) {
                $vars['app_id']     = $menu_item->params->get('application');
                $vars['alpha_char'] = (string) $segments[1];
                $vars['page']       = (int) $segments[2];
            } else {
                $vars['alpha_char'] = (string) $segments[2];
            }
        }

        if ($count == 4 && $segments[0] == $task) {
            $vars['task']       = $task;
            $vars['app_id'] = (int) $app->alias->application->translateAliasToID($segments[1]);
            $vars['alpha_char'] = (string) $segments[2];
            $vars['page']       = (int) $segments[3];
        }

// tag (with optional pagination)
$task = 'tag';

// if a menu item is set, avoid using app alias in the url
        if ($count == 2 && $segments[0] == $task && $menu_item = $app->menu->getActive()) {
            $vars['task']   = $task;
            $vars['app_id'] = $menu_item->params->get('application');
            $vars['tag']    = (string) $segments[1];
        }

        if ($count == 3 && $segments[0] == $task) {
            $vars['task']       = $task;
            if (!$vars['app_id'] = (int) $app->alias->application->translateAliasToID($segments[1]) and $menu_item = $app->menu->getActive()) {
                $vars['app_id'] = $menu_item->params->get('application');
                $vars['tag']    = (string) $segments[1];
                $vars['page']   = (int) $segments[2];
            } else {
                $vars['tag']    = (string) $segments[2];
            }
        }

        if ($count == 4 && $segments[0] == $task) {
            $vars['task']   = $task;
            $vars['app_id'] = (int) $app->alias->application->translateAliasToID($segments[1]);
            $vars['tag']    = (string) $segments[2];
            $vars['page']   = (int) $segments[3];
        }

// item
$task = 'item';
$item_id = (int) $app->alias->item->translateAliasToID($segments[0]);
if ($count == 1 && $item_id) {
$vars['task']    = $task;
$vars['item_id'] = $item_id;
}

// feed
$task = 'feed';

if ($count == 3 && $segments[0] == $task) {
$vars['task'] = $task;
$vars['type'] = (string) $segments[1];
$vars['app_id'] = (int) $app->alias->application->translateAliasToID($segments[2]);
}

if ($count == 4 && $segments[0] == $task) {
$vars['task']        = $task;
$vars['type']        = (string) $segments[1];
$vars['app_id'] = (int) $app->alias->application->translateAliasToID($segments[2]);
$vars['category_id'] = (int) $app->alias->category->translateAliasToID($segments[3]);
}

// submission
$task = 'submission';
    $layout = 'submission';

if ($count == 2 && $segments[0] == $task && $segments[1] == $layout) {
$vars['task']   = $task;
$vars['layout'] = (string) $segments[1];
}

if ($count == 5 && $segments[0] == $task && $segments[1] == $layout) {
$vars['task']            = $task;
$vars['layout']          = (string) $segments[1];
$vars['submission_id']   = (int) $app->alias->submission->translateAliasToID($segments[2]);
            $vars['type_id']         = (string) $segments[3];
            $vars['submission_hash'] = (string) $segments[4];
}

if ($count == 6 && $segments[0] == $task && $segments[1] == $layout) {
$vars['task']            = $task;
$vars['layout']          = (string) $segments[1];
$vars['submission_id']   = (int) $app->alias->submission->translateAliasToID($segments[2]);
            $vars['type_id']         = (string) $segments[3];
            $vars['submission_hash'] = (string) $segments[4];
            $vars['item_id']         = (int) $app->alias->item->translateAliasToID($segments[5]);
}

// submission mysubmissions
$task = 'submission';
    $layout = 'mysubmissions';

if ($count == 2 && $segments[0] == $task && $segments[1] == $layout) {
$vars['task']   = $task;
$vars['layout'] = (string) $segments[1];
}

if ($count == 3 && $segments[0] == $task && $segments[1] == $layout) {
$vars['task']          = $task;
$vars['layout']        = (string) $segments[1];
$vars['submission_id'] = (int) $app->alias->submission->translateAliasToID($segments[2]);
}

// try to retrieve vars from menu item
if (empty($vars)) {
if (($count == 0 || $count == 1 && is_numeric($segments[0])) && $menu_item = $app->menu->getActive()) {
$vars['task'] = @$menu_item->query['view'];

switch ($vars['task']) {
case 'frontpage':
if ($count == 1) {
$vars['page'] = (int) $segments[0];
}

break;
case 'category':
if ($count == 1) {
$vars['page'] = (int) $segments[0];
$vars['category_id'] = @$menu_item->query['category_id'];
}
break;
}
}
}

$app->event->dispatcher->notify($app->event->create(null, 'application:sefparseroute', array('segments' => &$segments, 'vars' => &$vars)));

return $vars;
}
Чтобы оставить сообщение,
Вам необходимо Войти или Зарегистрироваться
 

Ссылки в JBZoo

Автор Whitelamb

Ответов: 3
Просмотров: 4132
Последний ответ 15.09.2017, 22:17:11
от isay777
[Решено] Как в модуле ZOO Item вывести название и описание категории?

Автор frolov.ar

Ответов: 13
Просмотров: 5795
Последний ответ 01.04.2017, 13:29:52
от rivermc
Как настроить отображение страницы элемента product в виде cookbook?

Автор saschka

Ответов: 1
Просмотров: 1679
Последний ответ 12.01.2017, 16:44:50
от shtier
Запись данных из элемента

Автор yandex_hb

Ответов: 0
Просмотров: 1263
Последний ответ 10.10.2016, 20:23:00
от yandex_hb
Модуль: ZOO item популярные за неделю ( НЕ бесплатно)

Автор dee88

Ответов: 4
Просмотров: 2255
Последний ответ 29.08.2016, 16:13:28
от ameli90