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

stitch808

  • Захожу иногда
  • 150
  • 5 / 0
Друзья!

Помогите устранить ошибку после утсновки бэкапа сайта на Опен Сервер. Ошибка лога: "Fatal error: Call to a member function get() on null in C:\OSPanel\domains\сайт\libraries\joomla\cache\storage\memcached.php on line 126"

Вот
Код
public function get($id, $group, $checkTime = true)
{
$cache_id = $this->_getCacheId($id, $group);
$back = self::$_db->get($cache_id);
return $back;
}
Ну а сама 126 строчка
Код
$back = self::$_db->get($cache_id);
*

gartes

  • Завсегдатай
  • 1859
  • 142 / 6
  • Е = mс²
*

stitch808

  • Захожу иногда
  • 150
  • 5 / 0
Open Server не поддерживает на memcached - Просто выключить в настройках
В настройках OS Memcached - не используется и так
*

gartes

  • Завсегдатай
  • 1859
  • 142 / 6
  • Е = mс²
self::$_db - А что   в этой переменной ?
Код
echo'<pre>';print_r( self::$_db );echo'</pre>'.__FILE__.' '.__LINE__;
die(__FILE__ .' '. __LINE__ );
*

stitch808

  • Захожу иногда
  • 150
  • 5 / 0
self::$_db - А что   в этой переменной ?
Код
echo'<pre>';print_r( self::$_db );echo'</pre>'.__FILE__.' '.__LINE__;
die(__FILE__ .' '. __LINE__ );
а в каком файле смотреть?
*

gartes

  • Завсегдатай
  • 1859
  • 142 / 6
  • Е = mс²
а в каком файле смотреть?
C:\OSPanel\domains\сайт\libraries\joomla\cache\storage\memcached.php on line 126
Тут где ошибка ?
Перед строкой 126
*

stitch808

  • Захожу иногда
  • 150
  • 5 / 0
C:\OSPanel\domains\сайт\libraries\joomla\cache\storage\memcached.php on line 126
Тут где ошибка ?
Перед строкой 126

Вот что идет перед этим
Код
<?php
/**
 * @package     Joomla.Platform
 * @subpackage  Cache
 *
 * [member=126442]copyright[/member]   Copyright (C) 2005 - 2014 Open Source Matters, Inc. All rights reserved.
 * @license     GNU General Public License version 2 or later; see LICENSE
 */

defined('JPATH_PLATFORM') or die;

/**
 * Memcached cache storage handler
 *
 * @package     Joomla.Platform
 * @subpackage  Cache
 * @see         http://php.net/manual/en/book.memcached.php
 * @since       12.1
 */
class JCacheStorageMemcached extends JCacheStorage
{
/**
* @var    Memcached
* @since  12.1
*/
protected static $_db = null;

/**
* @var    boolean
* @since  12.1
*/
protected $_persistent = false;

/**
* @var
* @since   12.1
*/
protected $_compress = 0;

/**
* Constructor
*
* @param   array  $options  Optional parameters.
*
* @since   12.1
*/
public function __construct($options = array())
{
parent::__construct($options);
if (self::$_db === null)
{
$this->getConnection();
}
}

/**
* Return memcached connection object
*
* @return  object   memcached connection object
*
* @since   12.1
*/
protected function getConnection()
{
if ((extension_loaded('memcached') && class_exists('Memcached'))!= true)
{
return false;
}

$config = JFactory::getConfig();
$this->_persistent = $config->get('memcache_persist', true);
$this->_compress = $config->get('memcache_compress', false) == false ? 0 : Memcached::OPT_COMPRESSION;

/*
* This will be an array of loveliness
* @todo: multiple servers
* $servers = (isset($params['servers']))? $params['servers'] : array();
*/
$server = array();
$server['host'] = $config->get('memcache_server_host', 'localhost');
$server['port'] = $config->get('memcache_server_port', 11211);

// Create the memcache connection
if ($this->_persistent)
{
$session = JFactory::getSession();
self::$_db = new Memcached($session->getId());
}
else
{
self::$_db = new Memcached;
}
$memcachedtest = self::$_db->addServer($server['host'], $server['port']);

if ($memcachedtest == false)
{
return JError::raiseError(404, "Could not connect to memcached server");
}

self::$_db->setOption(Memcached::OPT_COMPRESSION, $this->_compress);

// Memcached has no list keys, we do our own accounting, initialise key index
if (self::$_db->get($this->_hash . '-index') === false)
{
$empty = array();
self::$_db->set($this->_hash . '-index', $empty, 0);
}

return;
}

/**
* Get cached data from memcached by id and group
*
* @param   string   $id         The cache data id
* @param   string   $group      The cache data group
* @param   boolean  $checkTime  True to verify cache time expiration threshold
*
* @return  mixed  Boolean false on failure or a cached data string
*
* @since   12.1
*/
*

gartes

  • Завсегдатай
  • 1859
  • 142 / 6
  • Е = mс²
Общие настройки => Система => Настройки кэша => Обработчик кэширования - Что стоит ??
*

stitch808

  • Захожу иногда
  • 150
  • 5 / 0
Общие настройки => Система => Настройки кэша => Обработчик кэширования - Что стоит ??

Если смотреть в админке текущего сайта, то выбрано JLIB_FORM_VALUE_CASHE_memcached
*

stitch808

