Новости Joomla

Joomla 6 нуждается в вашей помощи с тестированием.Вышел недавно релиз Joomla 6 alpha1

Joomla 6 нуждается в вашей помощи с тестированием.Вышел недавно релиз Joomla 6 alpha1

👩‍💻 Joomla 6 нуждается в вашей помощи с тестированием.Вышел недавно релиз Joomla 6 alpha1. Это релиз, в который включены уже проверенные изменения, но ещё очень многие исправления и улучшения ждут своей очереди. Joomla следит за качеством и безопасностью своего кода и каждое изменение должно быть успешно протестировано как минимум ещё двумя участниками сообщества. Разработка Joomla ведётся на платформе GitHub.Филипп Уолтон (Philip Walton) - один из разработчиков, кто активно вносит свой вклад в ядро Joomla. Он уже несколько месяцев посвящает свои послеполуденные часы пятницы работе с Joomla и предлагает присоединиться к нему. 📆 Пятница, 30 мая 2025, с 15:00 до 17:00 по UTC (Лондон) - с 18:00 до 20:00 по Москве.В чате Google Meet Филипп готов помочь с тестированием тем, кто будет делать это в первый раз. А так же он подготовил список лёгких Pull Request, которые можно протестировать довольно быстро. Чем больше тестов будет проведено сейчас, тем меньше ошибок вылезет потом. На данный момент 148 (уже 147 на момент написания заметки) PR на GitHub Joomla ждут тестирования.👩‍💻 Open to all. All together.Также вам поможет сделать первые шаги это видео.GitHub JoomlaДа, это вечер пятницы. Но тестирование занимает порой минут 15, а доброе дело сделано. Просто убедитесь, что разработчик чего-то не пропустил и всё работает как ожидается.#joomla #joomla6 #community

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

Danick

  • Новичок
  • 5
  • 0 / 0
Привет форум!
Появилась проблема, а именно:
Стоит Joomla 2.5.6 и VirtueMart 2.0.10
Заходит покупатель в магазин, добавляет товар в корзину, переходит к регистрации при оформлении заказа.
Заполняет нужные поля, нажимает кнопку зарерится. Ему выдается сообщение типа код активации на почте и тд тп.
НО! момент №1. сразу после ввода регистрационных данных и нажатия кнопки зерегиться от автоматом авторизируется на сайте, не проходя по ссылки активации в почте.
момент №2. ссылка активации не работает выдает такое сообщение "Не удалось зарегистрировать пользователя: Код подтверждения не найден."
Покопавшись немного я понял в чем прикол. Как только покупатель зарегился он автоматом авторизировался если не нажимать выход и при этом нажать на ссылку в письме сообщения нет но и активация не происходит. Если выйти и нажать на ссылку выдает сообщение "Не удалось зарегистрировать пользователя: Код подтверждения не найден." Причина не активации это поле lastvisitDate в таблице users в эт о поле заносится дата и время последнего визита на сайт (аутентификации). Т.к при регистрации происходит авто вход то соответственно значение поля не 0000-00-00 00:00:00 по умолчанию а к примеру 2012-09-20 08:59:54 и из-за этой фигни и не срабатывает ссылка активации в письме.

Может кто то подскажет как реализовать запрет на авто вход после рега в VirtueMart? P.S. через стандартную форму авторизации-регистрации Joomla все нормально. Но мне нужна рабочая регистрация через  VirtueMart.
HEEEEEEELLLLLLPPPPPPPP...
« Последнее редактирование: 20.09.2012, 13:12:14 от Danick »
*

ilyash

  • Осваиваюсь на форуме
  • 19
  • 0 / 0
Нашел не помню где и скописпастил себе в закладки

Делаем так:
     administrator/components/com_virtuemart/models/user.php
меняем
Код
$activationLink = 'index.php?option='.$com_users.'&task=registration.activate&token='.$user->get('activation');
на
Код
$activationLink = 'index.php?option='.$com_users.'&task=registration.activate&token='.$user->get('activation').'&forceActivate=true';

потом:
     components/com_users/controllers/registration.php
