Новости Joomla

🏆 Открыто голосование за Joomla в премии CMS Critic People’s Choice Awards 2025

🏆 Открыто голосование за Joomla в  премии CMS Critic People’s Choice Awards 2025

🗓 Голосование продлится до 27 февраля 2026 года.

👩‍💻 Проголосовать! 👩‍💻

Номинации, в которых можно проголосовать за Joomla:
⭐️ Best Free CMS
⭐️ Best Open Source CMS
⭐️ Best Enterprise CMS

Также в номинации Best e-Commerce Solution участвуют компоненты интернет-магазинов для Joomla:
⭐️ HikaShop
⭐️ Virtuemart

В номинации Best Website Builder оказались:
⭐️ YooTheme
⭐️ SP Page Builder

Что такое CMS Critic Awards?
С 2012 года премия CMS Critic Awards занимает особое место в сообществе систем управления контентом (CMS). Это единственный в своем роде сайт, который составляет рейтинг системы управления контентом и связанных с ними решений на рынке — от малого до крупного и подчеркивает их инновации и услуги.

Каждый год награда CMS Critic Awards присуждается одному победителю в различных отраслевых категориях, таких как: «Лучшая облачная CMS», «Лучший DXP», «Лучшая Headless CMS и других. Затем результаты оглашаются через СМИ вместе с выбором редакции CMS Critic.
В этом году премия вернулась к своим традициям и только TOP-5 движков по количеству номинаций попали в 2-й этап - голосование.

@joomlafeed

👩‍💻 Вместе мы развиваем Joomla: станьте Joomfluencer!

👩‍💻 Вместе мы развиваем Joomla: станьте Joomfluencer!

Вы уверенно чувствуете себя перед камерой, динамичны, обаятельны и всегда улыбаетесь? Чувствуете себя искателем приключений, готовым поделиться своими исследованиями CMS Joomla!, взять интервью у видных деятелей сообщества, пообщаться лично или по видеосвязи с волонтерами Joomla или отправиться на поиски новых идей?

Joomla ищет одного или нескольких волонтеров, готовых вдохнуть новую жизнь в обсуждение Joomla, ее CMS, пользователей, сообщества и многого другого.

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

Joomla! уже активно представлена ​​во многих социальных сетях:
- 155K подписчиков на Facebook,
- 55K подписчиков на X (ранее Twitter),
- 16K подписчиков на YouTube,
- 14K подписчиков на LinkedIn,
- 5,7K подписчиков в Instagram
а так же другие площадки ждут вас. Аккаунты Threads и Bluesky относительно новые, но их популярность только растёт!

А если хватит энергии, можно рассмотреть и TikTok!

❓ Итак, вы готовы?
👉 Свяжитесь с отделом маркетинга по адресу: marketing@community.joomla.org

Подробности в статье в Joomla Community Magazine.

@joomlafeed

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

goga_pgasovav

  • Захожу иногда
  • 445
  • 6 / 0
  • Внимательный джумловод
Есть ли какая-то альтернатива плагину HP Router?
Может как-то можно изменить стандартный SEF таким образом, чтобы он не выводил ID материала в урле?
Я имею ввиду:
чтобы URL mysite.com/news/22-good-news выглядел как mysite.com/news/good-news

HP Router отлично справлялся со своей задачей, до тех пор пока не потребовалась многоязычность, и в связке с JoomFish начались траблы.
*

goga_pgasovav

  • Захожу иногда
  • 445
  • 6 / 0
  • Внимательный джумловод
очень долго искал информацию для решения этой задачи.
Лишь на одном забугорном сайте добрый человек по имени Marvin Ryan выложил модифицированный router.php который как раз таки и делает то, что мне нужно!

1. Идем в components/com_content и находим там файл router.php
2. Заменяем все его содержимое на:

Код
<?php
/**
* @version $Id: router.php 14401 2010-01-26 14:10:00Z louis $
* @package Joomla
* @copyright Copyright (C) 2005 - 2010 Open Source Matters. All rights reserved.
* @license GNU/GPL, see LICENSE.php
* Joomla! is free software. This version may have been modified pursuant
* to the GNU General Public License, and as distributed it includes or
* is derivative of works licensed under the GNU General Public License or
* other free or open source software licenses.
* See COPYRIGHT.php for copyright notices and details.
*/

