Ошибка Fatal error: Call to a member function checkStatus() on a non-object in

#1 29 ноября 2012 в 20:36
Добрый вечер.

Вопрос к программистам.
Делаю компонент отправки сообщение от сервиса mainsms.ru
В принципе уже много чего получилось, смски отправляются и приходят, статистика ведется.

Не могу заставить работать проверку статуса отправленного сообщения. Сам статус после обновления страницы напротив каждого сообщения выводиться, но если нажать на кнопку "Запросить", то выводиться след. ошибка

Fatal error: Call to a member function checkStatus() on a non-object in .../frontend.php on line 101


101 строка
  1. $result = $api->checkStatus($sms['response']['messages_id']);
Сама функция
  1. public function checkStatus($messagesId)
  2. {
  3. return $this->messageStatus($messagesId);
  4. }
В чем может быть проблема?

Посмотреть можно тут i110.arkweb.ru/smssend

P.S. — отправку сообщение на время отключил)
#2 29 ноября 2012 в 20:41
вы объявляете класс api в этом контексте?
$api = new SmsClass(); или что то подобное в контексте условия у вас есть?
#3 29 ноября 2012 в 20:45
Да, конечно

  1. $api = new cms_model_smssend('instest', 'здесь ключ апи', false, true);
#4 29 ноября 2012 в 20:47
kir, спасибо вам большое), сам не заметил, что еще до проверки статуса закрыл функцию
#5 29 ноября 2012 в 20:51
да не за что) бывает.)
#6 29 ноября 2012 в 23:20
Еще один вопрос, наверное покажется глупым))

Как мне в шаблоне вывести данные из массива?

Массив имеет вид

  1.  
  2. [0] => Array ( [response] => Array ( [status] => error [error] => 8 [message] => invalid sender ) [text] => adfhsndv [sender] => 555 [time] => 1354212219 )
  3. [1] => Array ( [response] => Array ( [status] => success [recipients] => Array ( [0] => 79056936700 ) [messages_id] => Array ( [0] => 677656 ) [count] => 1 [parts] => 1 [price] => 0,15 [balance] => 6,5 [test] => 0 ) [text] => ardsf [sender] => 55555 [time] => 1354212227 )
  4. [2] => Array ( [response] => Array ( [status] => success [recipients] => Array ( [0] => 79056936700 ) [messages_id] => Array ( [0] => 677658 ) [count] => 1 [parts] => 1 [price] => 0,15 [balance] => 6,35 [test] => 0 ) [text] => ardsf [sender] => 55555 [time] => 1354212471 )
  5. )
  6.  
Пишу в шаблоне
  1. {foreach key=messages_id item=text from=$sms}
  2. {sms.sender}
  3. {/foreach}
  4.  
Но отправитель не выводится

Мне кажется я что то с key и item в цикле намудрил…
#7 30 ноября 2012 в 10:51
а если так
  1.  
  2.  
  3. {foreach item=text from=$sms}
  4. {$text.sender}
  5. {/foreach}
  6.  
  7.  
или так

  1.  
  2.  
  3. {section name=item loop=$sms}
  4. {$sms[item].sender}
  5. {/section}
  6.  
  7.  
#8 30 ноября 2012 в 11:11
Да я уже вывел вот так
  1.  
  2. {foreach item=message from=$sms}
  3. {$message.sender}
  4. {/foreach}
  5.  
Сейчас уже другая проблема.
Я так понял, что в этом массиве имеются вложенные массивы. Из основного я вывел, а именно sender, time и text
А вот остальное вывести никак не могу. Мне нужно еще вывести message_id, price и status. И не могу еще вывести получателя. Код на php такой
  1. <?php echo implode(",",$sms['response']['recipients']);?>
Но как мне в смарти такой сделать?
#9 30 ноября 2012 в 11:58
И с большинством других проблем тоже разобрался) Получилось вывести вложенным циклом
#10 30 ноября 2012 в 12:44
Блин, все равно какая то муть выводиться. Вроде все что нужно, но появились еще и лишние столбцы.
Код такой
  1.  
  2. {foreach name=outer item=message from=$sms}
  3. <tr>
  4. <td>{$i++}</td>
  5. <td>{$message.sender}</td>
  6. <td>{php} echo implode(",",$sms['response']['recipients']);{/php}</td>
  7. <td>{$message.text}</td>
  8. <td>{$message.time}</td>
  9.  
  10. {foreach key=key item=status from=$message}
  11. <td>{$status.price}</td>
  12. <td>{$status.status}</td>
  13. {/foreach}
  14. <td><a href="?status={$o++}">Запросить</a></td>
  15. </tr>
  16. {/foreach}
  17.  
Выводи на сайте такую табличку


То что выделенно красным это лишнее, и я не пойму откуда это берется
#11 30 ноября 2012 в 13:19
тоже разобрался)
#12 30 ноября 2012 в 15:12
к успеху идешь)