меняем
Код
if ($user->get('id')) {
$this->setRedirect('index.php');
return true;
}
на
Код
$jreq= JRequest :: get();
if ( $user->get('id') ) {
if( !isset($jreq['forceActivate'] )){
$this->setRedirect('index.php');
return true;
}
}

У меня заработало на ура!
*

DragonWMX

  • Новичок
  • 1
  • 0 / 0
Приветствую участников форума!

Тоже столкнулся с сабжевой проблемой.

Прежде всего, спасибо ilyash за подсказку в каком направлении копать!

Предложенный вариант работает, но только в одном случае:

Пользователь оформил заказ, для него автоматически создалась учетная запись, и он автоматически залогинился, было отправлено письмо с ссылкой активации.
Если перейти по ссылке активации пока пользователь залогинен - все ОК, активация проходит успешно, потому что, как верно заметил Danick, поле lastvisitDate в таблице users равно 0000000.

В другом случае не все так хорошо:

Пользователь оформил заказ, для него автоматически создалась учетная запись, и он автоматически залогинился, было отправлено письмо с ссылкой активации.
Если теперь пользователь разлогинится, а затем перейдет по ссылке активации - выводится ошибка "Не удалось зарегистрировать пользователя: Код подтверждения не найден."
Потому как в поле lastvisitDate записалась конкретная дата когда пользователь разлогинился. А в функции активации (\components\com_user\models\registration.php) имеем код:

Код
// Get the user id based on the token.
$db->setQuery(
'SELECT '.$db->quoteName('id').' FROM '.$db->quoteName('#__users').
' WHERE '.$db->quoteName('activation').' = '.$db->Quote($token).
' AND '.$db->quoteName('block').' = 1' .
' AND '.$db->quoteName('lastvisitDate').' = '.$db->Quote($db->getNullDate())
);

Как видим последнее условие запроса требует что бы в момент активации в поле lastvisitDate была Null-дата.
Собственно, предлагаю убрать это условие:

Код
// Get the user id based on the token.
$db->setQuery(
'SELECT '.$db->quoteName('id').' FROM '.$db->quoteName('#__users').
' WHERE '.$db->quoteName('activation').' = '.$db->Quote($token).
' AND '.$db->quoteName('block').' = 1' )
);

И тогда активация в обоих случаях проходит успешно.
*

tims72

  • Осваиваюсь на форуме
  • 23
  • 1 / 0
  • Кто ищет - тот найдет!
У меня проблема еще банальнее.
Создала стандартный модуль: вход на сайт.
Там есть ссылка: зарегистрироваться. Щелкаешь по этой ссылке и попадаешь на пустую страницу  http://sila-krasota.com/component/users/?view=registration- ни форм для ввода логина/ пароля - ничего. Просмотрела все возможные настройки и плагины, вроде все подключено, а такая ерунда выходит? Что делать?
*

czuryk

  • Осваиваюсь на форуме
  • 26
  • 4 / 0
Создал простое решение.
 Во первых нужно решить проблему с активацией, нужно выполнить рекомендацию от DragonWMX, сообщением выше.
Во вторых нужно вставить в код вашего шаблона следующий фрагмент:
Код
$user =& JFactory::getUser();

if ( ($user->block == 1) && ($user->id != 0) ) {
$app = JFactory::getApplication();
$app->logout( $user->id );
$app->redirect("index.php?option=com_virtuemart", "redir mess");
}

Все оказалось просто, надо было только с другого места зайти, и минимум хаков.
Здесь тоже обсуждается эта проблема http://forum.virtuemart.net/index.php?topic=101699.0

Проверял на VM 2.0.16
*

D1ma86

  • Новичок
  • 2
  • 0 / 0
Перерыл кучу форумов так и не нашёл однозначного решения проблемы с активацией пользователей (при регистрации через VirtueMart 2.0.x), представленные здесь методы почему то не помогают мне на Joomla 2.5.11/VM 2.0.20b.
По инструкции DragonWMX у меня активация не происходит (попадает просто на главную страницу), а если при этом ещё пользователь разлогонится то по пришедшей активационной ссылке  вообще попадаю на не сущуствуюшую страницу (пишет ошибка такой страницы не существует).
Может конечно нужно воспользоваться советом czuryk, но я так и не понял куда вставлять предложенный им код. (в каком файле конкретно находиться код шаблона), вставлял его в шаблон через административную панель ничего не получилось.
Если кто знает как окончательно решить проблему с регистрацией через VM 2.0 очень прошу помогите.
*

