Новости 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

Компания JetBrains рассказала о своей поддержке Joomla

Компания JetBrains рассказала о своей поддержке Joomla

JetBrains - один из мировых лидеров в разработке программного обеспечения для разработчиков. Её программные продукты - это IDE - профессиональные среды разработки, которые отличаются от простого блокнота/редактора с плагинами набором всевозможных инструментов для разработчиков, глубоким анализом кодовой базы, подсказками по ней и по языку программирования, отладкой ошибок и многим-многим другим. Одним из самых известных продуктов компании является IDE PHP Storm, который можно назвать отраслевым стандартом PHP-разработчика.

В статье How PhpStorm Helps Maintain PHP Open-Source Projects: Interviews and Real-World Examples в блоге компании описываются Open Source проекты, которым JetBrains оказывает поддержку (это могут быть бесплатные лицензии для разработчиков для некоммерческих проектов).

В список попали:

  • PHPUnit - фреймворк для unit-тестирования в PHP
  • Doctrine DBAL - библиотека для PHP, которая предоставляет лёгкий и гибкий слой для коммуникации с базой данных. Она поддерживает различные базы данных через единый и согласованный API.
  • CodeIgniter — популярный MVC-фреймворк для разработки на PHP
  • Joomla! - наша любимая CMS.

Эти названия (кроме "Joomla") чаще всего не слышат вебмастера и разработчики обычных сайтов и интернет-магазинов. Но эти названия хорошо знакомы PHP-разработчикам, которые создают сложные и высоконагруженные проекты и микросервисы. То, что Joomla оказалась в одном ряду с такими программными инструментами - делает ей честь.

🙏 За ссылку спасибо участнику нашего сообщества Ринату Кажетову (@rkazhet).

Подпишитесь на @joomlafeed

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

ProtectYourSite

  • Живу я здесь
  • 2364
  • 137 / 4
  • Безопасность вебсайтов
