Новости Joomla

Модификация WT JShopping products anywhere - Uikit макетИтак, дано: музыкальный журнал, в котором...

Модификация WT JShopping products anywhere - Uikit макетИтак, дано: музыкальный журнал, в котором...

Модификация WT JShopping products anywhere - Uikit макетИтак, дано: музыкальный журнал, в котором представлены новости, интервью, рецензии и есть небольшой магазин на JoomShopping. Возникла необходимость внутри Joomla статей вставлять упоминание релиза и кнопочку «добавить в корзину». Я взял плагин WT JShopping products anywhere Сергея Толкачева (@webtolkru). Плагин отображает название товара и ссылку. При помощи напильника, ИИ и навыков вёрстки появился Uikit макет для шаблонов на базе Yootheme Pro.Учитываается мобильная версия - телефоны и ipad.Кнопка добавления в корзину работает по Ajax и появляется всплывающее окно (Notification Bar от Uikit) с информацией.Пока это базовый вариант, требующий доведения до лоска, однако он уже работает и его можно применять на проектах.Взять макет можно здесь.А плагин вставки товаров в материалы можно забрать здесь.Приветствуется доведение до ума и оформление в виде PR.

WT Content Image Gallery v.1.2.3 - плагин галереи изображений для Joomla

WT Content Image Gallery v.1.2.3 - плагин галереи изображений для Joomla

👩‍💻 WT Content Image Gallery v.1.2.3 - плагин галереи изображений для Joomla.Пакет плагинов галереи изображений и видео для вставки в материалы и модули Joomla, а так же везде, где работают плагины группы content. Поддержка собственных макетов вывода для галерей. Смешанные фото+видео галереи. Плагин создан как замена Simple Image Gallery и поддерживает синтаксис {gallery}{/gallery}.👩‍💻 v.1.2.3. Что нового?- Обработка вступительного и полного текста для материалов Joomla. Добавлена обработка шорткодов в полном и вступительном текстах материалов Joomla.- Системные требования. Повышены минимальные требования до Joomla 5 и PHP 8.1.- Мелкие правки. Исправлена ошибка работы макета по умолчанию в плагине контента.- Joomla 6. Пакет плагинов успешно протестирован на Joomla 6.Страница расширения.GitHub расширенияJoomla Extensions Directory@joomlafeed#joomla #расширения

Совет по Joomla: несколько значений по умолчанию в XML-формах для стандартных полей типа list

👩‍💻 Совет по Joomla: несколько значений по умолчанию в XML-формах для стандартных полей типа list.При работе над плагином возникла необходимость указать стандартный набор из нескольких элементов стандартного поля списка. И хотелось указать их в стандартном же атрибуте default для полей. Когда это нужно?Когда Ваши пользователи устанавливают плагин и НЕ заходят в настройки - в коде вы можете использовать значения по умолчанию с помощью класса Registry (писал об этом ранее) и всегда быть уверенным, что хоть какие-то жизненно необходимые параметры к вам придут всегда. 🧐 Но как сделать то же самое для интерфейса админки?Пользователя нужно направлять, предлагать очевидный работоспособный сценарий для начала, а дальше он уже сам разберется. Когда человек заходит в параметры свежеустановленного плагина в Form ещё нет данных и параметры по умолчанию выставляются из атрибутов default в xml-полях.
<field name="showdesc" type="radio"                       label="PLG_CFI_PARAM_SHOWDESC"                       class="btn-group btn-group-yesno"                       default="1">                    <option value="0">JNO</option>                    <option value="1">JYES</option>                </field>
Здесь по умолчанию будет включено "Да". И если пользователь не переключит параметр, то при сохранении мы ожидаемо получим "да" в params плагина.Для поля списков type=&quot;list&quot; можно указать значение по умолчанию и многие знают, что его можно указать только одно.
<field type="list"                       name="article_fields"                       label="article_fields"                       description="article_fields_desc"                       layout="joomla.form.field.list-fancy-select"                       multiple="true"                       default="id"                >                    <option value="id">id</option>                    <option value="title">title</option>                    <option value="alias">alias</option>                    <option value="introtext">introtext</option>                    <option value="fulltext">fulltext</option>                    <option value="state">state</option></field>
Но у нас поле с множественным выбором (атрибут multiple) и хотелось бы указать несколько значений по умолчанию...Оказывается, так можно сделать. Для этого в атрибуте default нужно указать json с нужными параметрами в виде {int}key : {string} value.Например, default='{"0":"id","1":"title"}'.
<field type="list"                       name="article_fields"                       label="article_fields"                       description="article_fields_desc"                       layout="joomla.form.field.list-fancy-select"                       multiple="true"                       default='{"0":"id","1":"title"}'                >                    <option value="id">id</option>                    <option value="title">title</option>                    <option value="alias">alias</option>                    <option value="introtext">introtext</option>                    <option value="fulltext">fulltext</option>                    <option value="state">state</option></field>
⚠️ Обратите внимание на кавычки! Поскольку json_decode не понимает одинарные кавычки собственно json нужно писать с двойными, а значение для атрибута default писать в одинарные.🙏 За подсказанное решение огромное спасибо участникам нашего сообщества - разработчикам Дмитрию Васюкову (@fictionlabs) и Игорю Бердичевскому (@septdir).@joomlafeed#joomla #разработка #webdev #development

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