czuryk

  • Осваиваюсь на форуме
  • 26
  • 4 / 0
Ну для начала лучше обновить версию VM до последней и проверить не пропала ли проблема.

Что касаемо моего решения, в нем есть небольшая проблема, код отрабатывает нормально но, сообщение не выводится

Код должен быть вставлен в основной шаблон сайта
<корень сайта>/templates/<твой шаблон>/index.php
Вставить ближе к началу страницы

Код
$user =& JFactory::getUser();
$app = JFactory::getApplication();

// Проверяем, если пользователь у нас заблокирован, но его ID не равен NULL (то есть он уже существует), то мы делаем переадресацию на страницу триггер, которая практически не используется и одновременно делаем для пользователя с кривой сессией logout
if ( ($user->block == 1) && ($user->id != 0) ) {
  $app->logout( $user->id );
  $app->redirect("index.php?option=com_virtuemart&amp;view=user&amp;layout=default", "");
  }

// Убеждаемся что мы находимся на странице триггере, на статус пользователя нам уже нет дело, показываем уведомление для пользователя и переадресуем на главную страницу.
if ( ($option == "com_virtuemart") && ($view == "user") && ($layout == "default") ) {
  $app->redirect(".", "Вы были успешно зарегистрированы. Вам на указанный Вами почтовый ящик было отправлено письмо с инструкцией по активации. Вы его получите в течение нескольких минут.");
  }
*

D1ma86

  • Новичок
  • 2
  • 0 / 0
К сожалению не помогло(
У меня VM последней версии (2.0.20b)
Ход действий: Сделан сначала что посоветовал DragonWMX т.е. удалил условие Null-дата из поля lastvisitDate
Потом вставил ваш код сzuryk в шаблон файла <корень сайта>/templates/<твой шаблон>/index.php

Теперь после регистрации не приходит сообщение что пользователь зарегистрирован, а при переходи по пришедшей после регистрации активационной ссылке опять получаю "Удаленный сервер или файл не найден".

Потом я оставил условие в поле lastvisitDate и получил "Не удалось зарегистрировать пользователя: Код подтверждения не найден."

Пытался делать ещё таким способом:
модифицируем файл components/com_virtuemart/views/user/tmpl/mail_html_reguser.php .
Изменяем в 53 строке. Вместо:
Цитата:
$activationLink = '<a class="default" href="' . JURI::root(). $this->activationLink . '">' . JText::_('COM_VIRTUEMART_LINK_ACTIVATE_ACCOUNT'). '</a>';
Вставляем:
Цитата:
$modifiedlink = str_replace ("http://","http://www.",JURI::root());
$activationLink = '<a class="default" href="' . $modifiedlink . $this->activationLink . '">' . JText::_('COM_VIRTUEMART_LINK_ACTIVATE_ACCOUNT'). '</a>';

Тогда в письме будет ссылка на сайт с "www" и пользователь будет активирован (а если не забыли, то при переходе по этой ссылке у нас с помощью скрипта произойдет редирект на страницу регистрации). Таким образом проблема должна быть полностью решена. Пишите, если не получится, будем думать!

Представленным здесь: http://forum.virtuemart.ru/viewtopic.php?f=37&t=8563
но у меня в .htaccess прописано
Options +FollowSymLinks
RewriteEngine On
RewriteCond %{HTTP_HOST} ^ваш_домен\.ru
RewriteRule ^(.*)$ http://www.ваш_домен.ru/$1 [R=permanent,L]
и ссылка с регистрацией приходит www.www.ссылка_активации

Может быть есть ещё какие нибудь идеи?
*

lakshmi

  • Захожу иногда
  • 188
  • 5 / 0
Нашел не помню где и скописпастил себе в закладки

Делаем так:
     administrator/components/com_virtuemart/models/user.php
меняем...

У меня заработало на ура!
У меня тоже заработало но есть одно но, при регистрации с покупкой автоматом авторизуется юзер в VirtueMart но не в Joomla если зайти обратно в корзину то форма входа виртумартовская изменилась на кнопку выйти и рядом имя юзера, а форма входа Joomla в модуле на этой же странице, показывает форму ввода логина и пароля как обычно. Потом после активации все равно через какую форму логиниться, везде срабатывает. У меня вирт 2.0.24a и Joomla! 2.5.16.
Добавлю еще что нашел ошибку в файле /components/com_virtuemart/views/user/tmpl/mail_raw_reguser.php
В этой части кода
Код
if (!empty($this->activationLink)) {
    $activationLink = '<a class="default" href="' . JURI::root(). $this->activationLink . '>' . JText::_('COM_VIRTUEMART_LINK_ACTIVATE_ACCOUNT'). '</a>';
}
не закрыта ссылка двойными кавычками
Код
if (!empty($this->activationLink)) {
    $activationLink = '<a class="default" href="' . JURI::root(). $this->activationLink . '">' . JText::_('COM_VIRTUEMART_LINK_ACTIVATE_ACCOUNT'). '</a>';
}
Иза этого пользователю приходило просто ужасное письмо с кучей HTML кода  ^-^
*

lakshmi

  • Захожу иногда
  • 188
  • 5 / 0
Опробовал только что вариант с кодом
Код
$user =& JFactory::getUser();

if ( ($user->block == 1) && ($user->id != 0) ) {
$app = JFactory::getApplication();
$app->logout( $user->id );
$app->redirect("index.php?option=com_virtuemart", "redir mess");
}
Добавил его в index файл шаблона. Теперь иза того что это код разлогинивает пользователя сразу после регистрации, невозможно активировать учетную запись получаю сообщение "Не удалось зарегистрировать пользователя: Код подтверждения не найден."
Без этого кода работает но проявляеться проблема описанная постом выше.
Я еще буду пробовать искать решение если у когото есть мысли по этому поводу пишите  ))).
*

