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

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

Передача поля формы во view в другую модель по кнопке контроллера

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

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

Сообщений: 33


« : 16.02.2016, 20:30:37 »

Не ругайте строго, в php и веб программировании слаб
имею view в котором по тулбару делаю кнопку задача которой связатся по Google API с календарем Google и загрузить события для отмеченного мышкой во view cid

cid в $REQUEST вижу, есть, то есть есть возможность поднять из базы этот рекорд, чтобы взять данные для доступа к календарю

(CALENDAR_ID в данном случае). 
Но ведь я в этом view (а это FORM) имею, или могу иметь этот CALENDAR_ID от предыдущего чтения GetListQuery сделав его невидимым поскольку он длинный  и неинформативный.
Для меня абсолютно неясен вопрос возможно ли это поле ( в строке выделенной мышкой) передать как то по кнопке, так чтобы оно появилось в переменной $REQUEST в модели скажем другого контроллера, или я слишком многого хочу от Joomla ?
Вся затея - чтобы повторно не читать базу данных по cid записи, или не маятся дурью и просто сделать select по cid?


Записан
passer
Живу я здесь
******

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

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



« Ответ #1 : 16.02.2016, 21:11:45 »

Запишите в сессию или используйте состояние модели, что в общем-то одно и то же.
Записан
tm2010
Осваиваюсь на форуме
***

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

Сообщений: 33


« Ответ #2 : 16.02.2016, 22:23:08 »

Запишите в сессию или используйте состояние модели, что в общем-то одно и то же.
Подскажите где копать? Судя по всему JRequest::Setvar, но как это сделать по кнопке, если на кнопке на js стоит сразу submit контроллер и task,  а в контроллере этих данных уже наверное нет.
Записан
robert
Профи
********

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

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


« Ответ #3 : 16.02.2016, 22:34:24 »

JModel::setState(), JSession::set(). Ну или $_SESSION, если она вам больше нравится.
Записан
dmitry_stas
Профи
********

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

Сообщений: 7732



« Ответ #4 : 16.02.2016, 22:47:45 »

тут насколько я понял вопрос в другом.
ТС, вам надо в форме помимо input name="cid[]" сделать еще один input hidden name="calendar_id[]", в котором как раз передавать нужный CALENDAR_ID. и тогда зная какой cid (какой элемент в массиве), вы сможете получить такой же ключ, но массива calendar_id.
возможно, сумбурно, но надеюсь поняли. в общем надо в форме передавать calendar_id тоже.
Записан
tm2010
Осваиваюсь на форуме
***

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

Сообщений: 33


« Ответ #5 : 17.02.2016, 11:38:45 »

Да, именно это,  единственное я не нашел или плохо искал как cid передается по кнопке, с тем чтобы сделать аналогично.
Поищу
Записан
dmitry_stas
Профи
********

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

Сообщений: 7732



« Ответ #6 : 17.02.2016, 11:41:56 »

а что там искать? чекбокс имеет name=cid[]. передается массив cid, поскольку это чекбокс, то передаются только отмеченные. никакой абсолютно магии, обыкновенная форма. в чем сложность?
Записан
robert
Профи
********

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

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


« Ответ #7 : 17.02.2016, 12:37:57 »

По-моему, ТС озадачил принцип работы кнопок на toolbar: эти кнопки одновременно передают параметр task и отправляют форму, как будто там были <input name="task" value="значение_кнопки"/><input type="submit"/>.
Записан
dmitry_stas
Профи
********

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

Сообщений: 7732



« Ответ #8 : 17.02.2016, 12:58:52 »

как будто там были <input name="task" value="значение_кнопки"/><input type="submit"/>.
а ведь по сути так и есть Azn Joomla.submitbutton так ведь и делает, пишет в task значение, и отправляет форму.

ТС, так в чем именно проблема?
Записан
tm2010
Осваиваюсь на форуме
***

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

Сообщений: 33


« Ответ #9 : 17.02.2016, 13:02:46 »

в отсутствии опыта работы с php, формами и тд
Как вы поражаетесь, как этого можно не знать, так я поражен, как вы это делаете ), и откуда вам это все известно