danik.html

  • Живу я здесь
  • 2650
  • 353 / 4
Тема такая что мне часто приходится делать шаблоны под Joomla. К счастью почти все модули написаны по канонам Joomla, и их можно перешаблонизировать в папке html/module_name/layout_name.php

Однако иногда нужно для разных экземпляров модуля иметь разный layout. Такая проблема часто возникает с mod_mainmenu и mod_newsflash.
Решение достаточно простое - добавлять к модулям параметр выбора шаблона. делается это очень просто:

1)добавляем в манифест (xml-файл модуля) новый параметр:
Код: xml
<param name="layout" type="modulelayout" module="mod_имя_модуля" label="Layout" description="Select layout" />
Типа modulelayout Joomla не знает, поэтому мы его создадим сами.
2)добавляем атрибут addpath элементу params:
Код: xml
<params addpath="/modules/mod_имя_модуля/elements">
Таким образом мы указываем что неизвестные типы параметров надо искать в данной папке
3)создаем /modules/mod_имя_модуля/elements/modulelayout.php . Вставляем туда следующий код:
[spoiler title="modulelayout.php"]
Код: php
<?php

// no direct access
defined('_JEXEC') or die('Restricted access');
jimport('joomla.filesystem.folder');
jimport('joomla.filesystem.file');

class JElementModuleLayout extends JElement
{
var $_name = 'ModuleLayout';

function fetchElement($name, $value, &$node, $control_name)
{
global $mainframe;
$db =& JFactory::getDBO();

// get current template
$query = 'SELECT template'
.' FROM #__templates_menu'
.' WHERE client_id = 0'
.' AND menuid = 0'
;
$db->setQuery( $query );
$template = $db->loadResult();
$module = $node->attributes('module');

// If a template, extension and view are present build the options.
if ($template && $module) {

// Build the search paths for layouts.
$bPath = JPath::clean(JPATH_SITE.DS.'modules'.DS.$module.DS.'tmpl');
$tPath = JPath::clean(JPATH_SITE.DS.'templates'.DS.$template.DS.'html'.DS.$module);

// Add the default option.
$options[] = JHTML::_('select.option', '', JText::_('Default'));

// Add the layout options from the first path.
if (is_dir($bPath) && ($files = JFolder::files($bPath, '^[^_]*\.php$'))) {
$options[] = JHTML::_('select.option',  '<OPTGROUP>', JText::_( 'Module' ) );
foreach ($files as $file) {
$options[] = JHTML::_('select.option', JFile::stripExt($file));
}
//$options[] = JHTML::_('select.option',  '</OPTGROUP>' );
}

// Add the layout options from the second path.
if (is_dir($tPath) && ($files = JFolder::files($tPath, '^[^_]*\.php$'))) {
$options[] = JHTML::_('select.option',  '<OPTGROUP>', JText::_( 'Template' ) );
foreach ($files as $file) {
$options[] = JHTML::_('select.option', JFile::stripExt($file));
}
//$options[] = JHTML::_('select.option',  '</OPTGROUP>' );
}
return JHTML::_('select.genericlist', $options, $control_name.'['.$name.']', null, 'value', 'text', $value);
}

}
}
[/spoiler]
Мы создали новый тип параметра, который генерирует список найденных layout'ов в папке модуля и шаблона.
4)Меняем в mod_имя_модуля.php вызов layout'а на следующий:
Код: php
require( JModuleHelper::getLayoutPath('mod_имя_модуля', $params->get('layout', 'default')) );