czuryk

  • Осваиваюсь на форуме
  • 26
  • 4 / 0
К сожалению мой код выше не совсем корректен.
Вот этот код стоит в работающем сайте, его нужно только немного адаптировать под ваши нужны:

Код
// no direct access
defined( '_JEXEC' ) or die( 'Restricted access' );
// ......

$itemId = JRequest::getVar('Itemid', '');
$option = JRequest::getVar('option', '');
$view = JRequest::getVar('view', '');
$layout = JRequest::getVar('layout', '');

$user =& JFactory::getUser();
$app = JFactory::getApplication();

// Тут просто не даем открыть стандартную страницу профиля (ибо не зачем)
if ( ($option == "com_users") && ($view == "profile") ) {
  $app->redirect(".", "");
  }

// Определяем, что мы попали на страницу триггер (подробнее см. комментарий ниже) и теперь пишем сообщение пользователю и переадресуем посетителя на главную страницу.
if ( ($option == "com_virtuemart") && ($view == "user") && ($layout == "default") ) {
  $app->redirect(".", "Вы были успешно зарегистрированы. Вам на указанный Вами почтовый ящик было отправлено письмо с инструкцией по активации. Вы его получите в течение нескольких минут.");
  }


// Определяем что пользователь заблокирован НО при этом он авторизован, то есть понимаем, что имеем дело с проблемой.
// Делаем logout для того чтобы пользователь смог корректно авторизоваться сам и делаем переход на страницу треггер (так как если мы
// ПОСЛЕ logoutа делаем переход на любую из страниц - сообщение не отображается. В данном случае страница триггер у нас компонент - VirtueMart, вьюха user, вид - default
if ( ($user->block == 1) && ($user->id != 0) ) {
//  JError::raiseNotice( 100, 'Вы были успешно зарегистрированы. Вам на указанный Вами почтовый ящик было отправлено письмо с инструкцией по активации. Вы его получите в течение нескольких минут.' );
  $app->logout( $user->id );
  $app->redirect("index.php?option=com_virtuemart&amp;view=user&amp;layout=default", "");
  }

// ......
// ......
// ......


Там по логике идет двойной редирект (как бы срабатывает триггер), так как при logoutе ни в какую не хочет отображаться сообщение. Для этого идет редирект через неиспользуемую вьюху - user, default
« Последнее редактирование: 20.11.2013, 13:21:48 от czuryk »
*

