Система коментирования

Интеграция своего компонента с системой коментирования

#1 8 сентября 2014 в 19:35
Добрый вечер сообщество.

Возникла необходимость интеграции системы комментирования в сторонний компонент. Чтение похожей темы не помогло, чтение документации тоже. Может кто то объяснить на пальцах как это сделать, учитывая то что я далек от программирования. Пытался сделать по аналогии с доской объявлений.

В файле шаблона.tpl написал следующее:
  1. {if $cfg.comments}
  2. {comments target='spravochnik' target_id=$item.id}
  3. {/if}
В файле model.php следующее:

  1. public function getCommentTarget($target, $target_id) {
  2.  
  3. $result = array();
  4.  
  5. switch($target){
  6.  
  7. case 'spravochnik': $item = $this->inDB->get_fields('penza_spravochnik_firms', "id='{$target_id}'", 'name', "full_alas={$full_alas}");
  8. if (!$item) { return false; }
  9. $result['link'] = '/spravochnik/'.$full_alas.'.html';
  10. $result['title'] = $item['name'];
  11. break;
  12.  
  13. }
  14.  
  15. return ($result ? $result : false);
  16.  
  17. }
Выполнил запрос к базе данных:

INSERT INTO cms_comment_targets (target, component, title)
VALUES ('spravochnik', 'spravochnik', 'Название Компонента');

Ну естественно ничего не работает и не показывает.
#2 8 сентября 2014 в 22:08
instantcms.ru/forum/thread9529.html

$item = $this->inDB->get_fields('penza_spravochnik_firms', "id='{$target_id}'", 'name', "full_alas={$full_alas}");

Антон
Откуда у вас там переменная $full_alas взялась? И четвертый параметр метода get_fields это сортировка.
быть может вот так все же?
  1. case 'spravochnik': $item = $this->inDB->get_fields('penza_spravochnik_firms', "id='{$target_id}'", 'name, full_alas');
  2.  
  3. if (!$item) { return false; }
  4.  
  5. $result['link'] = '/spravochnik/'.$item['full_alas'].'.html';
  6.  
  7. $result['title'] = $item['name'];
  8.  
  9. break;
#3 8 сентября 2014 в 23:18
instantcms.ru/forum/thread9529.html Это я читал, была бы не закрыта там и написал бы. Fuze, Спасибо за помощь, но к сожалению ничего у меня не выходит, сделал как Вы написали и ничего, у меня даже форма коментирования не показывается.
#4 8 сентября 2014 в 23:44

но к сожалению ничего у меня не выходит

Антон
по таким ответам сложно помочь) подробности нужны.
попробуем потелепатировать:


{if $cfg.comments}
{comments target='spravochnik' target_id=$item.id}
{/if}

Антон
У вас в настройках компонента есть опция на тему показа комментариев? По-видимому нет. Тогда зачем делаете проверку {if $cfg.comments} ?
Ставьте вот так
{comments target='spravochnik' target_id=$item.id}
Соответственно в шаблоне должна быть доступна переменная $item.
#5 9 сентября 2014 в 00:04


но к сожалению ничего у меня не выходит

Антон
по таким ответам сложно помочь) подробности нужны.
попробуем потелепатировать:


{if $cfg.comments}
{comments target='spravochnik' target_id=$item.id}
{/if}

Антон
У вас в настройках компонента есть опция на тему показа комментариев? По-видимому нет. Тогда зачем делаете проверку {if $cfg.comments} ?
Ставьте вот так
{comments target='spravochnik' target_id=$item.id}
Соответственно в шаблоне должна быть доступна переменная $item.

Fuze

Переменной $item нет похоже, есть $response, сделал так {comments target='spravochnik' target_id=$response.id} форма для добавления появилась но без кнопок отправить, отмена. Извиняюсь за свою не компетентность).
#6 9 сентября 2014 в 00:15



но к сожалению ничего у меня не выходит

Антон
по таким ответам сложно помочь) подробности нужны.
попробуем потелепатировать:


{if $cfg.comments}
{comments target='spravochnik' target_id=$item.id}
{/if}

Антон
У вас в настройках компонента есть опция на тему показа комментариев? По-видимому нет. Тогда зачем делаете проверку {if $cfg.comments} ?
Ставьте вот так
{comments target='spravochnik' target_id=$item.id}
Соответственно в шаблоне должна быть доступна переменная $item.

Fuze

Переменной $item нет похоже, есть $response, сделал так {comments target='spravochnik' target_id=$response.id} форма для добавления появилась но без кнопок отправить, отмена. Извиняюсь за свою не компетентность).

Антон