я поставил в view <input type="hidden" name = "calendar_id[]" value='<?php echo $row->Google_id; ?>'>
и о чудо, массив передался
Наверное последний вопрос в этой теме, можно ли передавать только те элементы массива которые соответствуют выбраным чекбоксам, или это грошовая экономия ?

>
>По-моему, ТС озадачил принцип работы кнопок на toolbar: эти кнопки одновременно передают параметр task и отправляют форму, как будто там были <input name="task" value="значение_кнопки"/><input type="submit"/>.

Да это тоже чудо чудное, полагал что только одна или какие-то избранные кнопки могут делать POST с передачей введенных данных
Базовых знаний маловато, но усваиваются они только когда пробуешь это все сделать ручками.

Записан
b2z
Support Team
*****

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

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


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


« Ответ #10 : 17.02.2016, 13:09:54 »

Да это тоже чудо чудное, полагал что только одна или какие-то избранные кнопки могут делать POST с передачей введенных данных
Базовых знаний маловато, но усваиваются они только когда пробуешь это все сделать ручками.
Ну все когда с этого начинали. Нужно просто сделать мини расследвование  Smiley

Например, вот как выглядит HTML стандартной кнопки "Опубликовать":
Код
<button class="btn btn-small" onclick="if (document.adminForm.boxchecked.value==0){alert('Пожалуйста, выберите объект из списка');}else{ Joomla.submitbutton('articles.publish')}">
<span class="icon-publish"></span>
Опубликовать
</button>

При клике вызывается Joomla.submitbutton('articles.publish') - контроллер articles и задача (task) publish.

Смотрим /media/system/js/core-uncompressed.js и видим, что Joomla.submitbutton вызывает Joomla.submitform( pressbutton ), которая записывает <input name="task" value="значение_кнопки"/> и отправляет форму.
Вот и вся магия  Wink
Записан
dmitry_stas
Профи
********

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

Сообщений: 7732



« Ответ #11 : 17.02.2016, 13:19:40 »

кстати если вам cid нужен только для того, чтобы получить calendar_id, то зачем вам вообще cid? сделайте чекбоксом именно calendar_id, и передавайте только его. тогда будут передаваться только отмеченные.
Записан
tm2010
Осваиваюсь на форуме
***

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

Сообщений: 33


« Ответ #12 : 17.02.2016, 13:38:13 »

кстати если вам cid нужен только для того, чтобы получить calendar_id, то зачем вам вообще cid? сделайте чекбоксом именно calendar_id, и передавайте только его. тогда будут передаваться только отмеченные.
Обалдеть, не знал, но к сожалению по чекбоксу работает и edit и delete, хотя наверное можно их заставить работать по calendar_id ?
Или если совсем хорошо делать, можно ли к cid прикрепить значения календаря ?
Записан
b2z
Support Team
*****

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

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


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


« Ответ #13 : 17.02.2016, 13:45:23 »

но к сожалению по чекбоксу работает и edit и delete, хотя наверное можно их заставить работать по calendar_id ?
В каком смысле?
Записан
tm2010
Осваиваюсь на форуме
***

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

Сообщений: 33


« Ответ #14 : 17.02.2016, 14:21:51 »

В каком смысле?
Был неправ, видимо cid слишком важная переменная, которая применяется во многих джумловских методах по которые работают умолчанию, когда мы методы не переопределяем, и ее чекбокс должен называться cid
но можно ли cid сделать скажем двумерным, с тем чтобы дополнительно присваивать к его элементам значения calendar_id  ?
Записан
b2z
Support Team
*****

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

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


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


« Ответ #15 : 17.02.2016, 14:25:54 »

но можно ли cid сделать скажем двумерным, с тем чтобы дополнительно присваивать к его элементам значения calendar_id  ?
Нельзя. Если хотите использовать calendar_id, то придётся переопределять методы и отлавливать массив. А в чём проблема выводить ваши calendar_id в cid? Всё никак уловить не можем - вы используете и то и то на странице?
Записан
tm2010
Осваиваюсь на форуме
***

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

