Наступил на грабли в написании компонетра для iCMS 2.0

#1 25 июля 2014 в 23:49
Проблема вся в том что я делал все по видео-уроку: www.youtube.com/watch?v=ivnQPvQb0f0

Просмотрел и проделал дважды все тоже что и на первых 30 минутах видео. Проблема вся в том что по началу страница добавления работает нормально (она просто отображается), а вот после добавления полей и передачи их в шаблон — отображается пустая страница (исходный код также пуст).

Не пойму где я ошибся дважды, помогите решить проблему

Хочу создать текстовую онлайн трансляцию для футбольного сайта
Прикрепленный файл
live_5d79l.zip 5 Кб
#2 27 июля 2014 в 18:57
нашел примерно 5 ошибок разного типа (лишний пробел, не поставленная точка с запятой, не правильная переменная и тд), но это ситуацию не изменило, разве что на странице добавления начало выводится название страницы, и больше ничего в исходном коде не поменялось.

Помогите решить проблему. Архив обновил, Спасибо!
#3 27 июля 2014 в 19:55
включите показ ошибок, включите дебаг режим.
если показывает пустой экран, значит присутствует fatal error.

в index.php можете прописать:
ini_set('display_errors', '1');
error_reporting(E_ALL);

или в коневом .htaccess:
php_flag display_startup_errors on
php_flag display_errors on
php_value error_reporting -1
#4 27 июля 2014 в 19:58
Александр, Вот ваш код
  1. class actionLiveIndex extends cmsAction {
  2. public function run(){
  3. $template = cmsTemplate::getInstance();
  4. $lives = array();
  5. $template->render('index', array(
  6. 'lives' => $lives
  7. ));
  8. }
  9. }
Вы по ходу пропустили ту часть который работает с моделью, а по точнее вы нечего не передаете шаблону.
Должно быть что то вроде этого $lives = $this->model->getLives(); а потом в model.php создать функцию getLives который возвращвет полученные данные из БД
#5 27 июля 2014 в 20:08
У вас в шаблоне index.tpl стоит условие
  1. <?php if (!$lives){ ?>
  2.  
  3. <p>Трансляцій немає</p>
  4.  
  5. <?php } ?>
И получается если нет $lives то… Ваша переменная есть (существует и не пуста) и равна пустому массиву array(). Измените условие на
  1. <?php if ($lives == array(){
#6 27 июля 2014 в 20:35

Ваша переменная есть (существует и не пуста) и равна пустому массиву array()

Loadырь
Пустой массив == false, т.е. проверка
  1. if (!array())
вернет true

если на выходе чистый лист — надо смотреть логи или включить вывод ошибок, как уже написал IceJoker
#7 28 июля 2014 в 02:31
IceJOKER, Спасибо, вывел все ошибки, некоторые сразу исправил

Evanescence, Loadырь, r2, Я пока пытаюсь передать в шаблон поля для создания трансляции из файла form_live.php, до получения данных из БД дело пока не дошло

Вывело ошибку: Fatal error: Call to undefined method cmsTemplate::renderFrom() in /templates/default/controllers/live/form_live.tpl.php on line 14

На 14й строке у меня все как в видео уроке или в исходнике "фото битвы".

  1. <?php
  2. if($do == 'add'){ $page_title = LANG_LIVE_ADD; }
  3. if($do == 'edit'){ $page_title = LANG_LIVE_EDIT; }
  4.  
  5. $this->setPageTitle($page_title);
  6.  
  7. $this->addBreadcrumb(LANG_LIVE_CONTROLLER, $this->href_to(''));
  8. $this->addBreadcrumb($page_title);
  9. ?>
  10.  
  11. <h1><?php echo $page_title; ?></h1>
  12.  
  13. <?php
  14. $this->renderFrom($form, $live, array(
  15. 'action' => '',
  16. 'method' => 'post',
  17. 'toolbar' => false
  18. ), $errors);
Сейчас еще раз попробую найти причину
#8 28 июля 2014 в 04:27
Александр, в 14 строке замените
  1. $this->renderFrom
на
  1. $this->renderForm
#9 28 июля 2014 в 11:07
Loadырь, Спасибо!, дело чуть продвинулось вперед, появились ошибки следующего содержания:

Notice: Trying to get property of non-object in /templates/default/assets/ui/form.tpl.php on line 36
>
Notice: Trying to get property of non-object in /templates/default/assets/ui/form.tpl.php on line 38

Fatal error: Call to a member function getStructure() on a non-object in /templates/default/assets/ui/form.tpl.php on line 47

Если скажем временно удалить проблемный участок начиная со строки 47 — то появляется шаблон сайта и на месте формы написана следующая ошибка

Notice: Trying to get property of non-object in /templates/default/assets/ui/form.tpl.php on line 36
>
Notice: Trying to get property of non-object in /templates/default/assets/ui/form.tpl.php on line 38

Notice: Trying to get property of non-object in /templates/default/assets/ui/form.tpl.php on line 51 (в оригинальном файле это строка №143)

Вот содержимое моих файлов:
form_live.php
  1. <?php
  2. class formLiveBroadcasting extends cmsForm {
  3. public function init(){
  4. return array(
  5. 'type' => 'fieldset',
  6. 'childs' => array(
  7. new fieldString('title', array(
  8. 'title' => LANG_LIVE_TITLE,
  9. 'hint' => LANG_LIVE_TITLE_HINT
  10. ))
  11. )
  12. )
  13. );
  14. }
  15. }
add.php
  1. <?php
  2. class actionLiveAdd extends cmsAction {
  3. public function run(){
  4. $errors = false;
  5. $form = $this->getForm('broadcasting');
  6. $broadcasting = array();
  7. $template = cmsTemplate::getInstance();
  8. $template->render('form_live', array(
  9. 'do' => 'add',
  10. 'form' => $form,
  11. 'errors' => $errors,
  12. 'broadcasting' => $broadcasting
  13. ));
  14. }
  15. }
form_live.tpl.php

  1. <?php
  2. if($do == 'add'){ $page_title = LANG_LIVE_ADD; }
  3. if ($do == 'edit'){ $page_title = LANG_LIVE_EDIT; }
  4.  
  5. $this->setPageTitle($page_title);
  6.  
  7. $this->addBreadcrumb(LANG_LIVE_CONTROLLER, $this->href_to(''));
  8. $this->addBreadcrumb($page_title);
  9. ?>
  10.  
  11. <h1><?php echo $page_title; ?></h1>
  12.  
  13. <?php
  14. $this->renderForm($form, $broadcasting, array(
  15. 'action' => '',
  16. 'method' => 'post',
  17. 'toolbar' => false
  18. ), $errors);
Вы не можете отвечать в этой теме.
Войдите или зарегистрируйтесь, чтобы писать на форуме.
Используя этот сайт, вы соглашаетесь с тем, что мы используем файлы cookie.