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

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

[Решено] Передача переменной между видами

 (Прочитано 428 раз)
0 Пользователей и 1 Гость смотрят эту тему.
platonische
Давно я тут
****

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

Сообщений: 297


Парусные экспедиции vk.com/tc670


« : 22.03.2016, 17:10:51 »

Как передать переменную из одного вида редактирования записи в другой вид. Так же необходима кнопка перехода на другой вид.

Поясню.
Есть виды Клиент/Клиенты и Заказ/Заказы. Элемент заказ содержит поле КЛИЕНТ_ИД

Как передать из вида Клиент, где мы знаем наш текущей ИД в вид ЗАКАЗ (новый заказ без ИД заказа).

Мысль такая:
Создаю кнопку в виде
Код:
JToolBarHelper::custom( 'customer.addorder', '', '','COM_TURISM_BUTTON_ADD_ORDER' );

Создаю в контроллере task "addorder"
Вопрос как здесь получить ИД?

Здесь же загоняю ИД в сессию
Код:
JFactory::getApplication()->setUserState('клиент ИД', 'значение');
 

в виде Заказ проверяю значение в моделе в функции getItem и если есть
Код:
JFactory::getApplication()->getUserState('клиент ИД');
то в item подменяю значение

« Последнее редактирование: 23.03.2016, 17:46:49 от platonische » Записан
NewUsers
Давно я тут
****

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

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


« Ответ #1 : 22.03.2016, 17:16:29 »

Вопрос как здесь получить ИД?

Код
<?php $id = JRequest::getInt('id'); ?>
Записан
platonische
Давно я тут
****

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

Сообщений: 297


Парусные экспедиции vk.com/tc670


« Ответ #2 : 22.03.2016, 23:38:29 »

Спасибо! Но что-то уперся в контроллер
Что надо для того чтобы task=customer.addorder делал операции какие-то и перенаправлял на другой task=order.edit (Контроллер order)
я создал в контроллере customer функцию JToolBarHelper::custom( 'customer.addorder', '', '','COM_TURISM_BUTTON_ADD_ORDER' );
Код:
protected function addorder()
{
$customer_id = JRequest::getInt('id'); // получили ИД клиента
JFactory::getApplication()->setUserState('customer_id', $customer_id); // Сделали запись в сессию
$this->setRedirect(
JRoute::_(
'index.php', false
)
);
}
Что еще надо для task? Его надо регистрироваль или как?
и правильно ли я его вызвал?
view.php вида customer
Код:
JToolBarHelper::custom( 'customer.addorder', '', '','COM_TURISM_BUTTON_ADD_ORDER' );
Записан
platonische
Давно я тут
****

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

Сообщений: 297


Парусные экспедиции vk.com/tc670


« Ответ #3 : 22.03.2016, 23:43:01 »

Видимо надо как-то определить task или недогоняю...
сменил на вот такое
Код:
JToolBarHelper::cancel( 'customer.addorder', 'COM_TURISM_BUTTON_ADD_ORDER' );
и получил то что хотел, почему из JToolBarHelper::custom не отрабатывает?
Записан
b2z
Support Team
*****

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

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


Разраблю понемногу


« Ответ #4 : 22.03.2016, 23:43:49 »

Цитировать
Что надо для того чтобы task=customer.addorder делал операции какие-то и перенаправлял на другой task=order.edit (Контроллер order)
Что значит перенаправлял? Такое невозможно. Перенаправление - это отображение уже другой страницы.

Кстати, JRequest::getInt замените на $this->input->getInt
Записан
platonische
Давно я тут
****

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

Сообщений: 297


Парусные экспедиции vk.com/tc670


« Ответ #5 : 23.03.2016, 17:16:12 »

Что значит перенаправлял? Такое невозможно. Перенаправление - это отображение уже другой страницы.
Собственно это и надо! В форме создания клиента view=customer хочу поставить кнопку "Добавить заказ", в действия этой кнопки хочу вложить следующее:
1. Сохранение (если клиент новый)
2. Сохранение ИД клиента в сессию
3. Перенаправление на view=order (создание нового элемента - заказа)
4. Заполнение поля customer_id по значению из сессии.

По большому счету у меня это вышло с кнопкой типа cancel, но вот с кнопкой типа custom не вышло. Почему?
custom мне кажется лучше т.к. я туда иконки свои поставлю. Ну и не буду дергать лишние методы.
Записан
platonische
Давно я тут
****

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

Сообщений: 297


Парусные экспедиции vk.com/tc670


