Новости Joomla

Загадочный параметр $live_site в configuration.php Joomla

Загадочный параметр $live_site в configuration.php Joomla

👩‍💻 Загадочный параметр $live_site в configuration.php Joomla. Зачем он нужен?Давным-давно, когда Joomla ещё была маленькой, в неё внедрили параметр $live_site. В ней хранился домен текущего сайта на случай, если Joomla не могла его определить из-за неверной настройки сервера. Нужно это было для разных SEO-компонентов, для использования редиректов и т.д.Со временем для работы собственно сайта этот параметр перестал быть нужным. Уже в начале 2010-х стали встречаться рекомендации оставлять этот параметр пустым, дабы оный не привёл к лишним проблемам и путанице. Тем более, в web-админке нет места, где его можно указать или посмотреть его значение. Только в configuration.php, а туда смотрят не часто.Однако, параметр всё же остался в ядре Joomla. Зачем он нужен? А нужен он в 2-х случаях:- для работы класса Joomla\CMS\Uri\Uri, который часто используется в коде Joomla для работы методов

Uri::root() и
Uri::base(), а значит может влиять и на работу в том числе ajax-скриптов.- для работы Joomla в CLI - командной строке сервера. В случае если вы используете в вашем CLI-плагине методы опять-таки класса Uri, то CLI ничего не знает о текущем домене, так как запускается вне web-сервера. Поэтому домен нужно указывать принудительно. Либо с помощью параметра командной строки
--live-site, например,
—live-site=https://site.ru/. Со слешем на конце, иначе в CLI адрес сайта станет
https://site.rujoomla.php.Либо в параметре
$live_site в файле configuration.php, так как
CliApplication берёт настройку оттуда, если параметр команды не указан или пуст.⚠️ Иначе в качестве хоста и url класса Uri будет установлено
https://joomla.invalid/set/by/console/application. В самом же коде команды получить параметр
$live_site можно из объекта приложения