К счастью в Joomla 1.6 тип modulelayout уже содержится в библиотеке, и все стандартные модули имеют этот параметр слава тапочкам.
Ну а пока мы живем с j 1.5 прошу разработчиков проделать эти нехитрые 4 шага чтобы помочь бедным верстальшикам обуздать ваши модули )
« Последнее редактирование: 12.09.2010, 20:16:21 от danik.html »
【Мегапак Virtuemart:
 • метатеги (description,keywords)
 • заголовки (title)
 • красивые алиасы (чпу) без тормозов и дублей!
*

danik.html

  • Живу я здесь
  • 2650
  • 353 / 4
Сделал маленькую правку благодаря которой layout'ы в списке разделяются на те что из модуля (родные) и те что из шаблона.
Если в шаблоне layout перекрыт, то не имеет значения какой из них выбрать в списке...
【Мегапак Virtuemart:
 • метатеги (description,keywords)
 • заголовки (title)
 • красивые алиасы (чпу) без тормозов и дублей!
*

beliyadm

  • Легенда
  • 9758
  • 1665 / 66
  • Севастополь, Россия
То ли я туплю, то ли не пойму практического применения, поясните?
Все истины, которые я хочу вам изложить, — бесстыдная ложь. Сделать всё хорошо
TLG: @Beliyadm
*

danik.html

  • Живу я здесь
  • 2650
  • 353 / 4
Практическое применение в основном разработчикам шаблонов - к одному модулю можно создать несколько layout'ов, которые будут доступны для выбора в параметрах модуля.

Неоднократно сталкивался с такой задачей, и очень обрадовался когда ковырялся в Joomla 1.6 beta и увидел решение данной проблемы.

Так же плюс в том что юзеры модуля могут создавать свои layout'ы, и делиться ими друг с другом. Другими словами это добавляет возможность расширять модуль сторонними лицами, и отображать модуль в разных вариантах.

К примеру: в планах сделать модуль меню, и наделать layout'ов, скажем аккордион, выпадающий список и тп, что избавит пользователей от установки кучи модулей меню...
【Мегапак Virtuemart:
 • метатеги (description,keywords)
 • заголовки (title)
 • красивые алиасы (чпу) без тормозов и дублей!
*

danik.html

  • Живу я здесь
  • 2650
  • 353 / 4
более близкий пример тебе, beliyadm - mod_virtuemart_universal. Скажем у нас два экземпляра модуля, и оба они должны выглядеть по-разному, причем CSS задачу не решит. Вот тут и приходит на помошь параметр modulelayout )
【Мегапак Virtuemart:
 • метатеги (description,keywords)
 • заголовки (title)
 • красивые алиасы (чпу) без тормозов и дублей!
*

beliyadm

  • Легенда
  • 9758
  • 1665 / 66
  • Севастополь, Россия
Все, понял смысл, чегой то затупил :)
Все истины, которые я хочу вам изложить, — бесстыдная ложь. Сделать всё хорошо
TLG: @Beliyadm
*

Roberta

  • Захожу иногда
  • 182
  • 0 / 0
Тема такая что мне часто приходится делать шаблоны под Joomla. К счастью почти все модули написаны по канонам Joomla, и их можно перешаблонизировать в папке html/module_name/layout_name.php