Сообщений: 33


« Ответ #16 : 17.02.2016, 14:45:19 »

Нельзя. Если хотите использовать calendar_id, то придётся переопределять методы и отлавливать массив. А в чём проблема выводить ваши calendar_id в cid? Всё никак уловить не можем - вы используете и то и то на странице?
Дмитрий,
1)если честно я не вижу у себя в форме cid , в тол не возьму, где она объявляется, и какое отношение к checkbox имеет
она присутствует в линке, но это уже последствия а не причина ее появления
2) calendar_id я по вашему общему совету объявил, и все нормально, вопрос такой - если передается только checked cid , то можно ли к нему прилепить значения calendar_id как то, там же в форме, и если можно то как, если я в самой форме этот cid не вижу даже

вот форма, вернее лэйаут
Показать текстовый блок
Записан
tm2010
Осваиваюсь на форуме
***

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

Сообщений: 33


« Ответ #17 : 17.02.2016, 14:52:13 »

видимо эта строка разворачивает и объявляет этот cid как массив и значения calendar_id туда не прилепишь никак.
<?php echo JHtml::_('grid.id', $i, $row->id); ?>
Записан
dmitry_stas
Профи
********

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

Сообщений: 7732



« Ответ #18 : 17.02.2016, 15:39:57 »

в смысле не прилепишь? Azn вы бы хоть попробовали вместо $row->id вставить $row->Google_id. и будет у вас в cid сразу ваш CALENDAR_ID, и будут передаваться только чекнутые.
Записан
b2z
Support Team
*****

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

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


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


« Ответ #19 : 17.02.2016, 15:48:53 »

в смысле не прилепишь? Azn вы бы хоть попробовали вместо $row->id вставить $row->Google_id. и будет у вас в cid сразу ваш CALENDAR_ID, и будут передаваться только чекнутые.
Решение как бы очевидное Wink

Если нужно решение вот этого
Цитировать
передается только checked cid, то можно ли к нему прилепить значения calendar_id
то применяем JS.

Сначала добавляем ID к инпуту calendar_id:
Код
<input id="cal<?php echo $row->id; ?>" type="hidden" name="calendar_id[]" value="<?php echo $row->Google_id; ?>">

ну и потом JSом отмечаем нужные чекбоксы при клике на cid[]:

Код
$("input[name = 'cid[]']").on( "click", function() {
 $('#cal'+this.value).attr('checked', 'checked');
});

Правда тогда ещё нужно отлавливать, если с cid[] убрали кексик, то убирать и в calendar_id[]  Smiley
« Последнее редактирование: 17.02.2016, 15:54:07 от b2z » Записан
dmitry_stas
Профи
********

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

Сообщений: 7732



« Ответ #20 : 17.02.2016, 15:54:02 »

та я так понимаю нужно вообще только $row->Google_id
Записан
tm2010
Осваиваюсь на форуме
***

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

Сообщений: 33


« Ответ #21 : 17.02.2016, 16:51:30 »

Решение как бы очевидное Wink

Если нужно решение вот этогото применяем JS.

Сначала добавляем ID к инпуту calendar_id:
Код
<input id="cal<?php echo $row->id; ?>" type="hidden" name="calendar_id[]" value="<?php echo $row->Google_id; ?>">

ну и потом JSом отмечаем нужные чекбоксы при клике на cid[]:

Код
$("input[name = 'cid[]']").on( "click", function() {
 $('#cal'+this.value).attr('checked', 'checked');
});

Правда тогда ещё нужно отлавливать, если с cid[] убрали кексик, то убирать и в calendar_id[]  Smiley
Хотел протестировать, но еще раз распишусь в  безграмотности, с JS вообще слаб
поставил Ваш  <input id="cal<?php echo $row->id; ?>" type="hidden" name="calendar_id[]" value="<?php echo $row->Google_id; ?>

добавил в этот же Layout
<?php
JHtml::script(JUri::base(). 'components/com_rentflat/assets/test.js', true);
?>
в HTML скрипт есть
в test.js ваш код на JS
Не умею добавлять обработчики на js