Не знаю, в какой раздел лучше, если что перенесите.
Итак, мое решение проблем с полями Publisher, Image, Даты публикаций/модификаций и непонятного mainEntityOfPage.
На основе шаблона Protostar
Редактируем файл шаблона /html/com_content/article/default.php
В область php где-то после defined('_JEXEC') or die; и перед ?> вставляем код обработки изображений. Внимание! Изображения у меня находятся в самой статье, если у вас не так, то стоит модифицировать в этом направлении.
Сам код:
Код
$myimage=$this->item->introtext;
preg_match_all('/<img[^>]+>/i', $myimage, $result);
preg_match_all('/(src)=("[^"]*")/i',$result[0][0], $img);
$timag=$img[2][0];
if(!empty($timag)){
 $timage=str_replace("\"","",$timag);}
 else
{
  $timage= 'images/logo.png';
}
$timage=JURI::base().$timage;
$size = getimagesize($timage);
Здесь же можно добавить OpenGraph разметку для соцсетей:
Код
$doc = JFactory::getDocument();
$doc->addCustomTag( '
<meta property="og:locale" content="ru_RU">
<meta property="og:type" content="article">
<meta property="og:title" content="'.$this->escape($this->item->title).'">
<meta property="og:site_name" content="Защита сайтов ProtectYourSite">
<meta name="twitter:card" content="summary_large_image">
<meta name="twitter:site" content="@Protect_Site">
<meta name="twitter:creator" content="@Protect_Site">
<meta property="og:url" content="'.JURI::current().'">
<meta property="og:description" content="'.$doc->getDescription().'">
<meta property="og:image" content="'.$timage.'">
');
Необходимые поля надо заменить на свои значения.
Дальше ищем, где у нас объявлен блок микроразметки  itemtype="http://schema.org/Article"
Я вставлял после
Код
<meta itemprop="inLanguage" content="<?php echo ($this->item->language === '*')? JFactory::getConfig()->get('language') : $this->item->language; ?>" />
И вставляем после следующие блоки
Код
<meta itemscope itemprop="mainEntityOfPage"  itemtype="https://schema.org/WebPage" itemid="<?php echo JURI::current(); ?>"/>
<meta itemprop="dateModified" content="<?php echo $this->item->modified; ?>">
              <meta itemprop="datePublished" content="<?php echo $this->item->publish_up; ?>">
<span style="display:none;" itemprop="image" itemscope itemtype="https://schema.org/ImageObject">
<img itemprop="url" src="<?php echo $timage;?>">
<meta itemprop="image" content="<?php echo $timage;?>">
<meta itemprop="width" content="<?php echo $size[0];?>">
<meta itemprop="height" content="<?php echo $size[1];?>">
</span>
<span itemprop="publisher" itemscope itemtype="https://schema.org/Organization">
<meta itemprop="name" content="Защита сайтов ProtectYourSite">
    <span itemprop="logo" itemscope itemtype="https://schema.org/ImageObject">
        <img itemprop="url" src="https://protectyoursite.ru/images/logo.png" style="display:none;"/>
        <meta itemprop="image" content="https://protectyoursite.ru/images/logo.png">
        <meta itemprop="width" content="141">
        <meta itemprop="height" content="160">
    </span>
</span>
Аналогично заменяя на свои значения в нужных местах. После этого сохраняем, очищаем кеш и смотрим полученный результат. Если всё правильно, то мы должны успешно проходить валидацию микроразметки

Стал проверять микроразметку по блогу, в итоге вылезло:
Необходимо указать значение для поля headline.
Необходимо указать значение для поля image.
Необходимо указать значение для поля publisher.

Рекомендуется заполнять поле mainEntityOfPage. Укажите значение, если оно известно.

Решил я это всё на основании того же стандартного шаблона и последней Joomla так:
Создаем в папке шаблона файл /html/layouts/joomla/content/blog_style_default_item_title.php и вставляем туда следующий код:

Код
<?php
/**
 * @package     Joomla.Site
 * @subpackage  Layout
 *
 * [member=126442]copyright[/member]   Copyright (C) 2005 - 2016 Open Source Matters, Inc. All rights reserved.
 * @license     GNU General Public License version 2 or later; see LICENSE.txt
 */

defined('JPATH_BASE') or die;

// Create a shortcut for params.
$params = $displayData->params;
$canEdit = $displayData->params->get('access-edit');
JHtml::addIncludePath(JPATH_COMPONENT.'/helpers/html');
$myimage=$displayData->introtext;
preg_match_all('/<img[^>]+>/i', $myimage, $result);
preg_match_all('/(alt|title|src)=("[^"]*")/i',$result[0][0], $img);
$timag=$img[2][1];
if(!empty($timag)){
 $timage=str_replace("\"","",$timag);}
 else
{
  $timage= 'images/logo.png';
}
$timage=JURI::base().$timage;
$size = getimagesize($timage);
?>

<?php if ($params->get('show_title') || $displayData->state == 0 || ($params->get('show_author') && !empty($displayData->author ))) : ?>
<div class="page-header">
<meta itemscope itemprop="mainEntityOfPage"  itemtype="https://schema.org/WebPage" itemid="<?php echo JRoute::_(
ContentHelperRoute::getArticleRoute($displayData->slug, $displayData->catid, $displayData->language)
); ?>"/>
<span style="display:none;" itemprop="image" itemscope itemtype="https://schema.org/ImageObject">
<img itemprop="url" src="<?php echo $timage;?>">
<meta itemprop="image" content="<?php echo $timage;?>">
<meta itemprop="width" content="<?php echo $size[0];?>">
<meta itemprop="height" content="<?php echo $size[1];?>">
</span>
<span itemprop="publisher" itemscope itemtype="https://schema.org/Organization">
<meta itemprop="name" content="Защита сайтов ProtectYourSite">
    <span itemprop="logo" itemscope itemtype="https://schema.org/ImageObject">
        <img itemprop="url" src="https://protectyoursite.ru/images/logo.png" style="display:none;"/>
        <meta itemprop="image" content="https://protectyoursite.ru/images/logo.png">
        <meta itemprop="width" content="141">
        <meta itemprop="height" content="160">
    </span>
