Форум русской поддержки Joomla!® CMS
04.12.2016, 22:27:28 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

Войти
   
   Начало   Поиск Joomla 3.0 FAQ Joomla 2.5 FAQ Joomla 1.5 FAQ Правила форума Новости Joomla Реклама Войти Регистрация Помощь  
Страниц: [1]   Вниз
  Добавить закладку  |  Печать  
Автор

видимость переменной при выводе модуля в компоненте

 (Прочитано 444 раз)
0 Пользователей и 1 Гость смотрят эту тему.
ilunga
Осваиваюсь на форуме
***

Репутация: +0/-0
Offline Offline

Сообщений: 42


« : 07.11.2015, 13:10:47 »

Доброго дня.

Вставляю модуль в шаблон компонента через модульную позицию.
Конкретнее: вставляю плеер в форумный профиль юзера, использую стандартную схему.

Код
<?php
jimport( 'joomla.application.module.helper' );
$module = JModuleHelper::getModules('our-module');
$attribs['style'] = 'xhtml';
echo JModuleHelper::renderModule($module[0], $attribs);
?>

Всё выводится корректно, без проблем.

Но необходимо изменить одну переменную (путь к именной папке юзера), которая задаётся внутри вставляемого модуля.
Поэтому в принимающем шаблоне я объявляю переменную ДО кода позиции:

Код
$userProfile = JFactory::getUser($profile->id)->username;

А в коде встраиваемого модуля устанавливаю условие, которое должно менять значение модульной переменной ($nmapdir), если модуль работает на странице профиля:

Код
if (isset($userProfile) ) {
  $nmapdir = 'mp3/' . $userProfile;
} else {
  ...
}

Я ожидаю, что при загрузке модуля в компонент уже объявленная выше переменная ($userProfile) будет прочитана, и сработает условие. Само по себе условие работает (проверял прямой вставкой переменной в код модуля).

Но загружаемый модуль не видит эту переменную в упор, если она находится в принимающем файле. Я пробовал её объявлять и как глобальную, вставлять в разные места - до, внутрь и после кода позиции, но безрезультатно.

Подскажите пожалуйста, как заставить встроенный в позицию шаблона модуль увидеть переменную из этого шаблона?
Записан
Fedor Vlasenko
Профи
********

Репутация: +696/-5
Offline Offline

Пол: Мужской
Сообщений: 3820


Все начинается с Value


« Ответ #1 : 07.11.2015, 13:34:32 »

Как передать переменную из компонента в модуль
Записан
ilunga
Осваиваюсь на форуме
***

Репутация: +0/-0
Offline Offline

Сообщений: 42


« Ответ #2 : 07.11.2015, 15:55:28 »

да, спасибо.

Но после применения этого метода возникла частная проблема в работе условия: оно не работает, если одновременно открыты две страницы с модулем (одна из которых в компоненте) - видимо, потому, что переменная присутствует на обоих?
Записан
Fedor Vlasenko
Профи
********

Репутация: +696/-5
Offline Offline

Пол: Мужской
Сообщений: 3820


Все начинается с Value


« Ответ #3 : 07.11.2015, 16:11:47 »

Но после применения этого метода возникла
там несколько решений около 5. Пробуйте остальные. К примеру
Код
//устанавливаем
$doc = JFactory::getDocument();
$doc->test = 'AAAA';
// и нужном месте выводить
$doc = JFactory::getDocument();
echo $doc->test; // AAAA'
 
Записан
ilunga
Осваиваюсь на форуме
***

Репутация: +0/-0
Offline Offline

Сообщений: 42


« Ответ #4 : 07.11.2015, 18:38:03 »

там несколько решений около 5. Пробуйте остальные.
спасибо.
В силу моего очень поверхностного знания php, я мало понял вашу запись,
но решил эту проблему методом назначения пустого значения переменной в сессии после её использования.   
Записан
ilunga
Осваиваюсь на форуме
***

Репутация: +0/-0
Offline Offline

Сообщений: 42


« Ответ #5 : 07.11.2015, 18:50:15 »

у меня остался по этой теме один соседний вопрос:

методом
Код
JFactory::getUser($profile->id)->username
удаётся получить только id, name, username, email.
Но не удаётся получить usertype и gid.

А мне нужно выводить модуль для всех групп, кроме одной (чей id=11).
Всё уже работает, только это условие хромает Sad

Как получить usertype и gid в Joomla 3.x?

Посмотрел тут, но мало чего понял:
How to get a users usergroup?$user->get('usertype')depricate
« Последнее редактирование: 07.11.2015, 19:13:17 от ilunga » Записан
passer
Живу я здесь
******

Репутация: +69/-3
Offline Offline

Пол: Мужской
Сообщений: 829



« Ответ #6 : 07.11.2015, 19:22:45 »

Смотрите не через echo, а через var_dump()
Видимо usertype и gid не строка, а массив или обьект.
Код
var_dump(JFactory::getUser($profile->id)->usertype);
Записан
ilunga
Осваиваюсь на форуме
***

Репутация: +0/-0
Offline Offline

Сообщений: 42


« Ответ #7 : 07.11.2015, 19:31:49 »

Смотрите не через echo, а через var_dump()
Видимо usertype и gid не строка, а массив или обьект.
это, конечно, так. Но такой код выдаёт NULL.
« Последнее редактирование: 07.11.2015, 19:39:30 от ilunga » Записан
passer
Живу я здесь
******

Репутация: +69/-3
Offline Offline

Пол: Мужской
Сообщений: 829



« Ответ #8 : 07.11.2015, 19:51:10 »

Код
var_dump(JFactory::getUser($profile->id));
Записан
ilunga
Осваиваюсь на форуме
***

Репутация: +0/-0
Offline Offline

Сообщений: 42


« Ответ #9 : 07.11.2015, 20:20:51 »

Код
var_dump(JFactory::getUser($profile->id));
да, очень-очень спасибо.

Рабочий код получается типа такого:
Код
<?php $UserProfile = JFactory::getUser($profile->id);
if(in_array(11, $UserProfile->groups)): ?>

Осталась сущая малость - обратить условие: не группа id=11, а все  группы, кроме 11.
Но не знаю, как это сделать.
Или просто перечислить все группы?
« Последнее редактирование: 07.11.2015, 20:37:58 от ilunga » Записан
passer
Живу я здесь
******

Репутация: +69/-3
Offline Offline

Пол: Мужской
Сообщений: 829



« Ответ #10 : 07.11.2015, 22:04:23 »

Код
if(!in_array(11, $UserProfile->groups)):
Записан
Страниц: [1]   Вверх
  Добавить закладку  |  Печать  
 
Перейти в:  

Powered by SMF 1.1.21 | SMF © 2006, Simple Machines

Joomlaforum.ru is not affiliated with or endorsed by the Joomla! Project or Open Source Matters.
The Joomla! name and logo is used under a limited license granted by Open Source Matters
the trademark holder in the United States and other countries.

LiveInternet