  • Захожу иногда
  • 150
  • 5 / 0
Переключите на файл
Есть только переключение на "Файл". На него переключить?
*

gartes

  • Завсегдатай
  • 1859
  • 142 / 6
  • Е = mс²
Есть только переключение на "Файл". На него переключить?
Ну да конечно
« Последнее редактирование: 14.06.2020, 22:47:37 от era »
*

stitch808

  • Захожу иногда
  • 150
  • 5 / 0
Ну да конечно
Отключение этого метода кэширования, и дальнейшее создание нового бекапа позволило установить его на Опен Сервер! Огромное большое! Теперь буду обновлять движок с 2.5 на актуальный!
*

stitch808

  • Захожу иногда
  • 150
  • 5 / 0
Внимательно ! - Пошаговая миграция с Joomla 2.5 на 3.х

При обновлении с 2.5 на 3.5.1 уже повылезала ошибка "Fatal error: Call to undefined method Joomla\Registry\Registry::getValue() in C:\OSPanel\domains\сайт\components\com_jcomments\libraries\joomlatune\joomla\jversion.php on line 35". В какую сторону копать?
*

stitch808

  • Захожу иногда
  • 150
  • 5 / 0
Какая у вас версия PHP ?
Сейчас в настройках ОS стоит версия PHP 5.6
*

gartes

  • Завсегдатай
  • 1859
  • 142 / 6
  • Е = mс²
Попробуйте переставить или повыше или пониже версию
А ещё переключите на стандартный шаблон ваш сайт
*

stitch808

  • Захожу иногда
  • 150
  • 5 / 0
Попробуйте переставить или повыше или пониже версию
А ещё переключите на стандартный шаблон ваш сайт
Используется и так шаблон beez_20. Попробую перед обновлением повыше сделать PHP
*

stitch808

  • Захожу иногда
  • 150
  • 5 / 0
Попробуйте переставить или повыше или пониже версию
А ещё переключите на стандартный шаблон ваш сайт

Ничего из вышеперечисленных не помогло...
*

gartes

  • Завсегдатай
  • 1859
  • 142 / 6
  • Е = mс²
C:\OSPanel\domains\сайт\components\com_jcomments\libraries\joomlatune\joomla\jversion.php on line 35". В какую сторону копать?
А Попробуйте обновить этот компонент com_jcomments
*

gartes

  • Завсегдатай
  • 1859
  • 142 / 6
  • Е = mс²
C:\OSPanel\domains\сайт\components\com_jcomments\libraries\joomlatune\joomla\jversion.php on line 35
А что в самом этом файлике
*

gartes

  • Завсегдатай
  • 1859
  • 142 / 6
  • Е = mс²
*

stitch808

  • Захожу иногда
  • 150
  • 5 / 0
Изменить эту строку вот таким образом
Код
JRegistry::getvalue()  to JRegistry::get()

Теперь на 86% установки выскакивает "1091 - Обнаружена ошибка. Can't DROP 'usertype'; check that column/key exists SQL=ALTER TABLE `#__users` DROP INDEX `usertype`;" ;D
*

gartes

  • Завсегдатай
  • 1859
  • 142 / 6
  • Е = mс²
Ответил Вам в личных сообщениях !
По поводу ошибки
зайдите в PhpMyAdmin, откройте #__users таблицу и убедитесь, что usertype столбец существует.
Если да то попробуйте там же PhpMyAdmin выполнить такой запрос ( Заменить "#_" на префикс )
Код
ALTER TABLE `#__users` ADD INDEX(`usertype`);

*

stitch808

  • Захожу иногда
  • 150
  • 5 / 0
Ответил Вам в личных сообщениях !
По поводу ошибки
зайдите в PhpMyAdmin, откройте #__users таблицу и убедитесь, что usertype столбец существует.
Если да то попробуйте там же PhpMyAdmin выполнить такой запрос ( Заменить "#_" на префикс )
Код
ALTER TABLE `#__users` ADD INDEX(`usertype`);
Пока проблема так и не решилась...
Чтобы оставить сообщение,
Вам необходимо Войти или Зарегистрироваться
 

С устранением Warning: "continue" targeting switch is equivalent to "break". D

Автор alexs64

Ответов: 0
Просмотров: 10114
Последний ответ 07.09.2025, 20:44:48
от alexs64
Где настраивается <jdoc:include type="component" />

Автор zhekamur

Ответов: 4
Просмотров: 2266
Последний ответ 06.06.2024, 22:50:07
от Vastriet
Все изменения появляются в старой базе данных и ftp после смены хостинга

Автор makena0606

Ответов: 2
Просмотров: 2758
Последний ответ 09.02.2024, 10:21:47
от Vastriet
Кнопка &amp;quot;редактировать&amp;quot;

Автор all_zer

Ответов: 1
Просмотров: 2753
Последний ответ 28.12.2023, 09:53:48
от fsv
Прошу помощи. Ошибка при обновлении на Joomla 4

Автор wmsonic

Ответов: 1
Просмотров: 2259
Последний ответ 29.10.2023, 22:07:23
от Kukush