Новости Joomla

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

AlekVolsk

  • Гуру
  • 6915
  • 415 / 4
Собственно, сабж.
Подробнее.
В ленте новостей периодически появляются сообщения вида: доступно обновление, можно скачать из личного кабинета.
Если пользователь авторизован, перенаправить по ссылке в личный кабинет в раздел загрузок.
Если пользователь как гость - кликнуть по пункту меню с определенным id (id пункта меню, а не css-id), имеющего href="#" и форму авторизации в виде подменю.

Правильно ли я понял, что надо:
1. плагин на OnContentPrepare, добавляющий у всех ссылок в материале с определенным классом (например .private-cab) дополнительный класс, для авторизованных один, для гостей - другой (например, .user-reg и .user-guest)/
2. привязывать js на клик по ссылке с определенным набором  классов:
$('.private-cab.user-reg').click()
$('.private-cab.user-guest').click()

Тут же встает отдельный вопрос: если пользователь-гость уже просматривает материал с подготовленными ссылками и при этом проходит авторизацию (при авторизации не происходит перенаправления куда-либо - остаемся в том же материале), ссылки в материале класс с одного на другой поменяют? т.е. будет ли повторный вызов OnContentPrepare после момента авторизации? Или прописывать еще что-то надо будет?
« Последнее редактирование: 03.10.2014, 10:15:17 от b2z »
*

robert

  • Живу я здесь
  • 4974
  • 457 / 20
Не надо так сложно: можно сразу в плагине добавить проверку
Код: php-brief
$user=JFactory::getUser(); 
$href=!$user->guest?'Качаем':'Логинимся';
Не забудьте redirect после успешной авторизации.
Не будь паразитом, сделай что-нибудь самостоятельно!
*

AlekVolsk

  • Гуру
  • 6915
  • 415 / 4
и как я в href запихаю клик на пункте меню, которое по клику просто раскрывается - все?
*

robert

  • Живу я здесь
  • 4974
  • 457 / 20
клик на пункте меню
Вы имели в виду пункт меню для модуля login? Можно, наверное, не пробовал, но ссылка есть ссылка.
Но я бы использовал форму от компонента, там можно прописать redirect:
Код: php-brief
$return=base64_encode('Качаем');
$href=!$user->guest?'Качаем':'index.php?option=com_users&view=login&return='.$return;

P.S. Только сейчас увидел, что вы хотите юзера направить в личный кабинет. Тогда еще проще: redirect не нужен, после успешной авторизации он туда и попадет.
Код: php-brief
$href=!$user->guest?'Качаем':'index.php?option=com_users&view=login';
« Последнее редактирование: 02.10.2014, 15:29:26 от robert »
Не будь паразитом, сделай что-нибудь самостоятельно!
*

AlekVolsk

  • Гуру
  • 6915
  • 415 / 4
Не, вся фишка именно в том, чтобы по менюшке кликнуть )
короче, инициировать вызов $('.item-101').click();
*

passer

  • Завсегдатай
  • 1013
  • 75 / 3
$( "#myLinck" ).click(function() {
  $('.item-101').trigger( "click" ); 
});
*

robert

  • Живу я здесь
  • 4974
  • 457 / 20
(при авторизации не происходит перенаправления куда-либо - остаемся в том же материале), ссылки в материале класс с одного на другой поменяют? т.е. будет ли повторный вызов OnContentPrepare после момента авторизации?
OnContentPrepare выстреливается при подготовке материала. Если материал уже отрендерен, то подготавливать нечего. Так что нужно выяснить, что происходит в этот момент:
(при авторизации не происходит перенаправления куда-либо - остаемся в том же материале)
Не будь паразитом, сделай что-нибудь самостоятельно!
*

AlekVolsk

  • Гуру
  • 6915
  • 415 / 4
В момент авторизации OnContentPrepare срабатывает повторно, класс у ссылки меняется.

При формировании в плагине переменных для js, во фронте они дублируются
Код: php
  public function onContentPrepare($context, $article, $params)
  {
    if ($context == 'com_finder.indexer') return true;
    $initClass = $this->params->get('initclass');
    $linkGuest = $this->params->get('linkguest');
    $linkReg = $this->params->get('linkreg');
    $isGuest = JFactory::getUser()->guest;

    $doc = JFactory::getDocument();
    $doc->addScriptDeclaration('var plg_pc_linkguest = "'.JRoute::_($linkGuest).'";'); // дублируется во фронте
    $doc->addScriptDeclaration('var plg_pc_linkreg = "'.JRoute::_($linkReg).'";'); // дублируется во фронте
    $doc->addScript('plugins/content/privatecab/privatecab.js');

    $article->text = $isGuest ?
      str_replace('"'.$initClass.'"', '"'.$initClass.' user-guest"', $article->text) :
      str_replace('"'.$initClass.'"', '"'.$initClass.' user-reg"', $article->text);
  }
