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

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

[FAQ] Как передать переменную из компонента в модуль?

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

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

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



« : 21.05.2012, 16:24:10 »

Как передать из jshop название товара <?php print $this->product->name?> и вывести в модуле формы (использую - Simpleform2)?
« Последнее редактирование: 29.08.2013, 09:57:50 от b2z » Записан
Fedor Vlasenko
Профи
********

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

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


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


« Ответ #1 : 21.05.2012, 16:29:00 »

Не пробовал
Код
<?php 
$doc = JFactory::getDocument();
print $doc->product->name;
?>
 
Записан
mocart
Осваиваюсь на форуме
***

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

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



« Ответ #2 : 21.05.2012, 17:40:07 »

Poznakomlus, так не выходит Sad

максимум чего удалось добиться - Титле страницы
приведу код для наглядности
Показать текстовый блок
и он же титле потом на имейл приходит
Код:
<p>"<?php echo JRequest::getVar('pageTitle');?>"</p>
Записан
mohax
Живу я здесь
******

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

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



« Ответ #3 : 21.05.2012, 17:44:39 »

А не мудрствуя лукаво записать в сессию и дернуть ее оттуда не вариант?
Записан
Fedor Vlasenko
Профи
********

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

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


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


« Ответ #4 : 21.05.2012, 17:59:41 »

Код
<?php 
$doc = JFactory::getDocument();
echo $doc->getTitle();
?>
зачем input?
и что у вас в массиве $doc, есть ли нужные данные
Код
<?php 
$doc = JFactory::getDocument();
print_r($doc);
?>
Записан
mocart
Осваиваюсь на форуме
***

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

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



« Ответ #5 : 21.05.2012, 18:21:53 »

зачем input?
без него заголовок (пока хотя бы) не уйдет на мыло.
и что у вас в массиве $doc, есть ли нужные данные
посмотрел, но из компонента там вообще нет данных
] => Array ( [type] => component [name] => [attribs] => Array ( ) ) )
Записан
SDKiller
Dev Team
******

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

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


...ergo sum


« Ответ #6 : 21.05.2012, 18:26:33 »

А не мудрствуя лукаво записать в сессию и дернуть ее оттуда не вариант?

А это по сути - единственный вариант (куки как браузерозависимые не рассматриваем, GLOBALS как полагается отключены).
Записан
Fedor Vlasenko
Профи
********

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

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


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


« Ответ #7 : 21.05.2012, 18:48:58 »

А это по сути - единственный вариант (куки как браузерозависимые не рассматриваем, GLOBALS как полагается отключены).
нет не единственный
есть еще js, можно и из урла страницы вытянуть инфу
Записан
SDKiller
Dev Team
******

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

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


...ergo sum


« Ответ #8 : 21.05.2012, 18:56:37 »

нет не единственный
есть еще js, можно и из урла страницы вытянуть инфу

js - браузерозависимое решение
url - при условии что переменные передаются в get
Записан
danik.html
Практически профи
*******

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

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



« Ответ #9 : 21.05.2012, 19:06:12 »

Я так понимаю модуль должен вывести название товара, только когда находимся на странице товара?
Ок. Сначала отрабатывает компонент, затем модуль. Значит, мы может что-то спокойно передать из компонента в модуль. Или Возможно получится получить инфу о товаре через апи jshop.
Записан
mocart
Осваиваюсь на форуме
***

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

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



« Ответ #10 : 21.05.2012, 22:52:08 »

А не мудрствуя лукаво записать в сессию и дернуть ее оттуда не вариант?
Ребят, если б знал как - я бы не спрашивал. Если поясните - буду премного благодарен Azn

На самом деле пример встретил здесь (клацаем "экспресс"). Но там видимо отдельный модуль для JS создавали...потому что готовый такой не нашел и решил сторонним модулем попробовать сделать.
Записан
Fedor Vlasenko
Профи
********

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

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


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


« Ответ #11 : 21.05.2012, 22:57:13 »

Записываем вставлять код в компоненте
Код
<?php
$session = JFactory::getSession();
$session->set("product_name",  $this->product->name);
?>
Считываем, код в модуль
Код
<?php
$session = JFactory::getSession();
echo $session->get("product_name");
?>
« Последнее редактирование: 19.07.2013, 13:11:47 от Fedor Vlasenko » Записан
varX
Живу я здесь
******

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

Сообщений: 1482


разработка компонентов


« Ответ #12 : 21.05.2012, 23:07:23 »

Передать переменную через сессию и GLOBALS можно, только если код модуля выполняется позже компонента в шаблоне. Если раньше, то js - единственное приемлемое решение.
Записан
mocart
Осваиваюсь на форуме
***

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

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



« Ответ #13 : 21.05.2012, 23:11:36 »