</span>
<?php if ($params->get('show_title')) : ?>
<h2 itemprop="headline">
<?php if ($params->get('link_titles') && ($params->get('access-view') || $params->get('show_noauth', '0') == '1')) : ?>
<a href="<?php echo JRoute::_(
ContentHelperRoute::getArticleRoute($displayData->slug, $displayData->catid, $displayData->language)
); ?>" itemprop="url">
<?php echo $this->escape($displayData->title); ?>
</a>
<?php else : ?>
<?php echo $this->escape($displayData->title); ?>
<?php endif; ?>
</h2>
<?php endif; ?>

<?php if ($displayData->state == 0) : ?>
<span class="label label-warning"><?php echo JText::_('JUNPUBLISHED'); ?></span>
<?php endif; ?>

<?php if (strtotime($displayData->publish_up) > strtotime(JFactory::getDate())) : ?>
<span class="label label-warning"><?php echo JText::_('JNOTPUBLISHEDYET'); ?></span>
<?php endif; ?>

<?php if ((strtotime($displayData->publish_down) < strtotime(JFactory::getDate()))
&& $displayData->publish_down != JFactory::getDbo()->getNullDate()) : ?>
<span class="label label-warning"><?php echo JText::_('JEXPIRED'); ?></span>
<?php endif; ?>
</div>
<?php endif; ?>

Заменив логотип на своё значение.
После этих манипуляций блог стал проходить проверку микроразметки

Если есть комментарии по разметке, пишите)
« Последнее редактирование: 05.08.2018, 21:58:01 от ProtectYourSite »
*

Филипп Сорокин

  • Завсегдатай
  • 1918
  • 160 / 4
  • разработчик.москва
Это чё за комбаин? Фреймворком у продвинутых мастеров ныне пользоваться не в моде?
*

ChaosHead

  • Гуру
  • 5242
  • 451 / 13
Спасибо, полезно на самом деле, т.к. у Joomla уже неправильная разметка, после того как Google ввёл новые изменения.
Кстати говоря больше всего бесит, что картинки теперь требуется размечать так:

Цитировать
<span style=display:none; itemprop=image itemscope itemtype=https://schema.org/ImageObject>
<img itemprop=url src=https://yoursite.ru/images/news/Google_recaptcha_exploit.jpg>
<meta itemprop=image content=https://yoursite.ru/images/news/Google_recaptcha_exploit.jpg>

я не понимаю кому это нужно...

Кстати аккуратнее с display:none в разметке, можно схлопотать санкции - она перестанет отображаться для сайта и таких примеров не мало.
*

Missile

  • Завсегдатай
  • 1116
  • 90 / 1
Я после тщетных попыток угодить и Яндексу, и Гуглю просто забила на это дело.
Мне кажется. вебмастерам пора устраивать акции сопротивления, потому что веб идёт куда-то не туда. Если бы, к примеру, все разом отказались от микроразметки, то в мозгу у поисковиков (точнее, у тех, кто за ними стоит) наверняка бы что-то щёлкнуло.
*

Septdir

  • Живу я здесь
  • 3370
  • 168 / 4
Ну я немного попарился и сделал и для Яндекс и для Google.  
Насчёт дисплей ноне.  Я просто сделал класс со стилем.
Display block
Width 0
Height 0
Font-size 0
Line-height 0
Overflow hidden
Да и все.
Не можете справиться с задачей сами пишите, решу ее за вас, не бесплатно*.
*Интересная задача, Деньги или Бартер. Натурой не беру!
CodersRank | Контакты | Мой GitHub | Workshop
*

Vasiliy111

  • Захожу иногда
  • 248
  • 5 / 0
А если шаблон используется beez-3. В этом шаблоне нет папки content. Куда в этом случае сбрасывать blog_style_default_item_title.php?

Я уже и в корень папки Joomla ложил, и создавал отдельную папку content - ничего не меняется
*