protected function doExecute(InputInterface $input, OutputInterface $output): int    {         //...              $live_site = $this->getApplication()->get('live_site');         //...    }
и исходя из этого строить дальнейшую логику.@joomlafeed#joomla #разработка #php #cli

Вышел плагин AllVideos v.7.0 от JoomlaWorks

Вышел плагин AllVideos v.7.0 от JoomlaWorks

Вышел плагин AllVideos v.7.0 от JoomlaWorks.Этот контент-плагин - одно из старейших расширений для Joomla. Его задача - преобразовывать шорт-коды вида

{YOUTUBE}...{/YOUTUBE},
{MP3}parth/to/file.mp3{/MP3} и подобные во встроенные видео или аудио.👩‍💻 v.7.0.0. Что нового?- Добавлена поддержка Youtube Shorts. Просто скопируйте полный url видео и вставьте его внутри тегов
{YOUTUBE}...{/YOUTUBE}.- Поддержка Joomla 5.x без плагина обратной совместимости. PHP 5, PHP 7, PHP 8. - Индексация умным поиском в CLI. В Joomla 5 плагин перестал вызывать ошибку при индексации контента умным поиском через CLI,Заметьте, что этот один и тот же пакет для всех версий Joomla, начиная с 1.5.x и заканчивая 5.x. Технически "под капотом" код плагина по сути не менялся, а для поддержки следующих версий Joomla авторы вставляют "заплатки". Плагин всё ещё использует старую архитектуру файлов и классов Joomla, что, к сожалению, заставляет прибавлять к его описанию слова "пока ещё" - "пока ещё работает".
Страница расширенияGitHub расширенияJoomla Extensions Directory👩‍💻 За ссылку спасибо самому внимательному участнику нашего сообщества - Ринату Кажетову (@rkazhet).@joomlafeed#joomla #расширения

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

AlekVolsk

  • Гуру
  • 6913
  • 416 / 4
Имею логин, пароль и email. Как программно создать/добавить пользователя, в группе Registered, сразу разблокированным, установив ему получение системный писем и не требовать сброс пароля при первом входе? Это нужно для синхронизации пользователей с 1С (в 1С добавляют нового, потом выгружают его на сайт), при импорте данных из XML.
*

varX

  • Живу я здесь
  • 2465
  • 141 / 5
  • разработка компонентов
Создаете объект
$user = new JUser;

Создаете массив данных
$data = array();
$data['email'] ='email';
$data['password'] ='password';
и т.д.

Дальше, если очень упрощенно:
$user->bind($data);
$user->save();
Разработка и ремонт. VirtueMart. JoomShopping. Свои компоненты. Принимаю заявки на plasma-web.ru.
*

AlekVolsk

  • Гуру
  • 6913
  • 416 / 4
Спс, попробую. Другие поля - аналогично, это понятно, а с группой доступа как?
*

zomby6888

  • Завсегдатай
  • 1473
  • 171 / 3
Не пробовал но возможно:
Код: php
JUserHelper::addUserToGroup('userid', 2);

Сработало вроде:
Код: php
$user = new JUser('id');
$user->sendEmail = 1;
$user->requireReset = 1;
$user->save();
JUserHelper::addUserToGroup('id', 2);
« Последнее редактирование: 13.11.2014, 01:59:09 от zomby6888 »
интернет-блог: http://websiteprog.ru
*

varX

  • Живу я здесь
  • 2465
  • 141 / 5
  • разработка компонентов
Спс, попробую. Другие поля - аналогично, это понятно, а с группой доступа как?
Аналогично. По памяти, не глядя (мож изменилось уже что-то)
$data['groups'] =array($group);
Разработка и ремонт. VirtueMart. JoomShopping. Свои компоненты. Принимаю заявки на plasma-web.ru.
*

AlekVolsk

  • Гуру
  • 6913
  • 416 / 4
Аналогично. По памяти, не глядя (мож изменилось уже что-то)
$data['groups'] =array($group);
$data['groups'] =array(2); - пойдет?
*

varX

  • Живу я здесь
  • 2465
  • 141 / 5
  • разработка компонентов
$data['groups'] =array(2); - пойдет?
Попробуйте, должно.
Разработка и ремонт. VirtueMart. JoomShopping. Свои компоненты. Принимаю заявки на plasma-web.ru.
*

AlekVolsk

  • Гуру
  • 6913
  • 416 / 4
Сработало вроде:
Код: php
$user = new JUser('id');
$user->sendEmail = 1;
$user->requireReset = 1;
$user->save();
JUserHelper::addUserToGroup('id', 2);
Спс, попробую.
*

zomby6888

  • Завсегдатай
  • 1473
  • 171 / 3
requireReset возможно наоборот в 0 надо установить..
интернет-блог: http://websiteprog.ru
*

varX

  • Живу я здесь
  • 2465
  • 141 / 5
  • разработка компонентов
Не пробовал но возможно:
Код: php
JUserHelper::addUserToGroup('userid', 2);

Сработало вроде:
Код: php
$user = new JUser('id');
$user->sendEmail = 1;
$user->requireReset = 1;
$user->save();
JUserHelper::addUserToGroup('id', 2);
Речь, насколько я понял, идет о создании нового пользователя. У него нет id. Впрочем, если не ошибаюсь, $user->save(); возвращает id созданного пользователя, поэтому можно и так приспособиться.
Разработка и ремонт. VirtueMart. JoomShopping. Свои компоненты. Принимаю заявки на plasma-web.ru.
*

zomby6888

  • Завсегдатай
  • 1473
  • 171 / 3
Ну да, если нового создавать то как-то так:
Код: php
$user = new JUser;
$user->sendEmail = 1;
$user->requireReset = 0;
$user->name = 'Вася';
$user->username = 'vasya';
$user->password = 'password';
$user->email = 'test@test.ru';
$user->save();
JUserHelper::addUserToGroup($user->id, 2);


Можно его еще авторизовать и залогинить для прикола)
интернет-блог: http://websiteprog.ru
*