Передать переменную через сессию и GLOBALS можно, только если код модуля выполняется позже компонента в шаблоне. Если раньше, то js - единственное приемлемое решение.
модуль в самом конце, где дебаг, он у меня все равно скрыт - я могу хоть куда его опубликовать, всплывает в окне из карточки.

сейчас попробую код Poznakomlus, пока не знаю где в компоненте именно его нужно вставить
Записан
mohax
Живу я здесь
******

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

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



« Ответ #14 : 21.05.2012, 23:47:09 »

Передать переменную через сессию и GLOBALS можно, только если код модуля выполняется позже компонента в шаблоне. Если раньше, то js - единственное приемлемое решение.
Если я правильно помню то сначала отрабатывает компонент, потом модуль. И вроде их расположение на странице не играет роли. Хотя могу ошибаться, на практике не проверял.
Записан
mocart
Осваиваюсь на форуме
***

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

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



« Ответ #15 : 21.05.2012, 23:50:29 »

Записываем вставлять код в компоненте
$session =& JFactory::getSession();
$session->set("product_name",  $this->product->name);
Считываем, код в модуль
$session =& JFactory::getSession();
echo $session->get("product_name");

Poznakomlus,  спасибо, все получилось! +1 Wink
Попробую и другую инфу также вытянуть.
Записан
mohax
Живу я здесь
******

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

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



« Ответ #16 : 21.05.2012, 23:52:26 »

Посмотрел я что нужно. Там к Вас все равно JS отрабатывает и форму открывает. Почему бы при рендинге карточки товара не передавать в функцию отображения формы все необходимые данные. Типа
Код:
function showform(тут все данные)

Подробно не смотрел, спать пора. Но это мне кажется достаточно удобный  вариант в вашем случае.
Записан
mocart
Осваиваюсь на форуме
***

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

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



« Ответ #17 : 22.05.2012, 00:50:24 »

mohax, я не против развернуть логику в другую сторону, и пока все под рукой можно поэкспериментировать Azn


Там еще будет косяк с формой (но то уже другая тема, наверное) - надо будет научить ее не закрываться (точнее окно) при вводе неправильных данных в поле, а выводить сообщение об ошибке - здесь же, в окне.

И таким образом получим неплохое, я считаю, решение покупки товара "в один клик"
Записан
mohax
Живу я здесь
******

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

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



« Ответ #18 : 22.05.2012, 07:50:38 »

mohax, я не против развернуть логику в другую сторону, и пока все под рукой можно поэкспериментировать Azn


Там еще будет косяк с формой (но то уже другая тема, наверное) - надо будет научить ее не закрываться (точнее окно) при вводе неправильных данных в поле, а выводить сообщение об ошибке - здесь же, в окне.

И таким образом получим неплохое, я считаю, решение покупки товара "в один клик"

Раз уж начали, то не посмотреть ли Вам в сторону написания дополнительного функционала к магазину (новый контроллер, модель и вьюха), которые через встроенный behavior.modal загружался бы в модальное окно. Там можно и проверку сделать и все остальное. И передавать просто ID товара, а уже в модели получать запросом данные товара. Но это уже  философия. Где-то надо остановиться))
Записан
Fedor Vlasenko
Профи
********

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

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


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


« Ответ #19 : 22.05.2012, 18:26:41 »

вообще можно в компоненте прописать вызов модуля  Smiley
Код
<?php
$document   =  JFactory::getDocument();
$renderer   = $document->loadRenderer('module');
$options    = array('style' => 'raw');
$module     = JModuleHelper::getModule('mod_breadcrumbs'); //mod_breadcrumbs замените на свой
$module->params = "product_name=".$this->product->name; //задаем значения
$module->params .= "\nproduct_price=10";//каждый параметр разделяется символом новой строки \n.
echo $renderer->render($module, $options);
?>
 
А в самом модуле выводить так:
Код
<?php 
echo $params->get('product_name');
echo $params->get('product_price');
?>
 
Продолжение следует...
« Последнее редактирование: 19.07.2013, 13:16:10 от Fedor Vlasenko » Записан
mohax
Живу я здесь
******

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

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



« Ответ #20 : 22.05.2012, 19:46:28 »

вообще можно в компоненте прописать вызов модуля  Smiley
Код
<?php
$module->params = "product_name=".$this->product->name; //задаем значения
$module->params .= "\nproduct_price=10";//каждый параметр разделяется символом новой строки \n.
?>
 
А так не сработает?
Код:
$module->params->set("product_name", $this->product->name)
Записан
mocart
Осваиваюсь на форуме
***

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

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



« Ответ #21 : 22.05.2012, 22:26:43 »

А тогда еще вопрос - как на SEO это повлияет, ведь получается что часть контента страницы с товаром дублируется и еще и под display:none? Кажется что это не совсем хорошо...

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

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

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


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


« Ответ #22 : 22.05.2012, 23:55:55 »