draff

  • Гуру
  • 5801
  • 434 / 7
  • ищу работу
Создаем в папке шаблона файл /html/layouts/joomla/content/blog_style_default_item_title.php
Папка HTML есть в шаблоне, если нет- создайте
*

Vasiliy111

  • Захожу иногда
  • 248
  • 5 / 0
В шаблоне по указанному пути есть: /html/layouts/joomla/system/message.php

Я ж говорю сбрасывал и в папку Joomla и в ней создавал папку content никаких изменений
*

ProtectYourSite

  • Живу я здесь
  • 2364
  • 137 / 4
  • Безопасность вебсайтов
автора выставлено показывать в настройках материалов?
*

Vasiliy111

  • Захожу иногда
  • 248
  • 5 / 0
Да, автор есть.

Еще интересный момент, добавляю в /html/com_content/article/default.php код:
 
Цитировать
$myimage=$this->item->introtext;
preg_match_all('/<img[^>]+>/i', $myimage, $result);
preg_match_all('/(alt|title|src)=("[^"]*")/i',$result[0][0], $img);
$timag=$img[2][1];
if(!empty($timag)){
 $timage=str_replace("\"","",$timag);}
 else
{
  $timage= 'images/logo.png';
}
$timage=JURI::base().$timage;
$size = getimagesize($timage);

