Подключения класса в плагине.

 
Посетитель
small user social cms
МедальАвторитет форума
Сообщений: 1545
Здравствуйте. Хочу DOM библиотеку подключить к плагину. Пытаюсь так:
Код PHP:
  1. class p_test extends cmsPlugin {
  2.  
  3. public $html;
  4. public function __construct(){
  5.  
  6. require_once('/simple_html_dom.php');
  7. $html = new simple_html_dom($text);
  8. $this->html = $html;
  9. ....................................................................
но при обращении к методу
Код PHP:
  1. private function Link($text){
  2. .....
  3. $link = $this->html->find('a');
  4. .....
  5. }
Код PHP:
  1. Fatal error: Call to a member function find() on a non-object in...
Подскажите ошибку.
Редактировалось: 1 раз (Последний: 20 октября 2015 в 10:46)
Посетитель
no avatar
Сообщений: 62
$this->html->find
Реклама
cms
Посетитель
small user social cms
МедальАвторитет форума
Сообщений: 1545
Сергей Сергеевич:
$this->html->find
?
Посетитель
small user social cms
МедальАвторитет форумаКубок зрительских симпатий
Сообщений: 1979
Чет, дорогой друг, вы перемудрили с подключением класса. Если вы пишете
Код PHP:
  1. $html = new simple_html_dom($text);
то тем самым создали экземпляр $html класса.
Доступ к методу find() будет тогда
Код PHP:
  1. $a = $html-> find('a') ;
Редактировалось: 2 раз (Последний: 20 октября 2015 в 12:22)
NOP
Посетитель
small user social cms
МедальАвторитет форумаКубок зрительских симпатий
Сообщений: 3512
Странник:
Чет, дорогой друг, вы перемудрили
Он из разных методов работает.
По мне так phpQuery работает шустрее и приближено к js. Вызывать
Код PHP:
  1. $html = new simple_html_dom($text);
лучше в том же методе, где и его обработка
Код PHP:
  1. $a = $html->find('a');
Посетитель
small user social cms
МедальАвторитет форума
Сообщений: 1545
Странник:
Чет, дорогой друг, вы перемудрили
Я и сам так думаю, но подумал, что может $html только в конструкторе видна будет, ну и ..., а изначально так и подключал как пишет Loadырь.
В конструкторе
Код PHP:
  1. require_once('/simple_html_dom.php')
, в методе
Код PHP:
  1. $html = new simple_html_dom($text);$link = $html->find('a');
, но что то не пашет. Грешу на $text.
Посетитель
small user social cms
МедальАвторитет форумаКубок зрительских симпатий
Сообщений: 1979
ну так посмотрите в коде класса, что должно быть в $text - переменная, массив, объект?
Я надеюсь, путь к классу правильно прописан?
Редактировалось: 1 раз (Последний: 20 октября 2015 в 13:22)
NOP
Посетитель
small user social cms
МедальАвторитет форума
Сообщений: 1545
Колдую на примере плагина p_hidetext. Там в $text, как я понимаю передаётся $item['content_html']
Код PHP:
  1. private function parseHide($text, $hidden = false){..}
  2. private function eventGetPost($item) {
  3. if (!is_array($item)){ return $item; }
  4. $item['content_html'] = $this->parseHide($item['content_html']);
  5. return $item;
  6. }
А сама $item['content_html'] из
Код PHP:
  1. public function execute($event='', $item=array()){
  2.  
  3. switch ($event){
  4. case 'GET_POST': $item = $this->eventGetPost($item); break;
  5. ................
  6. }
Правильно?
InstantCMS Team
small user social cms
МедальАвторитет форумаКубок зрительских симпатий
Сообщений: 4338
Lora:
Подскажите ошибку.
У вас весь пример - ошибка, поймите правильно.

Lora, вам нужно научиться отлаживать. Запомните простое правило:
в любых непонятных ситуациях делайте
Код PHP:
  1. print_r($var); die;
в icms можно воспользоваться более простой формой записи dump($var);

Т.е. в вашем случае нужно взять и посмотреть, что там
Код PHP:
  1. dump($this->html);
Это первое. Второе, вам же php пишет что за ошибка, зачем дальше пальцем в небо тыкать.
И третье, откуда у вас в конструкторе переменная $text? Вы ее передаете в конструктор? Нет. А зачем вы необъявленную переменную используете? На этапе разработки всегда нужно включать показ ошибок и предупреждений php, если бы это было включено у вас, вы бы увидели нотис и возможно сразу поняли в чем ошибка.
Вам нужно в конструкторе просто подключить файл класса, без создания объекта. А объект создавать уже там, где у вас будет доступен текст, который вы хотите распарсить, т.е. в методе execute или в ином, который указан в execute для обрабатываемого эвента.

Кроме этого, зачем
Код PHP:
  1. require_once('/simple_html_dom.php');
есть же метод cmsCore::includeFile()

И напоследок, зачем использовать какой-то сторонний класс, если есть нативный DOMDocument.
Редактировалось: 3 раз (Последний: 20 октября 2015 в 13:51)
Видео каталог для InstantCMS | Аудио каталог для InstantCMS | Мы Вконтакте | Предложение для спонсоров
Посетитель
small user social cms
МедальАвторитет форума
Сообщений: 1545
Fuze, Благодарю за столь обширное пояснение.Возьму во внимание. Жаль нет ответа к посту №8. smile
InstantCMS Team
small user social cms
МедальАвторитет форумаКубок зрительских симпатий
Сообщений: 4338
Lora:
Жаль нет ответа к посту №8
Там был вопрос? smile

Массив $item пришел в execute, там он передается в eventGetPost, где один элемент массива content_html уже передается в первый параметр parseHide.
Для самообучения область видимости переменной.
Видео каталог для InstantCMS | Аудио каталог для InstantCMS | Мы Вконтакте | Предложение для спонсоров
Посетитель
small user social cms
МедальАвторитет форума
Сообщений: 1545
Сори.Конечно,разве это вопрс? rofl
В начало страницы
Предыдущая темаСледующая тема Перейти на форум:
Быстрый ответ
Чтобы писать на форуме, зарегистрируйтесь или авторизуйтесь.