czuryk

  • Осваиваюсь на форуме
  • 26
  • 4 / 0
Добавил его в index файл шаблона. Теперь иза того что это код разлогинивает пользователя сразу после регистрации, невозможно активировать учетную запись получаю сообщение "Не удалось зарегистрировать пользователя: Код подтверждения не найден."
Без этого кода работает но проявляеться проблема описанная постом выше.
Я еще буду пробовать искать решение если у когото есть мысли по этому поводу пишите  ))).
На счет ошибки активации - решение проблемы было в этой ветке, у меня все работает.
*

lakshmi

  • Захожу иногда
  • 188
  • 5 / 0
К сожалению мой код выше не совсем корректен.
Вот этот код стоит в работающем сайте, его нужно только немного адаптировать под ваши нужны:

Код
// no direct access
defined( '_JEXEC' ) or die( 'Restricted access' );
// ......

$itemId = JRequest::getVar('Itemid', '');
$option = JRequest::getVar('option', '');
$view = JRequest::getVar('view', '');
$layout = JRequest::getVar('layout', '');

$user =& JFactory::getUser();
$app = JFactory::getApplication();

// Тут просто не даем открыть стандартную страницу профиля (ибо не зачем)
if ( ($option == "com_users") && ($view == "profile") ) {
  $app->redirect(".", "");
  }

// Определяем, что мы попали на страницу триггер (подробнее см. комментарий ниже) и теперь пишем сообщение пользователю и переадресуем посетителя на главную страницу.
if ( ($option == "com_virtuemart") && ($view == "user") && ($layout == "default") ) {
  $app->redirect(".", "Вы были успешно зарегистрированы. Вам на указанный Вами почтовый ящик было отправлено письмо с инструкцией по активации. Вы его получите в течение нескольких минут.");
  }


// Определяем что пользователь заблокирован НО при этом он авторизован, то есть понимаем, что имеем дело с проблемой.
// Делаем logout для того чтобы пользователь смог корректно авторизоваться сам и делаем переход на страницу треггер (так как если мы
// ПОСЛЕ logoutа делаем переход на любую из страниц - сообщение не отображается. В данном случае страница триггер у нас компонент - VirtueMart, вьюха user, вид - default
if ( ($user->block == 1) && ($user->id != 0) ) {
//  JError::raiseNotice( 100, 'Вы были успешно зарегистрированы. Вам на указанный Вами почтовый ящик было отправлено письмо с инструкцией по активации. Вы его получите в течение нескольких минут.' );
  $app->logout( $user->id );
  $app->redirect("index.php?option=com_virtuemart&amp;view=user&amp;layout=default", "");
  }

// ......
// ......
// ......


Там по логике идет двойной редирект (как бы срабатывает триггер), так как при logoutе ни в какую не хочет отображаться сообщение. Для этого идет редирект через неиспользуемую вьюху - user, default
Может у меня не та ситуация но этот код тоже приводит к Не удалось зарегистрировать пользователя: Код подтверждения не найден.
В моем случае как я понял активировать учетную запись в Joomla я могу когда после регистрации залогинился в VirtueMart
*

czuryk

  • Осваиваюсь на форуме
  • 26
  • 4 / 0
Может у меня не та ситуация но этот код тоже приводит к Не удалось зарегистрировать пользователя: Код подтверждения не найден.
В моем случае как я понял активировать учетную запись в Joomla я могу когда после регистрации залогинился в VirtueMart
Исправления которые выши - делали? Именно они решают проблему с корявой активацией.
*

lakshmi

  • Захожу иногда
  • 188
  • 5 / 0
Исправления которые выши - делали? Именно они решают проблему с корявой активацией.
Да их внес сразу. Только что сработало, проверю сейчас еще пару раз ))), я когда тестировал активацию делал через другой браузер может поэтому и не срабатывала )))

