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

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

Почему не всегда выполняется команда print_r($anything)?

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

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

Сообщений: 151


« : 15.06.2017, 12:31:23 »

Здавствуйте!
В компоненте конкретная запись из списка записей вызывается для редактирования. При этом print_r, вставленные  в модели в методы getForm и loadFormData показывают правильную информацию, вернее, информация показывает, что всё правильно загружается, а при сохранении изменений в записи print_r не выводит информацию ни в контроллере, ни в функции сохранения save в модели. Почему так происходит?
Форма:
Показать текстовый блок
т.е. должно выполниться задание order.save
контроллер order.php:
Показать текстовый блок
модель order.php
Показать текстовый блок
Записан
robert
Профи
********

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

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


« Ответ #1 : 15.06.2017, 12:48:36 »

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

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

Сообщений: 59


« Ответ #2 : 15.06.2017, 12:58:28 »

Проверьте в контроллере какие параметры он вообще получает на входе.
Как предположение...
Заметил что одновременно при отправке формы уходит
GET: &task=order.save&
И POST: <input type="hidden" name="task" value="order.save"
Возможно, в результате получается массив task[].
Записан
GuDeVic
Осваиваюсь на форуме
***

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

Сообщений: 151


« Ответ #3 : 15.06.2017, 13:06:51 »

После print_r() надо делать exit(), чтобы прервать работу скрипта, иначе он пойдет дальше, не выводя нужную вам инормацию на экран.
а в exit надо ту же переменную ставить? print_r($anything); exit($anything);?
Записан
robert
Профи
********

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

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


« Ответ #4 : 15.06.2017, 13:30:53 »

а в exit надо ту же переменную ставить? print_r($anything); exit($anything);?
Не нужно. А почему не пробовали перед тем, как спрашивать?
Записан
GuDeVic
Осваиваюсь на форуме
***

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

Сообщений: 151


« Ответ #5 : 15.06.2017, 13:53:06 »

После print_r() надо делать exit(), чтобы прервать работу скрипта, иначе он пойдет дальше, не выводя нужную вам инормацию на экран.
Спасибо!
Оказалось, что поле типа checkbox, если при редактировании записи убрать галочку, то оно вообще исчезает из набора.
Вот набор до редактирования, где в поле [mcd_a] => 1 стоит галочка
Показать текстовый блок
а вот этот же набор, когда в поле [mcd_a]  галочку убрали
Показать текстовый блок
Записан
GuDeVic
Осваиваюсь на форуме
***

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

Сообщений: 151


« Ответ #6 : 15.06.2017, 13:57:49 »