function ContentBuildRoute(&$query)
{
$segments = array();

$menu = &JSite::getMenu();
if (empty($query['Itemid'])) {
$menuItem = &$menu->getActive();
} else {
$menuItem = &$menu->getItem($query['Itemid']);
}
$mView = (empty($menuItem->query['view']))? null : $menuItem->query['view'];
$mCatid = (empty($menuItem->query['catid']))? null : $menuItem->query['catid'];
$mId = (empty($menuItem->query['id']))? null : $menuItem->query['id'];

if(isset($query['task'])) {
return $segments;
}

if(isset($query['view']))
{
$view = $query['view'];
if(empty($query['Itemid'])) {
$segments[] = $query['view'];
}
unset($query['view']);
};

if (($mView == 'article') and (isset($query['id'])) and ($mId == intval($query['id']))) {
unset($query['view']);
unset($query['catid']);
unset($query['id']);
}

if (isset($view) and ($view == 'section' && !empty($query['Itemid']))) {
if (($mView != 'section') or ($mView == 'section' and $mId != intval($query['id']))) {
$segments[] = 'section';
unset($query['Itemid']);
}
}

if (isset($view) and $view == 'category') {
if ($mId != intval($query['id']) || $mView != $view) {
$temp = explode(':',$query['id']);
if(count($temp) > 1)
{
$query['id'] = $temp[1];
}

$segments[] = $query['id'];
}
unset($query['id']);
}

if (isset($query['catid'])) {

if ((($view == 'article') and ($mView != 'category') and ($mView != 'article') and ($mCatid != intval($query['catid'])))) {
$temp = explode(':',$query['catid']);
if(count($temp) > 1)
{
$query['catid'] = $temp[1];
}

$segments[] = $query['catid'];
}
unset($query['catid']);
};

if(isset($query['id'])) {
if (empty($query['Itemid'])) {
$temp = explode(':',$query['id']);
if(count($temp) > 1)
{
$query['id'] = $temp[1];
}

$segments[] = $query['id'];
} else {
if (isset($menuItem->query['id'])) {
if($query['id'] != $mId) {
$temp = explode(':',$query['id']);
if(count($temp) > 1)
{
$query['id'] = $temp[1];
}

$segments[] = $query['id'];
}
} else {
$temp = explode(':',$query['id']);
if(count($temp) > 1)
{
$query['id'] = $temp[1];
}

$segments[] = $query['id'];
}
}
unset($query['id']);
};

if(isset($query['year'])) {

if(!empty($query['Itemid'])) {
$segments[] = $query['year'];
unset($query['year']);
}
};

if(isset($query['month'])) {

if(!empty($query['Itemid'])) {
$segments[] = $query['month'];
unset($query['month']);
}
};

if(isset($query['layout']))
{
if(!empty($query['Itemid']) && isset($menuItem->query['layout'])) {
if ($query['layout'] == $menuItem->query['layout']) {

unset($query['layout']);
}
} else {
if($query['layout'] == 'default') {
unset($query['layout']);
}
}
};

return $segments;
}

function ContentParseRoute($segments)
{
$vars = array();

$menu =& JSite::getMenu();
$item =& $menu->getActive();
$db =& JFactory::getDBO();
$count = count($segments);


if(!isset($item))
{
$vars['view']  = $segments[0];
$vars['id']    = $segments[$count - 1];
if($vars['view'] == 'article')
{
$query = 'SELECT id FROM #__content WHERE alias = '.$db->Quote($vars['id']);
} elseif($vars['view'] == 'category') {
$query = 'SELECT id FROM #__categories WHERE section > 0 && alias = '.$db->Quote($vars['id']);
}
$db->setQuery($query);
$vars['id'] = $db->loadResult();
return $vars;
}

switch($item->query['view'])
{
case 'section' :
{
if($count == 1) {
$vars['view'] = 'category';

if(isset($item->query['layout']) && $item->query['layout'] == 'blog') {
$vars['layout'] = 'blog';
}
}

if($count == 2) {
$vars['view']  = 'article';
$vars['catid'] = $segments[$count-2];
}

$vars['id']    = $segments[$count-1];

} break;

case 'category'   :
{
$vars['id']   = $segments[$count-1];
$vars['view'] = 'article';

} break;

case 'frontpage'   :
{
$vars['id']   = $segments[$count-1];
$vars['view'] = 'article';

} break;

case 'article' :
{
$vars['id']   = $segments[$count-1];
$vars['view'] = 'article';
} break;

case 'archive' :
{
if($count != 1)
{
$vars['year']  = $count >= 2 ? $segments[$count-2] : null;
$vars['month'] = $segments[$count-1];
$vars['view']  = 'archive';
} else {
$vars['id']   = $segments[$count-1];
$vars['view'] = 'article';
}
}
}

$alias = explode(':', $vars['id']);
if((int) $alias[0] > 0)
{
$vars['id'] = $alias[0];
} else {
if(count($alias) > 1)
{
$vars['id'] = $alias[0].'-'.$alias[1];
}

if($vars['view'] == 'article')
{
$query = 'SELECT id FROM #__content WHERE alias = '.$db->Quote($vars['id']);
} elseif($vars['view'] == 'category') {
$query = 'SELECT id FROM #__categories WHERE section > 0 && alias = '.$db->Quote($vars['id']);
}
$db->setQuery($query);
$vars['id'] = $db->loadResult();
}

return $vars;
}
3. Всё прекрасно работает...
... но. В переключателе языков JoomFish теперь ссылки вроде: mysite.com/news/22
т.е. с точностью до наоборот, остался один лишь ID материала...
может приведенный выше код поможет исправить данную проблему?
Чтобы оставить сообщение,
Вам необходимо Войти или Зарегистрироваться
 

Ошибка 404 категория материалов Артио

Автор ReefTank

Ответов: 0
Просмотров: 3702
Последний ответ 01.07.2019, 10:23:50
от ReefTank
После переноса материалов из Joomla 1.5 в Joomla 3.8 появились вопросы по работе

Автор WeX

Ответов: 0
Просмотров: 1606
Последний ответ 20.11.2017, 11:42:16
от WeX
Alias для меню и материалов

Автор huligan

Ответов: 0
Просмотров: 1536
Последний ответ 25.05.2015, 12:40:03
от huligan
Изменение SEF через правку router.php

Автор jouser

Ответов: 3
Просмотров: 1569
Последний ответ 05.12.2014, 11:27:25
от kitSS
Router SEF

Автор MadChild

Ответов: 0
Просмотров: 1179
Последний ответ 24.07.2014, 16:53:05
от MadChild