Еще один вариант передачи данных из компонента в модуль проверено в Joomla 1.5 и 2.5. Yes!
Публикуется на форуме ВПЕРВЫЕ!
Ни в одной документации о Joomla вы не найдете такого решения.  Yes!
В компоненте пишем:
Код
<?php
$document =  JFactory::getDocument();
$document->setBuffer( 'Znachenie', 'component', 'parametr' );
?>
 
В модуле считываем:
Код
<?php
echo JFactory::getDocument()->getBuffer('component', 'parametr');
//return Znachenie
?>
 
« Последнее редактирование: 19.07.2013, 13:12:22 от Fedor Vlasenko » Записан
mocart
Осваиваюсь на форуме
***

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

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



« Ответ #23 : 23.05.2012, 03:21:33 »

Poznakomlus, просто супер! работает и так Azn
Название товара передается - все как надо, а вот картинку и цену так не передать((
Картинка частями формируется
<img id = "main_image_<?php print $image->image_id?>" src = "<?php print $this->image_product_path?>/<?php print $image->image_name;?>" alt="<?php print htmlspecialchars($image->_title)?>" title="<?php print htmlspecialchars($image->_title)?>" />

и вот так ничего не передает
$document->setBuffer( '$image->image_id', 'component', 'параметр' );
возможно, я что-то не так понял

и цена тоже получается на ходу формируется
<?php print formatprice($this->product->getPriceCalculate())?><?php print $this->product->_tmp_var_price_ext;?>
Записан
Fedor Vlasenko
Профи
********

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

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


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


« Ответ #24 : 23.05.2012, 04:01:07 »

В компонент код
Код
<?php
$document =  JFactory::getDocument();
$document->setBuffer( json_encode( $image), 'component', 'image' );
?>
 
В модуль
Код
<?php
$document =  JFactory::getDocument();
$image = json_decode($document->getBuffer('component', 'image'));
$image_product_path = "Введите путь к папке картинок он постоянный";
?>
<img id = "main_image_<?php print $image->image_id?>" src = "<?php print $image_product_path;?>/<?php print $image->image_name;?>" alt="<?php print htmlspecialchars($image->_title)?>" title="<?php print htmlspecialchars($image->_title)?>" />
 
« Последнее редактирование: 19.07.2013, 13:12:41 от Fedor Vlasenko » Записан
Dron79
Давно я тут
****

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

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

Век живи - век учись!


« Ответ #25 : 09.08.2012, 01:45:05 »

Еще один вариант передачи данных из компонента в модуль проверено в Joomla 1.5 и 2.5. Yes!
Публикуется на форуме ВПЕРВЫЕ!
Ни в одной документации о Joomla вы не найдете такого решения.  Yes!
В компоненте пишем:
Код
<?php
$document = & JFactory::getDocument();
$document->setBuffer( 'Znachenie', 'component', 'parametr' );
?>
 
В модуле считываем:
Код
<?php
echo JFactory::getDocument()->getBuffer('component', 'parametr');
//return Znachenie
?>
 
Благодарю за новую инфу.
Записан
Fedor Vlasenko
Профи
********

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

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


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


« Ответ #26 : 16.10.2012, 13:30:29 »

Дополню решением с JRequest::getVar и JRequest::setVar
Код
JRequest::setVar('name', 'Myname', 'post');//задаем
echo JRequest::getVar('name', '', 'post'); //считываем
просто и элементарно
API по свежее JInput
Код
JFactory::getApplication()->input->set('parametr', 'znachenie');//задаем
echo JFactory::getApplication()->input->get('parametr'); //считываем
         
« Последнее редактирование: 22.10.2012, 02:03:33 от Poznakomlus » Записан
Fedor Vlasenko
Профи
********

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

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


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


« Ответ #27 : 22.10.2012, 00:55:47 »

Дополню решением с помощью API (setUserState, getUserState)
Код
JFactory::getApplication()->setUserState('parametr', 'znachenie'); //задаем
echo JFactory::getApplication()->getUserState('parametr'); //считываем
Записан
fbr
Живу я здесь
******

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

Сообщений: 1260


« Ответ #28 : 22.10.2012, 01:18:43 »

Дополню решением с помощью API (setUserState, getUserState)
Код
JFactory::getApplication()->setUserState('parametr', 'znachenie'); //задаем
echo JFactory::getApplication()->getUserState('parametr'); //считываем

Супер!
Poznakomlus, спасибо))

я как раз по другому поводу искал решение подобное решение
Записан
mohax
Живу я здесь
******

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

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



« Ответ #29 : 22.10.2012, 09:01:49 »

Дополню решением с помощью API (setUserState, getUserState)
Код
JFactory::getApplication()->setUserState('parametr', 'znachenie'); //задаем
echo JFactory::getApplication()->getUserState('parametr'); //считываем
Так она на базе сессий и работает же. Зачем городить огород, если можно с сессией работать?
Записан
Страниц: [1] 2  Все   Вверх
  Добавить закладку  |  Печать  
 
Перейти в:  

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