AlekVolsk

  • Гуру
  • 6913
  • 416 / 4
А как быстро (без запроса) проверить, существует ли пользователь с указанным логином, и если да - вернуть его id? Чтобы гарантированно добавлять только несуществующего.
С запросом - не проблема, но хотелось бы по максимуму с использованием имеющихся встроенных средств api J.
*

zomby6888

  • Завсегдатай
  • 1473
  • 171 / 3
Мне кажется что никак, только запрос. Встроенные средства это лишние данные и более медленная обработка, в таких ситуациях гораздо полезнее ими пренебречь
интернет-блог: http://websiteprog.ru
*

AlekVolsk

  • Гуру
  • 6913
  • 416 / 4
Пичально, но все же, как? протестирую скорость заодно )
*

zomby6888

  • Завсегдатай
  • 1473
  • 171 / 3
А что тут тестировать прямой запрос всегда быстрее будет это же очевидно. Как будто методы api для получения данных не используют запросы. Что может быть быстрее чем:
Код: php
$db = JFactory::getDBO();
$query = "SELECT id FROM #__users WHERE username = ".$db->quote('vasya');
$db->setQuery($query);
if($id = $db->loadResult())
{
//делаем что -то с $id
}
интернет-блог: http://websiteprog.ru
*

AlekVolsk

  • Гуру
  • 6913
  • 416 / 4
ок, спс.
*

AlekVolsk

  • Гуру
  • 6913
  • 416 / 4
Код: php
$user = new JUser;
$user->sendEmail = 1;
$user->requireReset = 0;
$user->name = 'Vasya';
$user->username = 'vasya';
$user->password = 'password';
$user->email = 'test@test.ru';
$user->save();
JUserHelper::addUserToGroup($user->id, 2);
Это, к сожалению, не прокатило.

Код: php
          $user = new JUser;
          $data = array();
          $data['username'] = $item_login;
          $data['name'] = $item_name;
          $data['password'] = $item_pss;
          $data['email'] = $item_email;
          $data['sendEmail'] = 1;
          $data['requireReset'] = 0;
          $data['params'] = '{"admin_style":"","admin_language":"","language":"","editor":"","helpsite":"","timezone":""}';
          $user->bind($data);
          $user->save();
          JUserHelper::addUserToGroup($user->id, 2);
Это добавило пользователя и послало ему на почту письмо с логином и паролем, вот только пароль в базу не записался...
$item_pss содержит строку из латинских символов и цифр, 11 знаков, без пробелов и прочих знаков препинания.
*

AlekVolsk

  • Гуру
  • 6913
  • 416 / 4
Пробовал указать $data['password'] = md5($item_pss); - пароль в базу записался, однако авторизация не проходит
*

zomby6888

  • Завсегдатай
  • 1473
  • 171 / 3
может надо подтверждение пароля указать? var_dump($user->getErrors()) что выводит?
« Последнее редактирование: 14.11.2014, 11:53:47 от zomby6888 »
интернет-блог: http://websiteprog.ru
*

AlekVolsk

  • Гуру
  • 6913
  • 416 / 4
посмотрел bind() в JUser, там действительно идет проверка:
Код: php
if (isset($array['password2']) && $array['password'] != $array['password2'])
{
JFactory::getApplication()->enqueueMessage(JText::_('JLIB_USER_ERROR_PASSWORD_NOT_MATCH'), 'error');

return false;
}


ок.
указываю:
Код: php
          $data['password'] = $item_pss;
          $data['password2'] = $item_pss;
а вот фигвам: в базе пустое поле
*

AlekVolsk

  • Гуру
  • 6913
  • 416 / 4
Warning: password_hash(): Password must be a string in F:\home\inform.local\www\libraries\compat\password\lib\password.php on line 30

а у меня в data['password'] == object(SimpleXMLElement)#375 (1) {
  • => string(11) "mfo20140206" }

ппц
« Последнее редактирование: 14.11.2014, 12:01:40 от AlekVolsk »
*