Вылазит ошибка
Warning: getimagesize(http://moy-sayt/kak vyrastit arbuz na balkone): failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found in /templates/beez3/html/com_content/article/default.php on line 24

в строке 24 такой код:
$size = getimagesize($timage);




Причем на хостинге все изображения проименовыны через дефиз, т.е. kak-vyrastit-arbuz-na-balkone.jpg

В исходном коде страницы такая же ерунда
Цитировать
<span style="display:none;" itemprop="image" itemscope itemtype="https://schema.org/ImageObject">
<img itemprop="url" src="http://moy-sayt/kak vyrastit arbuz na balkone">
<meta itemprop="image" content="http://moy-sayt/kak vyrastit arbuz na balkone">
<meta itemprop="width" content="">
<meta itemprop="height" content="">
</span>
« Последнее редактирование: 31.07.2018, 21:14:25 от Vasiliy111 »
*

Mehanick

  • Давно я тут
  • 846
  • 5 / 0
в к2 уже включена вся разметка
*

Vasiliy111

  • Захожу иногда
  • 248
  • 5 / 0
Если установить данный код под строкой <meta itemprop="inLanguage" content=

Код
<meta itemscope itemprop="mainEntityOfPage"  itemtype="https://schema.org/WebPage" itemid="<?php echo JURI::current(); ?>"/>
<meta itemprop="dateModified" content="<?php echo $this->item->modified; ?>">
              <meta itemprop="datePublished" content="<?php echo $this->item->publish_up; ?>">
<span style="display:none;" itemprop="image" itemscope itemtype="https://schema.org/ImageObject">
<img itemprop="url" src="<?php echo $timage;?>">
<meta itemprop="image" content="<?php echo $timage;?>">
<meta itemprop="width" content="<?php echo $size[0];?>">
<meta itemprop="height" content="<?php echo $size[1];?>">
</span>
<span itemprop="publisher" itemscope itemtype="https://schema.org/Organization">
<meta itemprop="name" content="Защита сайтов ProtectYourSite">
    <span itemprop="logo" itemscope itemtype="https://schema.org/ImageObject">
        <img itemprop="url" src="https://protectyoursite.ru/images/logo.png" style="display:none;"/>
        <meta itemprop="image" content="https://protectyoursite.ru/images/logo.png">
        <meta itemprop="width" content="141">
        <meta itemprop="height" content="160">
    </span>
</span>

Валидатор микроразметки не ругается (ошибок нет) но считаю что в моем случае это условие не совсем правильно:

Код
<img itemprop="url" src="<?php echo $timage;?>">
<meta itemprop="image" content="<?php echo $timage;?>">
<meta itemprop="width" content="<?php echo $size[0];?>">
<meta itemprop="height" content="<?php echo $size[1];?>">

Так как в исходном коде в строках:

<img itemprop="url" - "отображается ссылка на главную страницу"
<meta itemprop="image" - пусто
<meta itemprop="width" - пусто
<meta itemprop="height" - пусто

Помогите решить проблему. Думаю решение уже совсем близко.
*

ProtectYourSite

  • Живу я здесь
  • 2364
  • 137 / 4
  • Безопасность вебсайтов
А картинки есть в материале ? Они в тексте материала прописаны ? И лучше привести полный код файла.
*

Vasiliy111

  • Захожу иногда
  • 248
  • 5 / 0
Да картинки в материале (статье) есть и не одна. Выводятся обычным способом <img src="" alt="" " title="" />

А какой именно код файла нужен default.php?
*

ProtectYourSite

  • Живу я здесь
  • 2364
  • 137 / 4
  • Безопасность вебсайтов
Где вставляли микроразметку
*

Vasiliy111

  • Захожу иногда
  • 248
  • 5 / 0
Правил шаблон/html/com_content/article/default.php

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

С данным кодом в исходном файле страницы имею:

Код
<span style="display:none;" itemprop="image" itemscope itemtype="https://schema.org/ImageObject">
<img itemprop="url" src="/">
<meta itemprop="image" content="">
<meta itemprop="width" content="">
<meta itemprop="height" content="">
</span>
*

ProtectYourSite

  • Живу я здесь
  • 2364
  • 137 / 4
  • Безопасность вебсайтов
Так надо допиливать блок с изображением, которое у вас выдавало ошибку. Пробуйте после:
Код
preg_match_all('/<img[^>]+>/i', $myimage, $result);
preg_match_all('/(alt|title|src)=("[^"]*")/i',$result[0][0], $img);
добавить
Код
var_dump($result);var_dump($img);die();
и смотреть, что приходит
*

Vasiliy111

  • Захожу иногда
  • 248
  • 5 / 0
Нееее, так вообще белый экран и отблик изображения

Код
array(1) { [0]=> array(1) { [0]=> string(295) "


*

Vasiliy111

  • Захожу иногда
  • 248
  • 5 / 0
Спасибо ProtectYourSite за помощь с микроразметкой. Всем у кого будут проблемы обращайтесь к нему.
*

kern.USR

  • Давно я тут
  • 827
  • 68 / 1
Всем у кого будут проблемы обращайтесь к нему.
Звучит, как проклятие  :dry:
*

Vasiliy111

  • Захожу иногда
  • 248
  • 5 / 0
А что у Google изменились какие то требования? Обнаружил что появилось две ошибки (раньше не было). На сайте изменений ни каких не происходило.

1.BreadcrumbList (хлебные крошки) - item   Необходимо указать значение для поля item.

2. Article - Атрибут logo.height имеет недопустимое значение.



*

ProtectYourSite

  • Живу я здесь
  • 2364
  • 137 / 4
  • Безопасность вебсайтов
Та же фигня, баг зафиксировали и обещали исправить.
Чтобы оставить сообщение,
Вам необходимо Войти или Зарегистрироваться
 

Архив статей – в чём суть?

Автор Gerostrat

Ответов: 3
Просмотров: 768
Последний ответ 14.03.2024, 21:03:48
от sivers
Перестал работать просмотр блога категории

Автор selmax

Ответов: 1
Просмотров: 632
Последний ответ 01.12.2022, 21:41:07
от NewUsers
Массовый импорт статей из Excel в Joomla

Автор koskanalya

Ответов: 1
Просмотров: 733
Последний ответ 05.11.2022, 14:15:34
от antony2606
Как получить ссылку на материал для использования в макете блога?

Автор Chigolberi

Ответов: 19
Просмотров: 5501
Последний ответ 10.06.2022, 00:27:40
от Леон
Навигация внутри &quot;Блога категории&quot;

Автор RomanA

Ответов: 8
Просмотров: 600
Последний ответ 12.04.2022, 15:46:01
от marksetter