Новости 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 Ответов
  • 2183 Просмотров
*

DimkaJack

  • Осваиваюсь на форуме
  • 28
  • 0 / 0
Добрый день, собственно решение части проблемы уже найдено(если мыслю правильно). Программная регистрация:
Код
$user = new JUser;
$userData = array( 'name' => 'Вася Пупкин',
    'username' => 'VasyaPupkin',
    'password' => 'passord1234',
    'password2' => 'passord1234',
    'email' => 'vasyapupkin@ссылка вырезана, так как домен распространяет вирусы',
    'groups' => array( 2 )
);
$user->bind( $userData );
if ( $user->save() ) {
    echo 'Пользователь ' . $user->username . ' успешно зарегестрирован!';
}
но вот как заставить $user работать с внешней бд, на которой тоже Joomla
« Последнее редактирование: 06.08.2014, 18:39:24 от b2z »
*

b2z

  • Глобальный модератор
  • 7287
  • 778 / 0
  • Разраблю понемногу
*

DimkaJack

  • Осваиваюсь на форуме
  • 28
  • 0 / 0
Только если приконнектится к внешней базе данных и внести данные в таблицу #__users. Объект JUser тут Вам мало поможет.

То есть так?
Код
$query = " INSERT INTO `#__user` (`name`, `username`, `password`, `email`, `groups`) VALUES  ('name', 'phone', '".md5($pass)."', 'mail@mail.ru', '".array( 2 )."'";
$dbb->setQuery($query);

if ( $dbb->query() ) {
    echo "good";
}
Если да, то почему-то не работает
*

Aleks.Denezh

  • Живу я здесь
  • 3401
  • 428 / 4
Вы пытаетесь сделать мост при регистрации?
Как выше написали вам, объект JUser вам не поможет, он работает с текущей базой..
Но можно попробовать унаследоваться от класса JUser и сделать так:
Код: php
class RemoteUser extends JUser
{
public static function getTable( $type = null, $prefix = 'JTable' )
{
$db = JDatabase::getInstance(
array(
'driver' => 'mysqli',
'host' => 'Имя хоста',
'user' => 'Имя юзера',
'password' => 'Пароль',
'database' => 'Название базы данных',
'prefix' => 'префикс таблицы'
)
);
return new JTableUser( $db );
}
}


$user = new RemoteUser();
$userData = array( 'name' => 'Вася Пупкин',
'username' => 'VasyaPupkin',
'password' => 'passord1234',
'password2' => 'passord1234',
'email' => 'vasyapupkin@ссылка вырезана, так как домен распространяет вирусы',
'groups' => array( 2 )
);
$user->bind( $userData );
if ( $user->save() ) {
echo 'Пользователь ' . $user->username . ' успешно зарегестрирован!';
}

p.s. не уверен что будет работать, просто теория...
*

DimkaJack

  • Осваиваюсь на форуме
  • 28
  • 0 / 0
Вы пытаетесь сделать мост при регистрации?

Да, при отправке формы на вспомогательном сайте происходит регистрация на основном.

Как выше написали вам, объект JUser вам не поможет, он работает с текущей базой..
Но можно попробовать унаследоваться от класса JUser и сделать так:

p.s. не уверен что будет работать, просто теория...

выдает ошибку Fatal error: Class 'JTableUser' not found in,
может изза того что я прописал новый класс в модель компонента, пробовал jimport('joomla.database.table.user'); ошибка та же.
« Последнее редактирование: 06.08.2014, 18:34:17 от DimkaJack »
*

Aleks.Denezh

  • Живу я здесь
  • 3401
  • 428 / 4
попробуйте просто подключить класс JTableUser через reguire_once JPATH_SITE . 'путь к файлу';
*

zomby6888

  • Завсегдатай
  • 1473
  • 171 / 3
можно еще так попробовать:
Код: php
JTable::getInstance('user', 'JTable' , array('dbo' => $db));

Самому интересно будет ли работать удаленная регистрация)
интернет-блог: http://websiteprog.ru
*

Aleks.Denezh

  • Живу я здесь
  • 3401
  • 428 / 4
можно еще так попробовать:
Код: php
JTable::getInstance('user', 'JTable' , array('dbo' => $db));

Самому интересно будет ли работать удаленная регистрация)
По логике должна, но могут быть подводные камни..
*

DimkaJack

  • Осваиваюсь на форуме
  • 28
  • 0 / 0
можно еще так попробовать:
Код: php
JTable::getInstance('user', 'JTable' , array('dbo' => $db));

Самому интересно будет ли работать удаленная регистрация)

Возможно я неправильно использовал, но у меня не прокатило.

попробуйте просто подключить класс JTableUser через reguire_once JPATH_SITE . 'путь к файлу';

Да все сработало при require_once JPATH_SITE . '/libraries/joomla/database/table/user.php';
Огромное спасибо!  :D
Тему можно закрывать)
Чтобы оставить сообщение,
Вам необходимо Войти или Зарегистрироваться
 

[Решено] title category

Автор spirit1086

Ответов: 4
Просмотров: 1449
Последний ответ 17.08.2015, 16:42:04
от spirit1086
[Решено] Вставить визуальный редактор в модуль

Автор mat.konstantin

Ответов: 6
Просмотров: 4274
Последний ответ 10.03.2014, 14:33:05
от mat.konstantin
Программная авторизация без отметки времени входа на сайт

Автор Aeliot

Ответов: 2
Просмотров: 2323
Последний ответ 14.01.2014, 09:40:57
от Aeliot
[Решено] Как разобрать JURI::current() при помощи route.php?

Автор platonische

Ответов: 17
Просмотров: 3452
Последний ответ 10.01.2014, 20:55:19
от Arkadiy
[Решено] Собственная валидация в формах FrontEnd

Автор platonische

Ответов: 1
Просмотров: 1178
Последний ответ 01.08.2013, 13:16:23
от platonische