« Ответ #6 : 23.03.2016, 17:46:26 »

Задача решена. В custom типе кнопке нужен обязательный пятый параметр, который говорит контроллеру работать со списком выбранных элементов (true) и (false) не работать со списком. Я этот параметр не указал - вот была и проблема.
Скажу что надо ставить true если кнопка выводится в виде списка и false если кнопка выводится в виде редактирования элемента
https://docs.joomla.org/Creating_a_toolbar_for_your_component
https://docs.joomla.org/JToolBarHelper/custom
Записан
platonische
Давно я тут
****

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

Сообщений: 297


Парусные экспедиции vk.com/tc670


« Ответ #7 : 23.03.2016, 17:49:35 »

Ну с сессией я поступил чуть иначе
Контроллер customer
Показать текстовый блок

Далее получаем данные в моделе order и убиваем переменную из сессии чтоб не навредила.
модель order изменили loadFormData()
Показать текстовый блок
Записан
b2z
Support Team
*****

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

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


Разраблю понемногу


« Ответ #8 : 23.03.2016, 18:03:16 »

Код
$this->setRedirect(
   JRoute::_('index.php?option=com_turism&task=order.edit', false
);

Ну бред же - перенаправлять на другой контроллер. Только ради того, чтобы вызвать модель order? Сделайте всё в этом же addorder(), зачем нужно вызывать другой контроллер?
Записан
platonische
Давно я тут
****

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

Сообщений: 297


Парусные экспедиции vk.com/tc670


« Ответ #9 : 23.03.2016, 18:33:58 »

Код
$this->setRedirect(
   JRoute::_('index.php?option=com_turism&task=order.edit', false
);

Ну бред же - перенаправлять на другой контроллер. Только ради того, чтобы вызвать модель order? Сделайте всё в этом же addorder(), зачем нужно вызывать другой контроллер?

Не понял... Имеешь ввиду вот так
Код
$this->setRedirect(
   JRoute::_('index.php?option=com_turism&view=order&layout=edit', false
);

Если нет, то я не понимаю что можно по-другому.
Записан
platonische
Давно я тут
****

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

Сообщений: 297


Парусные экспедиции vk.com/tc670


« Ответ #10 : 23.03.2016, 18:35:58 »

ААА вон вы чего. Я не знаю же данных в этом виде для заказа да и не нужны они мне в виде "Клиент". Нужна возможность быстро перейти на добавление клиенту заказа.
По кнопе уходим в добавление заказа и там создаем.
Записан
platonische
Давно я тут
****

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

Сообщений: 297


Парусные экспедиции vk.com/tc670


« Ответ #11 : 23.03.2016, 18:42:37 »

Добавить картинку в кнопку
http://stackoverflow.com/questions/4079294/add-image-to-joomla-jtoolbar-custom-link-button
Записан
b2z
Support Team
*****

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

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


Разраблю понемногу


« Ответ #12 : 24.03.2016, 11:24:37 »

ААА вон вы чего. Я не знаю же данных в этом виде для заказа да и не нужны они мне в виде "Клиент". Нужна возможность быстро перейти на добавление клиенту заказа.
По кнопе уходим в добавление заказа и там создаем.
Причём тут вид? Куда переходить? Вы что, после перехода что-то показываете клиенту? Нет. Вы по моему запутались в логике и MVC. Или это я не понимаю логики работы Вашего расширения.
Записан
platonische
Давно я тут
****

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

Сообщений: 297


Парусные экспедиции vk.com/tc670


« Ответ #13 : 24.03.2016, 17:53:39 »

Это админка.
Есть виды... Клиенты, Заказы.
В заказе есть поле КЛИЕНТ_ИД и нужно выбирать его при создании заказа (ЧЕРЕЗ админку)
Я хочу лишь чтобы можно было перейти из вида КЛИЕНТ в вид ЗАКАЗ, что бы при этом оператору не нужно было искать клиента для выбора его в заказе.
Поэтому в виде КЛИЕНТ я сделал кнопку "ДОБАВИТЬ ЗАКАЗ" постал на контроллер клиент.добавитьЗаказ там присвоил переменной в сессии значение КЛИЕНТ_ИД и сделал редирект на контроллер ЗАКАЗ.edit в моделе заказа где получаем данные для заполнения формы прочитал сессию, присвоил полю значение, удалил переменную сессии.

У меня работает, и это то что я хотел. Вопрос конечно правильно ли я это сделал?
Записан
b2z
Support Team
*****

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

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


Разраблю понемногу


« Ответ #14 : 24.03.2016, 18:13:59 »

Цитировать
и сделал редирект на контроллер ЗАКАЗ.edit в моделе заказа
Редирект используется только в одном случае - перенаправить пользователя на нужную страницу. Он не используется для вызова другого контроллера и другой модели.

Что Вам мешает в методе addorder() контроллера сделать все действия без вызова другого контроллера?
Записан
platonische
Давно я тут
****

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

Сообщений: 297


Парусные экспедиции vk.com/tc670


« Ответ #15 : 24.03.2016, 18:21:21 »

Что Вам мешает в методе addorder() контроллера сделать все действия без вызова другого контроллера?
Отсутствие полей заказа. Заказов у клиента не 1.
Т.е. поля заказа клиенту не нужны всегда... Нужны лишь тогда когда создаем ему заказ.
Конечно если вставить еще одну форму со всеми ОБЯЗАТЕЛЬНЫМИ полями заказа и заполнить их, скрыть форму, если она не нужна, например через элементарный JS+CSS может быть соглашусь...
Записан
robert
Профи
********

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

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


« Ответ #16 : 24.03.2016, 18:39:41 »

Все равно не понял: в любом случае вам нужен ID клиента, правильно? Если он уже есть в $_REQUEST, то сразу втавить в форму, в противном случае - выбрать из списка, и все это делать только в виде ЗАКАЗ.
Записан
platonische
Давно я тут
****

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

Сообщений: 297


Парусные экспедиции vk.com/tc670


« Ответ #17 : 24.03.2016, 19:25:53 »

Все равно не понял: в любом случае вам нужен ID клиента, правильно? Если он уже есть в $_REQUEST, то сразу втавить в форму, в противном случае - выбрать из списка, и все это делать только в виде ЗАКАЗ.
Да чего непонятного? Во первых я решил что надо. Во вторых ДВА ВИДА а не один. ВИД КЛИЕНТ и ВИД ЗАКАЗ.
Создаем КЛИЕНТА - хорошо
Создаем ЗАКАЗ -хорошо, но при создании надо указать клиента - выбрать.
Так вот я добавил функцию создания ЗАКАЗА из вида КЛИЕНТ с передачей ИД КЛИЕНТА а не ЗАКАЗА
Записан
b2z
Support Team
*****

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

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


Разраблю понемногу


« Ответ #18 : 24.03.2016, 21:45:05 »

ok, что у Вас происходит после task=order.edit ? На какой вид Вы попадаете?
Записан
platonische
Давно я тут
****

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

Сообщений: 297


Парусные экспедиции vk.com/tc670


« Ответ #19 : 24.03.2016, 22:30:37 »

Вид order
layout - edit
Записан
platonische
Давно я тут
****

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

Сообщений: 297


Парусные экспедиции vk.com/tc670


« Ответ #20 : 24.03.2016, 22:45:16 »

блин... неужели так запутанно все понимается?

пример. Чтобы создать заказ для нового клиента оператор должен:
1. view=customer&layout=edit - создать клиента
2. перейти в вид view=orders
3. view=order&layout=edit - создать заказ
4. выбрать клиента в форме заказа
5. Заполнить другие поля.

Я хотел сделать и сделал так:
1. view=customer&layout=edit - создать клиента
2. переход по кнопке customer.addorder в view=order&layout=edit - создается заказ с заполненным полем клиента
3. Заполнить другие поля.

Всё и для этого я использовал сессию для передачи КЛИЕНТ_ИД
Записан
b2z
Support Team
*****

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

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


Разраблю понемногу


« Ответ #21 : 24.03.2016, 22:50:30 »

Теперь ясно! Ну тогда конечно правильнее делать
Код
$this->setRedirect(
   JRoute::_('index.php?option=com_turism&view=order&layout=edit', false
);
Записан
Aleks.Denezh
Практически профи
*******

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

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



« Ответ #22 : 24.03.2016, 23:34:29 »

Всё и для этого я использовал сессию для передачи КЛИЕНТ_ИД
Только зачем использовать сессию для этого не понятно!
Записан
robert
Профи
********

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

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


« Ответ #23 : 25.03.2016, 00:10:47 »

Понятно, ваша задача очень специфическая. Сессия не нужна
Код
$id=$model->getState($this->getName().'.id',$table->$pkName);
$this->setRedirect(
   JRoute::_('index.php?option=com_turism&view=order&layout=edit&id='.$id, false
);
 
Записан
Страниц: [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