Новости 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 Гость просматривают эту тему.
  • 1 Ответов
  • 5776 Просмотров
*

Vaseks

  • Новичок
  • 4
  • 0 / 0
Проблема с левой колонкой! Не могу отредактировать ширину и высоту строчек. Слова залазивают друг на друга, категория на категорию. Помогите.
Код
@charset "utf-8";
/*Code by Juergen Koller
author url: http//www.lernvid.com
copyright: Lernvid.com - Lernvideos Tutorials Templates PSD-Files und mehr...
*/
body  {
font: 14px Verdana, Arial, Helvetica, sans-serif;
background: #000000;
margin: 0px;
padding: 0px;
text-align: center;
color: #000000;
}
/* Sitetitle in the Header Start */
a.sitetitle {
float: left;
width: auto;
font-size: 100%;
font-weight:bold;
color: #000 !important; /* Color of the Sitetitle */
text-shadow: 0 1px 0 #fff;
margin: 180px 0 0 70px;
outline:none;
}
a.sitetitle:hover {
color: #050505 !important; /* Hover color of the Sitetitle */
text-shadow: 0 1px 0 #fff;
text-decoration:none;
border-bottom:1px dotted #050505;
}
/* Sitetitle in the Header End */

/* Logo Start*/
#logo {
width: 300px;
height: 100px;
background:black;
position:absolute;
top: 50px;
left:70px;
background-image: url(../images/logo.gif); /* image 300x100 */
background-repeat: no-repeat;
opacity: .7; /* 70% visible */
-moz-box-shadow: 5px 5px 5px #000;
-webkit-box-shadow: 5px 5px 5px #000;
box-shadow: 5px 5px 5px #000;
-moz-border-radius: 7px;
-webkit-border-radius: 7px;
border-radius: 7px;
}
#logo:hover {
opacity: 1; /* on hover 100% visible */
}
/* Logo End*/

#left_border {
width: 100%;
text-align: left;
background-repeat: repeat-y;
background-color: #FFFFFF;
margin: 0 auto;
    }  
#right_border {
background-repeat: repeat-y;
background-position: right;
}
#bottom {
background-repeat: repeat-x;
background-position: bottom;
width: 100%;
}
#bottom_right {
background-repeat: no-repeat;
background-position: bottom right;
}
#bottom_left {
background-repeat: no-repeat;
background-position: bottom left;
}
#header  {
background: #000000;
height: 40px;
background-image: url(../images/header_bg_01.jpg);
line-height: 30px;
padding: 0 15px 0 15px;
}
 
#date {
font-size: 10px;
float: left;
color: #555;
margin-right: 20px;
height: 40px;
line-height: 40px;
}
#gotop {
float:right;
padding: 3px 25px;
display:block;
}
#breadcrumb {
float: left;
color: #fff;
font-size: 10px;
height: 40px;
line-height: 42px;
overflow:hidden;
max-width: 450px;
}
#breadcrumb a {
height: 40px;
line-height: 40px;
}
#search_out {
float: right;
background-image: url(../images/search.jpg);
background-repeat: no-repeat;
width: 297px;
height: 36px;
}
#search {
margin: 10px 0 7px 45px;
}
#search input,
#search .inputbox {
float: left;
margin: 0;
background: none;
border: none;
padding: 0 0 0 5px;
}
#search input:hover,
#search .inputbox:hover {
color: #999;
}
#banner_out {
background-repeat: repeat-x;
height: 250px;
width: 100%;
}
#banner_in {
float: left;
color: #FFFFFF;
height: 250px;
font-size: 40px;
background-repeat: no-repeat;
background-position: left;
width: 100%;
font-family: Verdana, Arial, sans-serif;
}
#banner {
font-size:10px;
float: right;
width: auto;
padding: 30px 30px 0px 0px;
max-width: 500px;
}
#topmenu_out {
height: 38px;
background-repeat: repeat-x;
}
#topmenu_left {
height: 38px;
background-repeat: no-repeat;
}
#topmenu_right {
height: 38px;
background-repeat: no-repeat;
background-position: right;
}
#topmenu {
height: 38px;
line-height: 38px;
color: #fff;
text-align: left;
padding: 0 27px 0 27px;
float: left;
margin: 0 0 0 50px;
}
#topmenu ul,
#topmenu li {
display: inline;
padding: 0px;
margin: 0px;
list-style-type: none;
}
#topmenu a {
color: #fff;
float: left;
height: 38px;
line-height:38px;
border: none;
background: none;
font-size: 12px;
font-family: Tahoma, Arial, Verdana;
padding: 0px 15px;
line-height: 33px;
font-weight: bold;
text-shadow: 1px 1px 1px #000;
}
#topmenu  a:hover,
#topmenu #active_menu,
#topmenu li#current a {
text-decoration: none;
background-image: url(../images/topmenu_over.jpg);
color: #FFFFFF;
background-repeat: repeat-x;
}
#container {
padding-bottom: 10px;
}
#maincontent {
padding: 0px 16px;
}
#left_out {
clear:both;
width: 188px;
float: left;
padding: 0;
margin: 0;
}
#right_out  {
width: 182px;
float: right;
padding: 0;
margin: 0;
}