в консоли отладчика TypeError: $(...) is null

Записан
dmitry_stas
Профи
********

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

Сообщений: 7732



« Ответ #22 : 17.02.2016, 16:54:56 »

$ на jQuery замените
Записан
b2z
Support Team
*****

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

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


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


« Ответ #23 : 17.02.2016, 17:14:58 »

$ на jQuery замените
Да.

Ну и зачем в отдельный JS файл? Прямо в макете:
Код
<script>
jQuery("input[name = 'cid[]']").on( "click", function() {
 jQuery('#cal'+this.value).attr('checked', 'checked');
});
</script>

Или так:
Код
<script>
(function($) {
 $("input[name = 'cid[]']").on( "click", function() {
 $('#cal'+this.value).attr('checked', 'checked');
 });
})(jQuery);
</script>
« Последнее редактирование: 17.02.2016, 17:20:30 от b2z » Записан
tm2010
Осваиваюсь на форуме
***

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

Сообщений: 33


« Ответ #24 : 17.02.2016, 17:31:45 »

при рефреше после загрузки index.php
Пустая строка не может быть аргументом метода getElementById(). jquery.min.js:2:24487
при клике на checkbox - несколько (Cool таких же ошибок
Пустая строка не может быть аргументом метода getElementById(). jquery.min.js:2:24487
если ставлю точку останова на обработчике, не тормозит
при перезагрузке тоже


Пробовал и в тело layout ставить и $document->addScriptDeclaration во view , были эти ошибки
Записан
b2z
Support Team
*****

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

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


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


« Ответ #25 : 17.02.2016, 17:45:49 »

Ну, тут уж я не знаю... Вот мой тестовый код https://jsfiddle.net/bzz0/oxvm3cj5/1/ - работает.
Записан
tm2010
Осваиваюсь на форуме
***

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

Сообщений: 33


« Ответ #26 : 17.02.2016, 17:59:59 »

Ха, я тупо списал Ваш код input , там нет checkbox  и я даже смысла кода не понимал
теперь понял смысл, включать невидимый checkbox календаря
Спасибо, поборю ошибку скрипта и проверю
Записан
dmitry_stas
Профи
********

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

Сообщений: 7732



« Ответ #27 : 17.02.2016, 20:54:08 »

Ха, я тупо списал Ваш код input , там нет checkbox  и я даже смысла кода не понимал
вот я иногда задумываюсь о таком... если написать откровенно дырявый код и дать вставить его на сайт... Azn то кто будет виноват? Azn
Записан
tm2010
Осваиваюсь на форуме
***

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

Сообщений: 33


« Ответ #28 : 18.02.2016, 18:27:06 »

Удалось  просто копировать содержимое главного cid, в cal
$("input[name = 'cid[]']").on("click", function() {
      $('#cal' + this.value).attr('checked', $("input[name = 'cid[]']").prop("checked"));
});
Спасибо, но беда скрипт не работает везде в шаблоне
ставлю над <form> не работает и дебагер его не видит
ставлю в конце </form> - тарахтит и отлаживается
на всех броузерах

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

Ошибка Пустая строка не может быть аргументом метода getElementById(). jquery.min.js:2:24487
не зависит от моего кода, по всей Joomla куда бы я не ткнул в экран, я ее имею
Поставил новую Joomla другой версии в голую директорию, ошибка сохраняется
Только в Firefox , и только по ctrl-shift-I, FireBug ничего не кажет
ошибку имею такуюже как на сайте http://demo.t3-framework.org/joomla30/index.php/en/ если открыть по ctrl-shift-I
Побороть я ее хочу потому что думаю что в этом причина несрабатывания скрипта когда он находится условно не в нужном месте
строка кода где вырабатывается ошибка - 2827 -    elem = document.getElementById( match[2] ); при замененом jquery.min на полный.
Мне интересно у меня одного такая ошибка на этом сайте, локальны ли мои проблемы, глянте пожалуйста
такое ощущение что DOM документа как то разрушен, и jquery неверно все понимает.
кеш куки чистил
Записан
Страниц: [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