Однако иногда нужно для разных экземпляров модуля иметь разный layout. Такая проблема часто возникает с mod_mainmenu и mod_newsflash.
Решение достаточно простое - добавлять к модулям параметр выбора шаблона. делается это очень просто:

1)добавляем в манифест (xml-файл модуля) новый параметр:
Код: xml
<param name="layout" type="modulelayout" module="mod_имя_модуля" label="Layout" description="Select layout" />
Типа modulelayout Joomla не знает, поэтому мы его создадим сами.
2)добавляем атрибут addpath элементу params:
Код: xml
<params addpath="/modules/mod_имя_модуля/elements">
Таким образом мы указываем что неизвестные типы параметров надо искать в данной папке
3)создаем /modules/mod_имя_модуля/elements/modulelayout.php . Вставляем туда следующий код:
[spoiler title="modulelayout.php"]
Код: php
<?php

// no direct access
defined('_JEXEC') or die('Restricted access');
jimport('joomla.filesystem.folder');
jimport('joomla.filesystem.file');

class JElementModuleLayout extends JElement
{
var $_name = 'ModuleLayout';

function fetchElement($name, $value, &$node, $control_name)
{
global $mainframe;
$db =& JFactory::getDBO();

// get current template
$query = 'SELECT template'
.' FROM #__templates_menu'
.' WHERE client_id = 0'
.' AND menuid = 0'
;
$db->setQuery( $query );
$template = $db->loadResult();
$module = $node->attributes('module');

// If a template, extension and view are present build the options.
if ($template && $module) {

// Build the search paths for layouts.
$bPath = JPath::clean(JPATH_SITE.DS.'modules'.DS.$module.DS.'tmpl');
$tPath = JPath::clean(JPATH_SITE.DS.'templates'.DS.$template.DS.'html'.DS.$module);

// Add the default option.
$options[] = JHTML::_('select.option', '', JText::_('Default'));

// Add the layout options from the first path.
if (is_dir($bPath) && ($files = JFolder::files($bPath, '^[^_]*\.php$'))) {
$options[] = JHTML::_('select.option',  '<OPTGROUP>', JText::_( 'Module' ) );
foreach ($files as $file) {
$options[] = JHTML::_('select.option', JFile::stripExt($file));
}
//$options[] = JHTML::_('select.option',  '</OPTGROUP>' );
}

// Add the layout options from the second path.
if (is_dir($tPath) && ($files = JFolder::files($tPath, '^[^_]*\.php$'))) {
$options[] = JHTML::_('select.option',  '<OPTGROUP>', JText::_( 'Template' ) );
foreach ($files as $file) {
$options[] = JHTML::_('select.option', JFile::stripExt($file));
}
//$options[] = JHTML::_('select.option',  '</OPTGROUP>' );
}
return JHTML::_('select.genericlist', $options, $control_name.'['.$name.']', null, 'value', 'text', $value);
}

}
}
[/spoiler]
Мы создали новый тип параметра, который генерирует список найденных layout'ов в папке модуля и шаблона.
4)Меняем в mod_имя_модуля.php вызов layout'а на следующий:
Код: php
require( JModuleHelper::getLayoutPath('mod_имя_модуля', $params->get('layout', 'default')) );


К счастью в Joomla 1.6 тип modulelayout уже содержится в библиотеке, и все стандартные модули имеют этот параметр слава тапочкам.
Ну а пока мы живем с j 1.5 прошу разработчиков проделать эти нехитрые 4 шага чтобы помочь бедным верстальшикам обуздать ваши модули )

сделала все вышесказанное с XML файлом.
но в php файле модуля уже прописан вызов layout'a следующим образом

$layout = $params->get('layout','default');
$layout = JFilterInput::clean($layout, 'word');
$path = JModuleHelper::getLayoutPath('mod_hbooking', $layout);
if (file_exists($path)) {
   require($path);
}

результат: дополнительный layout из админки не виден, только default

что делать??
« Последнее редактирование: 18.12.2010, 23:12:34 от Roberta »
*