Не нужно. А почему не пробовали перед тем, как спрашивать?
((( Не могу объяснить, почему я так сделала. Извините.
Сначала спросила, а потом вспомнила, стала пробовать отладку.
Записан
fsv
Практически профи
*******

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

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


« Ответ #7 : 15.06.2017, 20:50:29 »

Оказалось, что поле типа checkbox, если при редактировании записи убрать галочку, то оно вообще исчезает из набора.
решение
Записан
robert
Профи
********

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

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


« Ответ #8 : 15.06.2017, 21:07:19 »

Угу, нечасто сталкиваюсь с такой проблемой, но использую 2-й вариант в таких случаях.
Записан
Septdir
Практически профи
*******

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

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


Skype: septdir


« Ответ #9 : 15.06.2017, 21:36:08 »

Так писать куда проще чем по два раза echo
Код
echo '<pre>', print_r($data), '</pre>';
 
Записан
dmitry_stas
Профи
********

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

Сообщений: 9544



« Ответ #10 : 16.06.2017, 00:26:16 »

Так писать куда проще чем по два раза echo
true вторым параметром в print_r не хватает
Записан
Septdir
Практически профи
*******

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

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


Skype: septdir


« Ответ #11 : 16.06.2017, 01:29:52 »

true вторым параметром в print_r не хватает
В данном случае не надо в строку. Вот если надо было бы в переменю или в return передать. А чисто для вывода этого достаточтно. хотя в функции лучше exit() добавить чтобы остановить на нужном месте. то бишь
Код
echo '<pre>', print_r($data), '</pre>';
exit();
 
я так обычно делаю когда с save играюсь.  еще var_dump юзаю если нужно
Код
echo '<pre>', var_dump($data), '</pre>';
exit();
 
Записан
GuDeVic
Осваиваюсь на форуме
***

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

Сообщений: 151


« Ответ #12 : 16.06.2017, 09:18:29 »

Большое спасибо! Хорошо сказано:This is a common mistake for component developers thinking Joomla takes care of this.
« Последнее редактирование: 16.06.2017, 10:01:00 от GuDeVic » Записан
GuDeVic
Осваиваюсь на форуме
***

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

Сообщений: 151


« Ответ #13 : 16.06.2017, 09:23:33 »

В данном случае не надо в строку. Вот если надо было бы в переменю или в return передать. А чисто для вывода этого достаточтно. хотя в функции лучше exit() добавить чтобы остановить на нужном месте. то бишь
Код
echo '<pre>', print_r($data), '</pre>';
exit();
 
я так обычно делаю когда с save играюсь.  еще var_dump юзаю если нужно
Код
echo '<pre>', var_dump($data), '</pre>';
exit();
 
Спасибо, теперь и я так делаю.
Записан
GuDeVic
Осваиваюсь на форуме
***

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

Сообщений: 151


« Ответ #14 : 16.06.2017, 09:58:17 »

Спасибо всем, кто помог советами.
Не совсем, вернее совсем, не по теме. Вопрос: как вернуться из формы по ссылке, имитирующей кнопку, возврат на последний активный пункт меню?
Имеется в виду, что есть меню (на стороне сайта) для разных групп пользователей. Авторам можно создавать новые записи (предварительно выбрав тип записи), можно редактировать собственную запись, выбрав её из списка или просто просматривать. Завлабы должны утвердить, исполнители взять в работу, потом выполнить и т.д.
Т.е. в некоторые моменты надо после просмотра записи вернуться не на шаг назад, а именно на последний активный пункт меню. И лучше бы в этот момент не было возможности вернуться назад по стрелочке <-  в навигаторе.
Записан
GuDeVic
Осваиваюсь на форуме
***

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

Сообщений: 151


« Ответ #15 : 16.06.2017, 10:08:03 »

Угу, нечасто сталкиваюсь с такой проблемой, но использую 2-й вариант в таких случаях.
Да уж. А я, как оказалось, вчера воспользовалась вариантом 3.  2-й гораздо надёжнее, но вчера я о нём не знала.
Записан
dmitry_stas
Профи
********

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

Сообщений: 9544



« Ответ #16 : 16.06.2017, 10:30:07 »

В данном случае не надо в строку.
ну как это не надо, если надо? а потом будете думать, откуда лишняя 1 в выводе.
Записан
Septdir
Практически профи
*******

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

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


Skype: septdir


« Ответ #17 : 16.06.2017, 11:52:32 »

ну как это не надо, если надо? а потом будете думать, откуда лишняя 1 в выводе.
Ну есть она не просит, болтается себе ниже объекта или array. А так и писать меньше да и удобнее. Когда на хоткее или макросе или ещё на чем. Ну а не объект и не массив, лучше в var_dump.
Хотя сугубо имхо ибо 1 мне лично не мешает.
Записан
dmitry_stas
Профи
********

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

Сообщений: 9544



« Ответ #18 : 16.06.2017, 12:21:09 »

не, ну ты погляди на него Azn это ошибка, а не имхо Azn так делать нельзя. болтается ниже объекта или массива - это когда объект или массив. а была бы там строка или число
Код:
$data = 5432;
echo '<pre>', print_r($data), '</pre>';
и уже было бы немного веселее Azn
Записан
Septdir
Практически профи
*******

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

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


Skype: septdir


« Ответ #19 : 16.06.2017, 12:52:06 »

не, ну ты погляди на него Azn это ошибка, а не имхо Azn так делать нельзя. болтается ниже объекта или массива - это когда объект или массив. а была бы там строка или число
Код:
$data = 5432;
echo '<pre>', print_r($data), '</pre>';
и уже было бы немного веселее Azn
А на фига ты в print_r засовываешь строку или число. что же до return парметра он используется чтобы вернуть значение а не выводить его. А здесь чистый вывод.
для строки или чиста можно и так вывести.
Код
echo '<pre>'.$data.'</pre>';
А если ты не знаешь что тебе приходит то принт вообще не канет. лучше var_dump
« Последнее редактирование: 16.06.2017, 12:55:28 от Septdir » Записан
dmitry_stas
Профи
********

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

Сообщений: 9544



« Ответ #20 : 16.06.2017, 13:11:29 »

тю Azn та какая ж разница что засовывать. отладку надо делать в принципе не через print_r и var_dump, коли о том речь. но мы то о другом Azn я о принципе говорю. а принцип как раз и заключается в том, что конструкция
Код:
echo '<pre>', print_r($data), '</pre>';
дает неявный результат, и может быть причиной ошибки. ты ж советуешь, как лучше. а может получится наоборот. вот прочтут тему 100500 человек, и некоторые обязательно наткнутся на лишнюю единицу, которая приведет их в ступор Azn

в конце концов цикл можно тоже так вывести
Код:
$a = +print_r('start');
while ($a<=10) {
echo '<br />', $a++;
}
echo '<br />', 'finish';
но только надо четко понимать, что ты делаешь Azn
Записан
Septdir
Практически профи
*******

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

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


Skype: septdir


« Ответ #21 : 16.06.2017, 13:36:14 »

ты ж советуешь, как лучше.
Я советую как проще. а проще == короче.
Но ладно признаю ты прав. и закончим на этом
Записан
dmitry_stas
Профи
********

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

Сообщений: 9544



« Ответ #22 : 16.06.2017, 13:51:35 »

 drink
в принципе если разобраться, то мое утверждение что
Цитировать
так делать нельзя
тоже не совсем верно. так делать можно. но просто для копипаста имхо не годится такое Azn потому что надо понимать, что делаешь, а копипастят обычно те, кто пока далек от понимания...
Записан
Septdir
Практически профи
*******

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

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


Skype: septdir


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

drink
в принципе если разобраться, то мое утверждение чтотоже не совсем верно. так делать можно. но просто для копипаста имхо не годится такое Azn потому что надо понимать, что делаешь, а копипастят обычно те, кто пока далек от понимания...
Ну даже в копи пасе надо понимать что ты делаешь
Записан
GuDeVic
Осваиваюсь на форуме
***

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

Сообщений: 151


« Ответ #24 : 16.06.2017, 22:03:03 »

Очень познавательно.
Ну, а мой вопрос  Ответ #14 : Сегодня в 09:58:17 » можно задать в новой теме? Здесь не подскажете про возможность возврата на последний активный пункт меню?
Записан
dmitry_stas
Профи
********

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

Сообщений: 9544



« Ответ #25 : 16.06.2017, 22:30:33 »

автоматической возможности возврата на последний активный пункт меню нет. сделать то можно, но для этого надо запоминать например URL последнего активного пункта меню в сессии, а в форме выводить кнопку для перехода на запомненный URL. запретить кнопку Back - теоретически тоже можно, но это тогда нужно все переходы делать аяксом, без изменения history браузера, но это очень глобально, переделки очень весомые скорее всего будут.
Записан
GuDeVic
Осваиваюсь на форуме
***

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

Сообщений: 151


« Ответ #26 : 16.06.2017, 22:39:11 »

автоматической возможности возврата на последний активный пункт меню нет. сделать то можно, но для этого надо запоминать например URL последнего активного пункта меню в сессии, а в форме выводить кнопку для перехода на запомненный URL. запретить кнопку Back - теоретически тоже можно, но это тогда нужно все переходы делать аяксом, без изменения history браузера, но это очень глобально, переделки очень весомые скорее всего будут.
Я понимаю, что в сессии надо записать URL последнего активного пункта меню. А как получить этот URL? Какие команды?
Записан
fsv
Практически профи
*******

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

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


« Ответ #27 : 16.06.2017, 22:51:05 »

На всех страницах формы можно попробовать пушить в хистори предыдущую страницу, чтобы при нажатии "назад", попасть на нее.
Записан
GuDeVic
Осваиваюсь на форуме
***

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

Сообщений: 151


« Ответ #28 : 16.06.2017, 23:00:19 »

автоматической возможности возврата на последний активный пункт меню нет. сделать то можно, но для этого надо запоминать например URL последнего активного пункта меню в сессии, а в форме выводить кнопку для перехода на запомненный URL. запретить кнопку Back - теоретически тоже можно, но это тогда нужно все переходы делать аяксом, без изменения history браузера, но это очень глобально, переделки очень весомые скорее всего будут.
Если из пункта А направляешься в пункт Б (из меню для создания новой записи или по ссылке из списка записей для редактирования конкретной записи) как в пункте Б сгенерировать URL, по которой там оказался?
Записан
GuDeVic
Осваиваюсь на форуме
***

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

Сообщений: 151


« Ответ #29 : 16.06.2017, 23:15:17 »

На всех страницах формы можно попробовать пушить в хистори предыдущую страницу, чтобы при нажатии "назад", попасть на нее.

Вы имеете в виду javascript:history.back();?  Ну, если запись вызвана из списка на редактирование, после успешного редактирования управление передаётся на просмотр результата редактирования, не смертельно, но можно шагами назад пройти обратный путь. А если при создании новой записи после просмотра созданной записи снова возвращаться в форму для создания новой записи? Это уже чревато, тем более, что создание новой записи связано с типом записи. Поэтому хотелось бы большей определённости при возврате, с вещами на выход.
Записан
Страниц: [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