Новости Joomla

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

platonische

  • Давно я тут
  • 523
  • 2 / 1
  • Парусные экспедиции vk.com/tc670
Как передать переменную из одного вида редактирования записи в другой вид. Так же необходима кнопка перехода на другой вид.

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

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

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

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

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

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

« Последнее редактирование: 23.03.2016, 16:46:49 от platonische »
*

NewUsers

  • Живу я здесь
  • 2307
  • 215 / 0
  • +375 (25) 627-16-99 (WhatsApp, Telegram)
Re: Передача переменной между видами
« Ответ #1 : 22.03.2016, 16:16:29 »
Вопрос как здесь получить ИД?

Код: php
<?php $id = JRequest::getInt('id'); ?>
Занимаюсь создание расширений для Joomla 3.10.x и 4.2.x | Доработка и настройка сайтов. Занимаюсь создание Интернет магазинов с нуля на собственном компоненте + оптимизация загрузки страницы (после предоставляю техподдержку).
Работа с DOM деревом на PHP
*

platonische

  • Давно я тут
  • 523
  • 2 / 1
  • Парусные экспедиции vk.com/tc670
Re: Передача переменной между видами
« Ответ #2 : 22.03.2016, 22: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

  • Давно я тут
  • 523
  • 2 / 1
  • Парусные экспедиции vk.com/tc670
Re: Передача переменной между видами
« Ответ #3 : 22.03.2016, 22:43:01 »
Видимо надо как-то определить task или недогоняю...
сменил на вот такое
Код
JToolBarHelper::cancel( 'customer.addorder', 'COM_TURISM_BUTTON_ADD_ORDER' );
и получил то что хотел, почему из JToolBarHelper::custom не отрабатывает?
*

b2z

  • Глобальный модератор
  • 7290
  • 778 / 0
  • Разраблю понемногу
Re: Передача переменной между видами
« Ответ #4 : 22.03.2016, 22:43:49 »
Цитировать
Что надо для того чтобы task=customer.addorder делал операции какие-то и перенаправлял на другой task=order.edit (Контроллер order)
Что значит перенаправлял? Такое невозможно. Перенаправление - это отображение уже другой страницы.

Кстати, JRequest::getInt замените на $this->input->getInt
*

platonische

  • Давно я тут
  • 523
  • 2 / 1
  • Парусные экспедиции vk.com/tc670
Re: Передача переменной между видами
« Ответ #5 : 23.03.2016, 16:16:12 »
Что значит перенаправлял? Такое невозможно. Перенаправление - это отображение уже другой страницы.
Собственно это и надо! В форме создания клиента view=customer хочу поставить кнопку "Добавить заказ", в действия этой кнопки хочу вложить следующее:
1. Сохранение (если клиент новый)
2. Сохранение ИД клиента в сессию
3. Перенаправление на view=order (создание нового элемента - заказа)
4. Заполнение поля customer_id по значению из сессии.

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

platonische

  • Давно я тут
  • 523
  • 2 / 1
  • Парусные экспедиции vk.com/tc670
Re: Передача переменной между видами
« Ответ #6 : 23.03.2016, 16:46:26 »
Задача решена. В custom типе кнопке нужен обязательный пятый параметр, который говорит контроллеру работать со списком выбранных элементов (true) и (false) не работать со списком. Я этот параметр не указал - вот была и проблема.
Скажу что надо ставить true если кнопка выводится в виде списка и false если кнопка выводится в виде редактирования элемента
https://docs.joomla.org/Creating_a_toolbar_for_your_component
https://docs.joomla.org/JToolBarHelper/custom
*

platonische

  • Давно я тут
  • 523
  • 2 / 1
  • Парусные экспедиции vk.com/tc670
RE: Передача переменной между видами
« Ответ #7 : 23.03.2016, 16:49:35 »
Ну с сессией я поступил чуть иначе
Контроллер customer
Спойлер
[свернуть]

Далее получаем данные в моделе order и убиваем переменную из сессии чтоб не навредила.
модель order изменили loadFormData()
Спойлер
[свернуть]
*

b2z

  • Глобальный модератор
  • 7290
  • 778 / 0
  • Разраблю понемногу