#left_out ul, #left_out li, #right_out ul, #right_out li {
list-style-type: none;
padding: 0;
margin: 0;
}
#left_out ul.menu li a,
#left_out ul.menu li#current a,
#left_out a.mainlevel,
#right_out ul.menu li a,
#right_out ul.menu li#current a,
#right_out a.mainlevel {
display: block;
height: 25px;
line-height: 25px;
background-repeat: no-repeat;
background-position: left;
width: 172px;
font-size: 13px !important;
font-weight: normal;
text-indent: 20px !important;
text-shadow: 0 1px 0 #aaa;
}
#left_out ul.menu a:hover,
#right_out ul.menu a:hover,
#left_out a.mainlevel:hover,
#right_out a.mainlevel:hover,
#left_out #active_menu,
#right_out #active_menu,
#left_out ul.menu li#current a,
#right_out ul.menu li#current a {
background-image: url(../images/mainlevel_over.gif);
text-decoration: none;
background-repeat: no-repeat;
background-position: left;
color: #000000 !important;
}
#left_out a.sublevel,
#left_out ul.menu li#current li a,
#left_out ul.menu li li a,
#left_out ul.menu li li#current a,
#left_out ul.menu li li#current li a,
#left_out ul.menu li li li a,
#right_out a.sublevel,
#right_out ul.menu li#current li a,
#right_out ul.menu li li a,
#right_out ul.menu li li#current a,
#right_out ul.menu li li#current li a,
#right_out ul.menu li li li a {
background-repeat: no-repeat;
height: 20px;
line-height: 20px;
background-position: left;
text-indent: 20px !important;
border: none;
display: block;
}
#left_out a.sublevel#active_menu,
#right_out a.sublevel#active_menu,
#left_out a.sublevel:hover,
#right_out a.sublevel:hover,
#left_out ul.menu li#current li a,
#left_out ul.menu li li#current a,
#left_out ul.menu li li#current li a,
#right_out ul.menu li#current li a,
#right_out ul.menu li li#current a,
#right_out ul.menu li li#current li a,
#left_out ul.menu li#current a:hover,
#right_out ul.menu li#current a:hover,
#left_out ul.menu li li a:hover,
#right_out ul.menu li li a:hover{
text-decoration: none;
background-repeat: no-repeat;
background-position: left;
color: #000000 !important;
}
#left_out .module,
#right_out .module,
#left_out .moduletable,
#right_out .moduletable,
#left_out .module_text,
#right_out .module_text {
text-align:center;
}
#left_out .module,
#right_out .module,
#left_out .moduletable,
#right_out .moduletable,
#left_out .module_menu,
#right_out .module_menu,
#left_out .module_text,
#right_out .module_text {
background-repeat: repeat-y;
margin-top: 5px;
}
#left_out .module div,
#right_out .module div,
#left_out .moduletable div,
#right_out .moduletable div,
#left_out .module_menu div,
#right_out .module_menu div,
#left_out .module_text div,
#right_out .module_text div {
background-position: bottom;
background-repeat: no-repeat;
width: 182px
}
#left_out .module div div,
#right_out .module div div,
#left_out .moduletable div div,
#right_out .moduletable div div,
#left_out .module_menu div div,
#right_out .module_menu div div,
#left_out .module_text div div,
#right_out .module_text div div {
background-position: top;
background-repeat: no-repeat;
}
#left_out .module div div div,
#right_out .module div div div,
#left_out .moduletable div div div,
#right_out .moduletable div div div,
#left_out .module_menu div div div,
#right_out .module_menu div div div,
#left_out .module_text div div div,
#right_out .module_text div div div{
background: none;
padding: 5px 5px 10px 5px;
overflow: hidden;
width: 172px;
}
#left_out .module div div div div,
#right_out .module div div div div,
#left_out .moduletable div div div div,
#right_out .moduletable div div div div,
#left_out .module_menu div div div div,
#right_out .module_menu div div div div,
#left_out .module_text div div div div,
#right_out .module_text div div div div {
padding: 0;
}
#left_out h3,
#right_out h3 {
height: 35px;
width: 173px;
background-repeat: no-repeat;
color: #FFFFFF;
line-height: 35px;
text-indent: 20px;
padding: 0;
margin: 0 0 5px 0;
font-size: 13px;
font-weight: bold;
text-align:left;
overflow:hidden;
}
#content_outleft,
#content_outmiddle,
#content_outright {
margin: 0 0 10px 0;
padding-top: 5px;
}
#content_outleft {
margin: 0 0 0 188px;
}
#content_outmiddle {
margin: 0 188px;
}
#content_outright {
margin: 0 188px 0 0;
}
#content {
background-repeat: repeat-x;
background-position: bottom;
width: 100%;
overflow:auto;
border-top:2px solid #eee;
}
#content_border_left {
background-repeat: repeat-y;
background-position: top left;
}
#content_border_right {
background-repeat: repeat-y;
background-position: top right;
}
#content_bottom_right {
background-repeat: no-repeat;
background-position: bottom right;
}
#content_bottom_left {
background-repeat: no-repeat;
background-position: bottom left;
padding: 15px;
}
#content_bottom_left table {
padding: 10px;
width: 100%;
}
.user_bg,
.user_left,
.user_right {
height: 148px;
}
.user_bg {
margin: 10px 0 10px 0;
padding: 0;
background-repeat: repeat-x;
width: 100%;
}
.user_left {
background-repeat: no-repeat;
background-position: left top;
}
.user_right {
background-repeat: no-repeat;
background-position: right top;
}
.user_bg .topmodule_usertwo {
width: 45%;
height: 140px;
margin: 0px;
float: left;
padding: 0px;
}
.user_bg .topmodule_userone {
width: 100%;
height: 140px;
margin: 0px;
float: left;
padding: 0px;
}
.user_bg ul,
.user_bg li {
margin: 0px;
padding: 0px;
list-style-type: square;
}
.user_bg th,
.user_bg h3 {
height: 28px;
line-height: 28px;
font-size: 14px;
color: #FFFFFF;
padding: 0px 5px;
font-family: Arial, Helvetica, sans-serif;
margin: 0 0 5px 0;
font-weight: bold;
}
.user_bg .user_inside {
margin: 5px;
height: 136px;
overflow: hidden;
}
.user_bg .user_inside1 {
margin: 5px 5px 5px 15px;
height: 136px;
overflow: hidden;
}
.article_separator {
height: 0px;
border-top: 1px solid #eee;
border-bottom: 1px solid #f0f0f0;
width: 100%;
display:inline-block;
}
.separator {
width: 2%;
min-width: 22px;
height: 140px;
float: left;
background-repeat: no-repeat;
background-position: top center;
}
#user_bottom {
padding: 0px 16px;
margin-top: 5px;
}
#user_bottom .user_bg {
margin: 30px 0 0 0;
}
.user_bg .bottom_user, .user_bg .bottom_user1, .user_bg .bottom_user2, .user_bg .bottom_user3 {
width: 30%;
height: 140px;
margin: 0px;
float: left;
padding: 0px;
}
.user_bg .bottom_user1 {
width: 100%;
}
.user_bg .bottom_user2 {
width: 45%;
}
.user_bg .bottom_user3 {
width: 30%;
}
.user_bg .bottom_user1 {
width: 30%;
height: 140px;
margin: 0px;
float: left;
padding: 0 0 0 15px;
}
#footer {
background-color: #000000;
border-top: 2px solid #cccccc;
color: #fff;
text-align: center;
padding: 5px 10px;
font-family: Tahoma, Arial, Verdana;
min-height: 30px;
}
#copy {
font-size: 11px;
padding-left: 10px;
}
#othermenu {
overflow: hidden;
font-size: 10px;
}