Провел тест еще почистил куки зарегил нвого пользователя и опять Не удалось зарегистрировать пользователя: Код подтверждения не найден. (((
При этом редиректит на главную и не выводит никаких сообщений.
Забыл добавить что еще использую плагин plg_system_onepage_vm2
« Последнее редактирование: 20.11.2013, 13:59:55 от lakshmi »
*

Fradkoff

  • Новичок
  • 7
  • 0 / 0
Все заработало. Решение полностью рабочее. Единственное - ошибка в коде. Нужно убрать лишнюю скобку, из-за этого ссылка активации, которая приходит на почту оказывается битой "Удаленный сервер или файл не найден".

Код
// Get the user id based on the token.
$db->setQuery(
'SELECT '.$db->quoteName('id').' FROM '.$db->quoteName('#__users').
' WHERE '.$db->quoteName('activation').' = '.$db->Quote($token).
' AND '.$db->quoteName('block').' = 1' )
);


Верный код:
Код
// Get the user id based on the token.
$db->setQuery(
'SELECT '.$db->quoteName('id').' FROM '.$db->quoteName('#__users').
' WHERE '.$db->quoteName('activation').' = '.$db->Quote($token).
' AND '.$db->quoteName('block').' = 1' );
*

aharu

  • Новичок
  • 4
  • 0 / 0
Подтверждаю. Решение рабочее.
1. правка по инструкции от DragonWMX (два файла)
2. вставка верного кода от Fradkoff (один файл).

Стоит Joomla! 2.5.17   VM 2 v. 2.0.26a.
*

yaso

  • Новичок
  • 4
  • 0 / 0
Предложенные исправления решили проблему авторизации (работает в том числе в связке с OnePage Checkout от Rupostel).
Спасибо DragonWMX, czuryk, Fradkoff.

Однако, при внесении правки в index.php шаблона, после подтверждения заказа, для покупателя не отображается информация "Спасибо за заказ", просто главная страница обычного содержания (так происходит во время самого первого заказа с регистрацией, во второй и последующий разы - информация для данного покупателя присутствует).
Также обстоит дело с личным кабинетом, главная стр. вместо мойсайт.ru/index.php/your-account (но это не так важно в моем случае)
« Последнее редактирование: 18.01.2014, 23:22:50 от yaso »
*

ghost035

  • Новичок
  • 6
  • 0 / 0
Удалось ли отключить автоматическую авторизацию после регистрации?
*

zmitrok

  • Новичок
  • 1
  • 0 / 0
хей форум! Вышеописанные проблемы фиксятся на ура плагином для VirtueMart vp one page checkout

*

alexeialexei

  • Осваиваюсь на форуме
  • 10
  • 0 / 0
Подтверждаю. Решение рабочее.
1. правка по инструкции от DragonWMX (два файла)
2. вставка верного кода от Fradkoff (один файл).

Стоит Joomla! 2.5.17   VM 2 v. 2.0.26a.



так же подтверждаю, решение рабочее
только получилось немного запутанно, сразу не понял:
изменения 2 файлов от ilyash, и один от Fradkoff(который исправил помарку DragonWMX)
*

alexeialexei

  • Осваиваюсь на форуме
  • 10
  • 0 / 0
кстати еще может возникнуть проблема, страница регистрации будет требовать авторизации
для этого просто изменить настройки прав на форму регистрации
Чтобы оставить сообщение,
Вам необходимо Войти или Зарегистрироваться
 

VM 4 версии убрать кнопку и страницу подтверждения заказа?

Автор cntrl

Ответов: 1
Просмотров: 1412
Последний ответ 31.01.2024, 14:27:21
от cntrl
VirtueMart 3 Отображать только товары в наличии!

Автор GaziroFFka

Ответов: 4
Просмотров: 3372
Последний ответ 06.06.2023, 13:55:13
от Akeksandr
SP VirtueMart Category Search

Автор ve1006

Ответов: 10
Просмотров: 7274
Последний ответ 18.01.2023, 10:39:10
от AzMandius
Как вывести модуль в страницу VirtueMart?

Автор harddrop

Ответов: 11
Просмотров: 4247
Последний ответ 13.11.2022, 13:11:37
от Evgen Kulibin
Как правильно настроить покупку в VirtueMart?

Автор varella

Ответов: 1
Просмотров: 2364
Последний ответ 12.10.2022, 16:14:04
от varella