RE: Передача переменной между видами
« Ответ #8 : 23.03.2016, 17:03:16 »
Код: php
$this->setRedirect(
    JRoute::_('index.php?option=com_turism&task=order.edit', false
);

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

platonische

  • Давно я тут
  • 523
  • 2 / 1
  • Парусные экспедиции vk.com/tc670
RE: Передача переменной между видами
« Ответ #9 : 23.03.2016, 17:33:58 »
Код: php
$this->setRedirect(
    JRoute::_('index.php?option=com_turism&task=order.edit', false
);

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

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

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

platonische

  • Давно я тут
  • 523
  • 2 / 1
  • Парусные экспедиции vk.com/tc670
RE: Передача переменной между видами
« Ответ #10 : 23.03.2016, 17:35:58 »
ААА вон вы чего. Я не знаю же данных в этом виде для заказа да и не нужны они мне в виде "Клиент". Нужна возможность быстро перейти на добавление клиенту заказа.
По кнопе уходим в добавление заказа и там создаем.
*

platonische

  • Давно я тут
  • 523
  • 2 / 1
  • Парусные экспедиции vk.com/tc670
*

b2z

  • Глобальный модератор
  • 7290
  • 778 / 0
  • Разраблю понемногу
RE: Передача переменной между видами
« Ответ #12 : 24.03.2016, 10:24:37 »
ААА вон вы чего. Я не знаю же данных в этом виде для заказа да и не нужны они мне в виде "Клиент". Нужна возможность быстро перейти на добавление клиенту заказа.
По кнопе уходим в добавление заказа и там создаем.
Причём тут вид? Куда переходить? Вы что, после перехода что-то показываете клиенту? Нет. Вы по моему запутались в логике и MVC. Или это я не понимаю логики работы Вашего расширения.
*

platonische

  • Давно я тут
  • 523
  • 2 / 1
  • Парусные экспедиции vk.com/tc670
RE: Передача переменной между видами
« Ответ #13 : 24.03.2016, 16:53:39 »
Это админка.
Есть виды... Клиенты, Заказы.
В заказе есть поле КЛИЕНТ_ИД и нужно выбирать его при создании заказа (ЧЕРЕЗ админку)
Я хочу лишь чтобы можно было перейти из вида КЛИЕНТ в вид ЗАКАЗ, что бы при этом оператору не нужно было искать клиента для выбора его в заказе.
Поэтому в виде КЛИЕНТ я сделал кнопку "ДОБАВИТЬ ЗАКАЗ" постал на контроллер клиент.добавитьЗаказ там присвоил переменной в сессии значение КЛИЕНТ_ИД и сделал редирект на контроллер ЗАКАЗ.edit в моделе заказа где получаем данные для заполнения формы прочитал сессию, присвоил полю значение, удалил переменную сессии.

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

b2z

  • Глобальный модератор
  • 7290
  • 778 / 0
  • Разраблю понемногу
Re: Передача переменной между видами
« Ответ #14 : 24.03.2016, 17:13:59 »
Цитировать
и сделал редирект на контроллер ЗАКАЗ.edit в моделе заказа
Редирект используется только в одном случае - перенаправить пользователя на нужную страницу. Он не используется для вызова другого контроллера и другой модели.

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

platonische

  • Давно я тут
  • 523
  • 2 / 1
  • Парусные экспедиции vk.com/tc670
Re: Передача переменной между видами
« Ответ #15 : 24.03.2016, 17:21:21 »
Что Вам мешает в методе addorder() контроллера сделать все действия без вызова другого контроллера?
Отсутствие полей заказа. Заказов у клиента не 1.
Т.е. поля заказа клиенту не нужны всегда... Нужны лишь тогда когда создаем ему заказ.
Конечно если вставить еще одну форму со всеми ОБЯЗАТЕЛЬНЫМИ полями заказа и заполнить их, скрыть форму, если она не нужна, например через элементарный JS+CSS может быть соглашусь...
*

robert

  • Живу я здесь
  • 4974
  • 457 / 20
RE: Передача переменной между видами
« Ответ #16 : 24.03.2016, 17:39:41 »
Все равно не понял: в любом случае вам нужен ID клиента, правильно? Если он уже есть в $_REQUEST, то сразу втавить в форму, в противном случае - выбрать из списка, и все это делать только в виде ЗАКАЗ.
Не будь паразитом, сделай что-нибудь самостоятельно!
*

platonische

  • Давно я тут
  • 523
  • 2 / 1
  • Парусные экспедиции vk.com/tc670
RE: Передача переменной между видами
« Ответ #17 : 24.03.2016, 18:25:53 »
Все равно не понял: в любом случае вам нужен ID клиента, правильно? Если он уже есть в $_REQUEST, то сразу втавить в форму, в противном случае - выбрать из списка, и все это делать только в виде ЗАКАЗ.
Да чего непонятного? Во первых я решил что надо. Во вторых ДВА ВИДА а не один. ВИД КЛИЕНТ и ВИД ЗАКАЗ.
Создаем КЛИЕНТА - хорошо
Создаем ЗАКАЗ -хорошо, но при создании надо указать клиента - выбрать.
Так вот я добавил функцию создания ЗАКАЗА из вида КЛИЕНТ с передачей ИД КЛИЕНТА а не ЗАКАЗА
*

b2z

  • Глобальный модератор
  • 7290
  • 778 / 0
  • Разраблю понемногу
RE: Передача переменной между видами
« Ответ #18 : 24.03.2016, 20:45:05 »
ok, что у Вас происходит после task=order.edit ? На какой вид Вы попадаете?
*

platonische

  • Давно я тут
  • 523
  • 2 / 1
  • Парусные экспедиции vk.com/tc670
RE: Передача переменной между видами
« Ответ #19 : 24.03.2016, 21:30:37 »
Вид order
layout - edit
*

platonische

  • Давно я тут
  • 523
  • 2 / 1
  • Парусные экспедиции vk.com/tc670
RE: Передача переменной между видами
« Ответ #20 : 24.03.2016, 21: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

  • Глобальный модератор
  • 7290
  • 778 / 0
  • Разраблю понемногу
RE: Передача переменной между видами
« Ответ #21 : 24.03.2016, 21:50:30 »
Теперь ясно! Ну тогда конечно правильнее делать
Код: php
$this->setRedirect(
    JRoute::_('index.php?option=com_turism&view=order&layout=edit', false
);
*

Aleks.Denezh

  • Живу я здесь
  • 3406
  • 428 / 4
RE: Передача переменной между видами
« Ответ #22 : 24.03.2016, 22:34:29 »
Всё и для этого я использовал сессию для передачи КЛИЕНТ_ИД
Только зачем использовать сессию для этого не понятно!
*

robert

  • Живу я здесь
  • 4974
  • 457 / 20
Re: Передача переменной между видами
« Ответ #23 : 24.03.2016, 23:10:47 »
Понятно, ваша задача очень специфическая. Сессия не нужна
Код: php-brief
$id=$model->getState($this->getName().'.id',$table->$pkName);
$this->setRedirect(
    JRoute::_('index.php?option=com_turism&view=order&layout=edit&id='.$id, false
);
Не будь паразитом, сделай что-нибудь самостоятельно!
Чтобы оставить сообщение,
Вам необходимо Войти или Зарегистрироваться
 

[РЕШЕНО] Дублирование при создании

Автор platonische

Ответов: 7
Просмотров: 924
Последний ответ 12.02.2021, 11:24:26
от platonische
[РЕШЕНО] onChange в админке на field modal

Автор platonische

Ответов: 1
Просмотров: 382
Последний ответ 30.01.2021, 16:40:45
от platonische
Почему id не назначается переменной?

Автор borro

Ответов: 3
Просмотров: 657
Последний ответ 29.06.2020, 12:59:51
от borro
Доступ к переменной модели из модуля

Автор platonische

Ответов: 18
Просмотров: 1606
Последний ответ 11.01.2020, 22:21:42
от robert
[РЕШЕНО] Сохранение значений полей добавленных динамически элементу

Автор platonische

Ответов: 30
Просмотров: 2069
Последний ответ 10.11.2019, 15:42:33
от platonische