#othermenu_in ul,
#othermenu_in li {
list-style-type: none;
margin: 0;
padding: 0;
display: inline;
}
#othermenu_in {
margin-right: -2px;
}
#othermenu_in a {
color: #FFFFFF;
border-right: 1px solid #8B8B8B;
padding: 0px 20px;
}
.clr {
clear:both;
}
p, td, tr {
font-size: 14px;
padding: 0;
margin: 0;
font-family: Tahoma, Arial, Verdana;
}
ul {
margin: 0px;
padding: 0px 0px 0px 18px;
list-style-type: square;
}
a:link, a:visited {
color: #0d63aa;
text-decoration: none;
}
a:hover {
text-decoration: underline;
}
.button {
color: #FFFFFF;
padding: 3px 5px;
background-image: url(../images/button.jpg);
background-repeat: repeat-x;
background-color: #0d63aa;
margin: 5px 0px;
border: 1px solid #000;
font-family: Tahoma, Arial, Verdana;
font-size: 12px;
font-weight: bold;
-moz-border-radius: 7px;
-webkit-border-radius: 7px;
border-radius: 7px;
}
.button:hover {
color: #FFFFFF;
background:black;
}
.inputbox, input {
border-top: 1px solid #777;
border-left: 1px solid #777;
border-right: 1px solid #ccc;
border-bottom: 1px solid #ccc;
}
.inputbox:hover, input:hover {
background: #f0f0f0;
}
.input, img {
border: none;
}
.search {}
a.readon {
background-image: url(../images/readon.gif);
font-size: 12px;
height: 20px;
line-height: 20px;
width: auto;
color: #999;
float: right;
margin: 10px 0 0 0;
padding: 0 15px;
border: 1px solid #ddd;
-moz-border-radius: 7px;
-webkit-border-radius: 7px;
border-radius: 7px;
display:block;
}
a.readon:hover {
color: #fff;
}
.back_button {
background-image: url(../images/readon.gif);
height: 20px;
line-height: 20px;
width: auto;
color: #000;
float: left;
margin: 10px 0 0 0;
padding: 0 10px;
border: 1px solid #ddd;
}
.back_button a:link {
color: #FFFFFF;
}
.componentheading {
background-image: url(../images/componentheading.jpg);
height: 30px;
line-height: 30px;
text-align:center;
padding: 0;
color: #ffffff;
font-weight: bold;
font-size: 14px;
text-shadow: 0px 1px 0 #999;
overflow:hidden;
-moz-border-radius: 7px;
-webkit-border-radius: 7px;
border-radius: 7px;
}
.contentheading {
background-image: url(../images/contentheading.gif);
background-repeat:no-repeat;
padding: 0 0 0 34px;
height:32px;
line-height:32px;
overflow:hidden;
}
.contentheading, .contentheading a {
font-size: 22px;
font-family: Arial, Helvetica, sans-serif;
color: #404040;
text-shadow: 0px 1px 0 #000;
}
.contentdescription {
padding: 10px;
}
.sectiontableheader {
padding: 3px 5px;
background-color: #eee;
color: #000;
font-size: 15px;
border-top:2px solid #aaa;
border-bottom:2px solid #aaa;
}
.sectiontableentry1,
.sectiontableentry2 {
background-repeat: repeat-x;
height: 26px;
line-height: 26px;
font-size: 12px;
text-indent: 5px;
background-position: bottom;
background-color: #FFFFFF;
}
.createdate,
.small {
font-size: 10px;
color: #999999;
}
.highlight, label.invalid {
color: red;
background: #efefef;
}
.contentpane {
width: 100%;
}
h1, h2, h3, h4, h5, h6 {
text-shadow: 0 1px 2px #000;
}
.blog_more {
line-height: 150%;
margin: 0 0 30px 0;
}
#advert, #top {
width:auto;
padding:10px;
border: 1px solid #eee;
background: #f9f9f9;
margin: 0 0 10px 0;
-moz-border-radius: 7px;
-webkit-border-radius: 7px;
border-radius: 7px;
}
#advert .moduletable, #top .moduletable {
margin:0;
padding:0;
}
#advert .moduletable h3, #top .moduletable h3 {
margin:0 0 10px 0;
}
!
« Последнее редактирование: 17.02.2011, 14:50:16 от Vaseks »
*

chiperok

  • Захожу иногда
  • 100
  • 2 / 0
Re: Проблема с левой колонкой
« Ответ #1 : 22.02.2011, 11:54:36 »
ну так дай ссылку, CSS мало о чем скажет!
Чтобы оставить сообщение,
Вам необходимо Войти или Зарегистрироваться
 

проблема при выборе типа меню

Автор imarketing

Ответов: 0
Просмотров: 3741
Последний ответ 09.08.2016, 08:44:18
от imarketing
Проблема с меню. Может кто помочь?

Автор HoBi4oK

Ответов: 15
Просмотров: 3525
Последний ответ 09.06.2016, 06:37:02
от HoBi4oK
Проблема с меню. Может кто помочь?

Автор HoBi4oK

Ответов: 0
Просмотров: 1563
Последний ответ 08.06.2016, 16:49:49
от HoBi4oK
Проблема с боковым меню

Автор dfecp

Ответов: 1
Просмотров: 1433
Последний ответ 01.07.2015, 14:50:37
от dfecp
Проблема с назначением ссылок в пунктах меню Joomla

Автор Dim

Ответов: 16
Просмотров: 3505
Последний ответ 06.03.2014, 19:04:11
от diana1975