Как можно избежать дубляжа переменных? Обработка материала происходит нормально, как запланировано.

Скрипт:
Код: javascript
jQuery(document).ready(function($) {

  $('.' + plg_pc_initclass + '.user-guest').on('click', function() {
    document.location.href = plg_pc_linkguest;
  });

  $('.' + plg_pc_initclass + '.user-reg').on('click', function() {
    document.location.href = plg_pc_linkreg;
  });

});
Сработал лишь однажды. В чем мой косяк?
*

AlekVolsk

  • Гуру
  • 6915
  • 415 / 4
Все, скрипт работает, в имени переменной забил русскую С вместо латинской Ц =)
Осталось решить только вопрос дубляжа переменных.
*

robert

  • Живу я здесь
  • 4974
  • 457 / 20
Зачем вся эта возня с jQuery? Из того, что выложено в теме, не вижу смысла.

Осталось решить только вопрос дубляжа переменных.
По-моему, если только использовать addScript, но все равно не получится, потому что в скрипте присутствуют PHP-переменные.
« Последнее редактирование: 02.10.2014, 22:19:53 от robert »
Не будь паразитом, сделай что-нибудь самостоятельно!
*

AlekVolsk

  • Гуру
  • 6915
  • 415 / 4
Чуть позже скрипт доработаю, чтобы кликал по меню, как passer предложил.
*

AlekVolsk

  • Гуру
  • 6915
  • 415 / 4
Код: javascript
  $('.' + plg_pc_initclass + '.user-guest').on('click', function() {
    if (plg_pc_ismenu == 1) {
      $('.item-' + plg_pc_menuitemid).trigger('click');
    } else {
      document.location.href = plg_pc_linkguest;
    }
  });
На входе в функцию plg_pc_ismenu = 1, plg_pc_menuitemid = 115.
Клик по пункту меню .item-115 происходит, при этом (другим скриптом, из шаблона) ему присваивается класс open - появляется подменю (с формой авторизации, как и было задумано).
При выходе из функции класс open у пункта меню исчезает - подменю, есс-но, тоже скрывается...
"Ничччего не понимаю"
« Последнее редактирование: 02.10.2014, 22:40:44 от AlekVolsk »
*

Shustry

  • Гуру
  • 6434
  • 745 / 3
Код: javascript
jQuery(document).ready(function($) {
var link = $('.linkclass');
var loginform = $('#login-form');
var loginlink = $(loginform).parents('li').first();

if(($(link).length)&&($(loginform).length)) {
$(link).each(function(idx,el){
$(el).on('click', function() {
$(loginlink).trigger('click');
return false;
});
});
}

});
« Последнее редактирование: 02.10.2014, 23:55:51 от Shustry »
*

AlekVolsk

  • Гуру
  • 6915
  • 415 / 4
Спс, работает. Решено.
Чтобы оставить сообщение,
Вам необходимо Войти или Зарегистрироваться
 

Селект с возможностью выбора всех данных материала

Автор bombapiter

Ответов: 3
Просмотров: 518
Последний ответ 30.04.2021, 13:17:13
от v42bis
Переход по ссылки и запуск функции? [РЕШЕНО]

Автор warlocksp

Ответов: 19
Просмотров: 974
Последний ответ 21.02.2020, 12:06:24
от warlocksp
[РЕШЕНО] Скроллинг страницы вниз?

Автор warlocksp

Ответов: 3
Просмотров: 651
Последний ответ 02.02.2020, 15:56:55
от warlocksp
Разобраться с небольшим кодом PHP (РЕШЕНО)

Автор Шмайсер

Ответов: 18
Просмотров: 972
Последний ответ 16.01.2020, 21:47:56
от sivers
Как изнутри iframe вызвать внешнюю функцию? [РЕШЕНО]

Автор dm-krv

Ответов: 6
Просмотров: 870
Последний ответ 25.08.2019, 20:41:07
от dm-krv