на дефолтном шаблоне кнопка есть, при добавлении коментария пишет Ошибка определения объекта комментирования! #3
#7 9 сентября 2014 в 00:31

Ошибка определения объекта комментирования! #3

Антон
Это говорит о том, что метод getCommentTarget (который вы описали выше) возвращает false.
#8 9 сентября 2014 в 00:38


Ошибка определения объекта комментирования! #3

Антон
Это говорит о том, что метод getCommentTarget (который вы описали выше) возвращает false.

Fuze

Да сам я его не смогу написать, метод тыка не проходит. Спасибо Вам что повозились со мной. Пойду дальше тыкать.
#9 9 сентября 2014 в 07:31
Да, этот момент R2 упустил в создании Фотобитв. Я из этого видео многое почерпнул. Но как подключить комментарии, неизвестно.
#10 9 сентября 2014 в 10:45
Василёк! Невозможно разобраться в чем-либо методом тыка, А можно получить права водителя: методом тыка? А молодому хирургу тоже этим методом пользоваться.
Даже если ничего не понимаешь, можно включить отладчик и смотреть и анализировать исполняемый код, и сразу логика подскажет что неверно .
Кто начинал путь в далеком ассемблере тот знает что без отладки невозможно создать приложение, если ты не гений и помнишь все и всегда и везде.
На локальном сервере включив php 5.3 и указав в нужных местах исследуемого файла этот кусочек инициализации
  1.  
  2. ini_set ('xdebug.collect_assignments', 1);
  3. xdebug_start_trace('C:\links');
  4.  
и в конце исследуемого кода этот кусочек
  1.  
  2. xdebug_stop_trace();
И далее на диске C появится файл link.txt открой его в редакторе и читай, что выполнено.Включи мысль и логику.
Вот как будет выглядеть отлатка твоего кода
  1.  
  2. public function getCommentTarget($target, $target_id) {
  3.  
  4. ################ включили отладку############
  5. ini_set ('xdebug.collect_assignments', 1);
  6. xdebug_start_trace('C:\links');
  7. #############################################
  8. $result = array();
  9.  
  10.  
  11.  
  12. switch($target){
  13.  
  14.  
  15.  
  16. case 'spravochnik': $item = $this->inDB->get_fields('penza_spravochnik_firms', "id='{$target_id}'", 'name', "full_alas={$full_alas}");
  17.  
  18. if (!$item) { return false; }
  19.  
  20. $result['link'] = '/spravochnik/'.$full_alas.'.html';
  21.  
  22. $result['title'] = $item['name'];
  23.  
  24. break;
  25.  
  26.  
  27.  
  28. }
  29.  
  30.  
  31. ##########завершаем отладку до return ############
  32. # чтобы проще понять что будет возвращено создай любую переменную и призвой ей возвращаемые параметры, и их ты увидиш в отладке
  33. $ aaa=$result ? $result : false;
  34.  
  35. xdebug_stop_trace();
  36. ################################################
  37. return ($result ? $result : false);
  38.  
  39.  
  40. }
  41.  
#11 9 сентября 2014 в 10:55

А можно получить права водителя: методом тыка?

oll
Так и происходит в подавляющем большинстве…
#12 9 сентября 2014 в 11:26
Вернее так лучше.Видимо у тебя $item из базы не выбрано
  1.  
  2. public function getCommentTarget($target, $target_id) {
  3. $result = array();
  4. switch($target){
  5. ################ включили отладку############
  6. ini_set ('xdebug.collect_assignments', 1);
  7. xdebug_start_trace('C:\links');
  8. #############################################
  9.  
  10. case 'spravochnik': $item = $this->inDB->get_fields('penza_spravochnik_firms', "id='{$target_id}'", 'name', "full_alas={$full_alas}");
  11.  
  12. ##########завершаем отладку до return ############
  13. xdebug_stop_trace();
  14. ################################################
  15.  
  16. if (!$item) { return false; }
  17.  
  18. $result['link'] = '/spravochnik/'.$full_alas.'.html';
  19.  
  20. $result['title'] = $item['name'];
  21.  
  22. break;
  23.  
  24. }
  25.  
  26. return ($result ? $result : false);
  27.  
  28. }
#13 11 сентября 2014 в 00:29
Сформированием ссылки $result['link'] = у меня получилось, подскажите откуда берется значение target_id, у меня все время одно и тоже значение в таблицу комментариев записывается и оно не соответствует id комментируемой страницы.
Вы не можете отвечать в этой теме.
Войдите или зарегистрируйтесь, чтобы писать на форуме.
Используя этот сайт, вы соглашаетесь с тем, что мы используем файлы cookie.