Новости Joomla

Вышли релизы безопасности Joomla 6.1.4 и Joomla 5.4.9

Релиз безопасности Joomla 6.1.4 и Joomla 5.4.9

Проект Joomla! рад сообщить о выходе Joomla 6.1.4 и Joomla 5.4.9. Это релизы безопасности и исправления ошибок для серий 5.x и 6.x.

Вышли релизы безопасности Joomla 6.1.3 и Joomla 5.4.8

Релиз безопасности Joomla 6.1.3 и Joomla 5.4.8

Проект Joomla! рад сообщить о выходе Joomla 6.1.3 и Joomla 5.4.8. Это релизы безопасности и исправления ошибок для серий 5.x и 6.x.

👩‍💻 WT Otpravkapochtaru - библиотека сервиса Отправка Почты России для Joomla-разработчиков.

👩‍💻 WT Otpravkapochtaru - библиотека сервиса Отправка Почты России для Joomla-разработчиков.

Joomla 5+ пакет для интеграции с API Почты России: нормализация данных, расчёт доставки, создание отправлений, партии, документы, возвраты, поиск отделений, справочники и SOAP-отслеживание.

v.3.0.0. Что нового?
Это дальнейшее развитие ранее закрытой Joomla-библиотеки для работы с API сервиса Отправка (для бизнеса) Почты России. Поэтому версия не 1.0.0, а 3.0.0.

Сейчас эта библиотека ушла от собственных реализаций и стала Joomla-обёрткой известного PHP SDK от Lapay Group.

Возможности библиотеки.
- получение настроек аккаунта, точек сдачи и текущего остатка запросов к API;
- нормализация адресов, ФИО и телефонов перед созданием отправления;
- расчёт тарифа и срока доставки;
- создание, поиск, изменение, удаление и возврат заказов в состояние «Новые»;
- проверка надёжности получателя;
- создание партий, просмотр партий и заказов внутри партии;
- генерация пакета печатных документов и формы Ф103;
- создание, изменение и удаление возвратных отправлений;
- поиск отделений по индексу, адресу и координатам, получение сервисов отделения;
- локальный список стран;
- SOAP-отслеживание операций по РПО и работа с билетами пакетного трекинга.

👩‍💻 Joomla-возможности.
В пакете библиотеки WT Otpravkapochtaru есть поля Joomla Form для расширений. Они позволяют работать в интерфейсе Joomla с некоторыми типами данных, получаемых по API из вашего личного кабинета в ЛК Почты России для бизнеса.
На данный момент в библиотеке доступны 3 поля списков, которые отображают доступные в аккаунте ОПС, типы и категории отправлений.
Поддерживаются зависимые списки: значение одного поля обновляется при изменении другого.

Системные требования.
Системные требования в основном связаны с системными требованиями апстрима библиотеки - LapayGroup PHP SDK.
- Joomla 5+
- PHP 8.3+
- Расширения PHP:
-- ext-mbstring
-- ext-simplexml
-- ext-soap (опционально, для трекинга)
-- ext-zip

Ссылки:
- Страница расширения
- GitHub библиотеки и документация

@joomlafeed

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

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
Просмотров: 4397
Последний ответ 01.07.2019, 10:23:50
от ReefTank
После переноса материалов из Joomla 1.5 в Joomla 3.8 появились вопросы по работе

Автор WeX

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

Автор huligan

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

Автор jouser

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

Автор MadChild

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