а вообще зная четко структуру ответа и зная что она не меняется не нужно вложенные циклы) через ключ обращаться просто дальше можно)
#13 30 ноября 2012 в 15:26
kir, я пока только учусь)) То что я сделал за эти два дня, для кого то мелочь и 15 минут работы, а для меня целый прорыв)
#14 2 декабря 2012 в 13:03
Вот еще одна проблемка возникла, и никак не могу ее победить.
Не могу вывести все отправленные сообщения из базы. Записать в базу их получилось, запись работает. А вот вывод нет.

в model.php
  1.  
  2. public function getSms() {
  3.  
  4. $inCore = cmsCore::getInstance();
  5.  
  6. $sql = "SELECT *
  7. FROM fin_smssend";
  8.  
  9. $result = $this->inDB->query($sql);
  10.  
  11. if ($this->inDB->error()) { return false; }
  12.  
  13. if (!$this->inDB->num_rows($result)) { return false; }
  14.  
  15. $sms_mess = array();
  16.  
  17. while ($sms_mess = $this->inDB->fetch_assoc($result)){
  18.  
  19. $sms_mess['pubdate'] = $inCore->dateFormat($sms_mess['pubdate']);
  20. $sms_mess[] = $sms_mess;
  21.  
  22. }
  23.  
  24. return $sms_mess;
  25.  
  26. }
  27.  
и в frontend.php

  1. $sms_mess = $api->getSms();
  2.  
  3. $is_admin = $inUser->is_admin;
  4.  
  5. $inPage->setTitle("История отправленных сообщений");
  6.  
  7. $smarty = $inCore->initSmarty('components', 'com_smssend_history.tpl');
  8.  
  9. $smarty->assign('sms_mess', $sms_mess);
  10. $smarty->assign('is_admin', $is_admin);
  11.  
  12. $smarty->display('com_smssend_history.tpl');
  13.  
  14. return;
Соответственно сообщений никаких не выводится.
print_r ($sms_mess); — ничего не выводит
var_dump ($sms_mess); — выводит bool(false)

Вот никак и не могу понять в чем проблема
#15 2 декабря 2012 в 17:11


Вот еще одна проблемка возникла, и никак не могу ее победить.
Не могу вывести все отправленные сообщения из базы. Записать в базу их получилось, запись работает. А вот вывод нет.

в model.php

  1.  
  2. public function getSms() {
  3.  
  4. $inCore = cmsCore::getInstance();
  5.  
  6. $sql = "SELECT *
  7. FROM fin_smssend";
  8.  
  9. $result = $this->inDB->query($sql);
  10.  
  11. if ($this->inDB->error()) { return false; }
  12.  
  13. if (!$this->inDB->num_rows($result)) { return false; }
  14.  
  15. $sms_mess = array();
  16.  
  17. while ($sms_mess = $this->inDB->fetch_assoc($result)){
  18.  
  19. $sms_mess['pubdate'] = $inCore->dateFormat($sms_mess['pubdate']);
  20. $sms_mess[] = $sms_mess;
  21.  
  22. }
  23.  
  24. return $sms_mess;
  25.  
  26. }
  27.  
и в frontend.php

  1. $sms_mess = $api->getSms();
  2.  
  3. $is_admin = $inUser->is_admin;
  4.  
  5. $inPage->setTitle("История отправленных сообщений");
  6.  
  7. $smarty = $inCore->initSmarty('components', 'com_smssend_history.tpl');
  8.  
  9. $smarty->assign('sms_mess', $sms_mess);
  10. $smarty->assign('is_admin', $is_admin);
  11.  
  12. $smarty->display('com_smssend_history.tpl');
  13.  
  14. return;
Соответственно сообщений никаких не выводится.
print_r ($sms_mess); — ничего не выводит
var_dump ($sms_mess); — выводит bool(false)

Вот никак и не могу понять в чем проблема

Rossoman


если честно я бы сделал так:
в model.php
  1.  
  2. public function getSms() {
  3.  
  4. $inCore = cmsCore::getInstance();
  5.  
  6. $sql = "SELECT *
  7. FROM `fin_smssend`";
  8.  
  9. $result = $this->inDB->query($sql);
  10.  
  11. //if ($this->inDB->error()) { return false; } //опционально
  12.  
  13. //if (!$this->inDB->num_rows($result)) { return false; } // лишния часть, т.к в контроллере можно проверить не пустой ли результат функции
  14.  
  15. $sms_mess = array();
  16. $i = 0;
  17. while ($item = $this->inDB->fetch_assoc($result)){
  18.  
  19. $sms_mess[$i] = $item;
  20. $sms_mess[$i]['pubdate'] = $inCore->dateFormat($item['pubdate']);
  21. $i++;
  22. }
  23.  
  24. return $sms_mess;
  25.  
  26. }
  27.  
Вы не можете отвечать в этой теме.
Войдите или зарегистрируйтесь, чтобы писать на форуме.
Используя этот сайт, вы соглашаетесь с тем, что мы используем файлы cookie.