zomby6888

  • Завсегдатай
  • 1473
  • 171 / 3
)) Поэтому наверное и не работал первый вариант. У меня он срабатывал..
интернет-блог: http://websiteprog.ru
*

AlekVolsk

  • Гуру
  • 6913
  • 416 / 4
У меня же импорт из XML идет в цикле ))) так работает:
Код: php
          $data['password'] = (string)$item_pss;
          $data['password2'] = $data['password'];

И ошибку не сразу видел, поскольку контроллер редирект делал обратно на вьюху
*

AlekVolsk

  • Гуру
  • 6913
  • 416 / 4
Окончательный рабочий вариант:
          $user = new JUser;
          
$data = array();
          
$data['username'] = (string)$item_login;
          
$data['name'] = (string)$item_name;
          
$data['password'] = (string)$item_pss;
          
$data['password2'] = $data['password'];
          
$data['email'] = (string)$item_email;
          
$data['sendEmail'] = 1;
          
$data['requireReset'] = 0;
          
var_dump($data['password']);
          
$user->bind($data);
          
$user->save();
          
JUserHelper::addUserToGroup($user->id2);
*

Aleks.Denezh

  • Живу я здесь
  • 3404
  • 428 / 4
Окончательный рабочий вариант:
Так лучше:
Код: php
$user = new JUser;
$userData = array( 'name' => (string)$item_name,
'username' => (string)$item_login,
'password' => (string)$item_pss,
'password2' => $data['password'],
'email' => (string)$item_email,
'sendEmail' => 1,
'requireReset' => 0,
'groups' => array( 2 )
);
$user->bind( $userData );
if ( $user->save() ) {
echo 'Пользователь ' . $user->username . ' успешно зарегестрирован!';
}
*

AlekVolsk

  • Гуру
  • 6913
  • 416 / 4
При добавлении более 250 пользователей (импорт данных из XML, в цикле):
Fatal error: Maximum execution time of 30 seconds exceeded in F:\home\inform.local\www\libraries\compat\password\lib\password.php on line 127

Можно этого избежать, делая паузу в выполнении цикла после, скажеи так, каждых 100 интераций цикла, чтобы избежать появления ошибки?
*

Aleks.Denezh

  • Живу я здесь
  • 3404
  • 428 / 4
set_time_limit(0);
*

AlekVolsk

  • Гуру
  • 6913
  • 416 / 4
В цикле или перед ним?
+ перед циклом вставил, работает, спс

+
При регистрации пользователя пишу:
$user = new JUser;
$userData = array( 'name' => (string)$item_name,
   'username' => (string)$item_login,
   'password' => (string)$item_pss,
   'password2' => (string)$item_pss,
   'email' => (string)$item_email,
   'sendEmail' => 0,
   'requireReset' => 0,
   'groups' => array( 2 )
);
$user->bind( $userData );
В настройках менеджера пользователей: Отсылать пароль    Нет
А письмо с паролем при регистрации все равно отсылается, как избежать?
« Последнее редактирование: 20.11.2014, 19:32:12 от AlekVolsk »
*

AlekVolsk

  • Гуру
  • 6913
  • 416 / 4
Если пользователь не добавился, как отловить ошибку, почему не добавился? А именно: отловить совпадающий email и некорректный логин
Код: php
$user->bind($userData);
if (!$user->save()) {
  // ?
}
*

AlekVolsk

  • Гуру
  • 6913
  • 416 / 4
В общем-то вышел из положения, выводя $user->_errors[0], но это системное сообщение, а хотелось бы свое.
Чтобы оставить сообщение,
Вам необходимо Войти или Зарегистрироваться
 

Условия вывода блока div, поля пользователя?

Автор warlocksp

Ответов: 28
Просмотров: 876
Последний ответ 10.12.2020, 14:05:36
от gartes
Выбор группы пользователя при регистрации (аутентификации)

Автор Bartleby

Ответов: 10
Просмотров: 1947
Последний ответ 05.06.2013, 14:20:36
от Bartleby