smart

  • Администратор
  • 6478
  • 1318 / 15
  • Хочешь сделать хорошо — сделай!
Случайно набрел на эту тему. Задумка действительно неплохая, тем более, что многие еще на 1.5 сидят. Но посмотрев код возникло 2 вопроса:

1. Почему layout'ы ищутся только в текущем шаблоне? А если у пользователя 5 шаблонов и в них разный набор layout'ов?
2. Почему при формировании списка закомментированы строки </OPTGROUP>

Может быть есть более свежий элемент? Просто я как раз переписывал модули для JComments под 1.7 и 1.5, и в случае с 1.7 выбор layout'а есть, а в 1.5 пока нет. Я готов добавить, но нужно какое-то более универсальное решение.
*

smart

  • Администратор
  • 6478
  • 1318 / 15
  • Хочешь сделать хорошо — сделай!
Хм, подумал, подумал и решил чуток улучшить элемент:
[spoiler title=JElementModuleLayout]
Код: php
<?php
 
defined('_JEXEC') or die('Restricted access');

jimport('joomla.filesystem.folder');
jimport('joomla.filesystem.file');
 
class JElementModuleLayout extends JElement
{
var $_name = 'ModuleLayout';
 
function fetchElement($name, $value, &$node, $control_name)
{
$module = $node->attributes('module');
$clientId = ($v = $node->attributes('client_id'))? $v : 0;

global $mainframe;
$db =& JFactory::getDBO();
 
$query = 'SELECT template'
.' FROM #__templates_menu'
.' WHERE client_id = ' . $clientId
;

$db->setQuery( $query );
$templates = $db->loadResultArray();

$options = array();
$options[] = JHTML::_('select.option', '', JText::_('Default'));

if ($module) {
$moduleFolder = JPath::clean(JPATH_SITE . DS . 'modules' . DS . $module . DS . 'tmpl');

if (is_dir($moduleFolder) && ($files = JFolder::files($moduleFolder, '^[^_]*\.php$'))) {
$options[] = JHTML::_('select.option', '<OPTGROUP>', JText::_('Module'));
foreach ($files as $file) {
$options[] = JHTML::_('select.option', JFile::stripExt($file));
}
$options[] = JHTML::_('select.option', '</OPTGROUP>');
}
}

if ($templates) {
foreach ($templates as $template) {
$templateFolder = JPath::clean(JPATH_SITE . DS . 'templates' . DS . $template . DS . 'html' . DS . $module);

if (is_dir($templateFolder) && ($files = JFolder::files($templateFolder, '^[^_]*\.php$'))) {
$options[] = JHTML::_('select.option', '<OPTGROUP>', JText::_('Template'). ' ' . $template);
foreach ($files as $file) {
$options[] = JHTML::_('select.option', JFile::stripExt($file));
}
$options[] = JHTML::_('select.option', '</OPTGROUP>');
}
}
}
 
return JHTML::_('select.genericlist', $options, $control_name.'['.$name.']', null, 'value', 'text', $value);
}
}
[/spoiler]
Чтобы оставить сообщение,
Вам необходимо Войти или Зарегистрироваться
 

Вставка кода вызова модуля в тело шаблона другого модуля

Автор Dorfman

Ответов: 15
Просмотров: 2577
Последний ответ 19.11.2018, 21:45:54
от beliyadm
Как создать дополнительный параметр(по типу published) для элемента списка?

Автор borro

Ответов: 4
Просмотров: 1578
Последний ответ 08.02.2018, 17:03:11
от borro
Нужна помощь в доработке модуля под Joomla 3

Автор kik84

Ответов: 5
Просмотров: 2751
Последний ответ 30.01.2018, 22:40:30
от Елeна
Модификация модуля lastet_news вывод времени перед заголовком

Автор Morphiss

Ответов: 9
Просмотров: 2497
Последний ответ 19.04.2016, 12:41:55
от spsyper
Создание платного модуля

Автор fiter

Ответов: 7
Просмотров: 1973
Последний ответ 04.08.2014, 18:27:05
от neo85r