ExtraBash Опубликовано 5 февраля, 2015 Жалоба Поделиться Опубликовано 5 февраля, 2015 (изменено) Привет ребята.Вчера столкнулся с новой небольшой задачей,нужны были отзывы на сайт, вк не понравились,решил перекрутить комментарии стандартные. Вот такой вот результат: Для такого результата потребуется несколько манипуляций:1. Идем в базу и выполняем запрос: ALTER TABLE `s_comments` MODIFY `type` ENUM('product', 'blog', 'feedback') Что добавит нам дополнительный тип комментариев - отзывы. 2. Сделаем в админке, 2.1. Чтобы вызывались комментарии нового типа:В файле /simpla/CommentsAdmin.php // Выбирает объекты, которые прокомментированы: $products_ids = array(); $posts_ids = array(); $pages_ids = array(); foreach($comments as $comment) { if($comment->type == 'product') $products_ids[] = $comment->object_id; if($comment->type == 'blog') $posts_ids[] = $comment->object_id; if($comment->type == 'feedback') $pages_ids[] = $comment->object_id; } $products = array(); foreach($this->products->get_products(array('id'=>$products_ids)) as $p) $products[$p->id] = $p; $posts = array(); foreach($this->blog->get_posts(array('id'=>$posts_ids)) as $p) $posts[$p->id] = $p; $pages = array(); foreach($pages_ids as $p){ $pages[$p] = $this->pages->get_page($p); } foreach($comments as &$comment) { if($comment->type == 'product' && isset($products[$comment->object_id])) $comment->product = $products[$comment->object_id]; if($comment->type == 'blog' && isset($posts[$comment->object_id])) $comment->post = $posts[$comment->object_id]; if($comment->type == 'feedback' && isset($products[$comment->object_id])) $comment->page = $pages[$comment->object_id]; } Теперь функционально они вызываются. 2.2. Чтобы фильтровались и отображались комментарии нового типа:В файле /simpla/design/html/comments.tpl {* Заголовок *} <div id="header"> {if $keyword && $comments_count} <h1>{$comments_count|plural:'Нашелся':'Нашлось':'Нашлись'} {$comments_count} {$comments_count|plural:'комментарий':'комментариев':'комментария'}</h1> {elseif !$type} <h1>{$comments_count} {$comments_count|plural:'комментарий':'комментариев':'комментария'}</h1> {elseif $type=='product'} <h1>{$comments_count} {$comments_count|plural:'комментарий':'комментариев':'комментария'} к товарам</h1> {elseif $type=='blog'} <h1>{$comments_count} {$comments_count|plural:'комментарий':'комментариев':'комментария'} к записям в блоге</h1> {elseif $type=='feedback'} <h1>{$comments_count} {$comments_count|plural:'отзыв':'отзывов':'отзыва'}</h1> {/if} </div> И ниже в том-же файле: <!-- Категории товаров --> <ul> <li {if !$type}class="selected"{/if}><a href="{url type=null}">Все комментарии</a></li> </ul> <ul> <li {if $type == 'feedback'}class="selected"{/if}><a href='{url keyword=null type=feedback}'>Отзывы</a></li> <li {if $type == 'product'}class="selected"{/if}><a href='{url keyword=null type=product}'>К товарам</a></li> <li {if $type == 'blog'}class="selected"{/if}><a href='{url keyword=null type=blog}'>К блогу</a></li> </ul> <!-- Категории товаров (The End)--> 3. Теперь на самой странице3.1. Вызов комментариев и сохранение новогоФайл /view/PageView.php - добавим: // Принимаем комментарий if ($this->request->method('post') && $this->request->post('comment')) { $comment->name = $this->request->post('name'); $comment->text = $this->request->post('text'); $captcha_code = $this->request->post('captcha_code', 'string'); // Передадим комментарий обратно в шаблон - при ошибке нужно будет заполнить форму $this->design->assign('comment_text', $comment->text); $this->design->assign('comment_name', $comment->name); // Проверяем капчу и заполнение формы if ($_SESSION['captcha_code'] != $captcha_code || empty($captcha_code)) { $this->design->assign('error', 'captcha'); } elseif (empty($comment->name)) { $this->design->assign('error', 'empty_name'); } elseif (empty($comment->text)) { $this->design->assign('error', 'empty_comment'); } else { // Создаем комментарий $comment->object_id = $page->id; $comment->type = 'feedback'; $comment->ip = $_SERVER['REMOTE_ADDR']; // Если были одобренные комментарии от текущего ip, одобряем сразу $this->db->query("SELECT 1 FROM __comments WHERE approved=1 AND ip=? LIMIT 1", $comment->ip); if($this->db->num_rows()>0) $comment->approved = 1; // Добавляем комментарий в базу $comment_id = $this->comments->add_comment($comment); // Отправляем email $this->notify->email_comment_admin($comment_id); // Приберем сохраненную капчу, иначе можно отключить загрузку рисунков и постить старую unset($_SESSION['captcha_code']); header('location: '.$_SERVER['REQUEST_URI'].'#comment_'.$comment_id); } } // Комментарии к странице $comments = $this->comments->get_comments(array('type'=>'feedback', 'object_id'=>$page->id, 'approved'=>1, 'ip'=>$_SERVER['REMOTE_ADDR'])); $this->design->assign('comments', $comments); Обязательно до строки: return $this->design->fetch('page.tpl'); Теперь вызываются комментарии при загрузке страницы, а так-же сохраняются новые.3.2. Теперь прикрутим шаблон и вызов шаблонаЯ лично создал файл /design/default/html/otzyvy.tpl с содержанием: <!-- Комментарии --> <div id="comments"> {if $comments} <!-- Список с комментариями --> <ul class="comment_list"> {foreach $comments as $comment} <li> <a name="comment_{$comment->id}"></a> <!-- Имя и дата комментария--> <div class="comment_header"> {$comment->name|escape} <i>{$comment->date|date}, {$comment->date|time}</i> {if !$comment->approved}ожидает модерации</b>{/if} </div> <!-- Имя и дата комментария (The End)--> <!-- Комментарий --> {$comment->text|escape|nl2br} <!-- Комментарий (The End)--> </li> {/foreach} </ul> <!-- Список с комментариями (The End)--> {else} <p> Пока нет отзывов </p> {/if} <!--Форма отправления комментария--> <!--Подключаем js-проверку формы --> <script src="/js/baloon/js/default.js" language="JavaScript" type="text/javascript"></script> <script src="/js/baloon/js/validate.js" language="JavaScript" type="text/javascript"></script> <script src="/js/baloon/js/baloon.js" language="JavaScript" type="text/javascript"></script> <link href="/js/baloon/css/baloon.css" rel="stylesheet" type="text/css" /> <form class="comment_form" method="post" action=""> <h2>Написать отзыв</h2> {if $error} <div class="message_error"> {if $error=='captcha'} Неверно введена капча {elseif $error=='empty_name'} Введите имя {elseif $error=='empty_comment'} Введите комментарий {/if} </div> {/if} <textarea class="comment_textarea" id="comment_text" name="text" data-format=".+" data-notice="Введите отзыв">{$comment_text}</textarea><br /> <div> <label for="comment_name">Имя</label> <input class="input_name" type="text" id="comment_name" name="name" value="{$comment_name|escape}" data-format=".+" data-notice="Введите имя"/><br /> <input class="button" type="submit" name="comment" value="Отправить" /> <label for="comment_captcha">Число</label> <div class="captcha"><img src="captcha/image.php?{math equation='rand(10,10000)'}"/></div> <input class="input_captcha" id="comment_captcha" type="text" name="captcha_code" value="" data-format="\d\d\d\d" data-notice="Введите капчу"/> </div> </form> <!--Форма отправления комментария (The End)--> </div> <!-- Комментарии (The End) --> Это практически копия комментариев из блога.Ну и вывел их в /design/default/html/index.tpl <!-- Основная часть --> <div id="content"> {$content} {if $smarty.server.REQUEST_URI == '/otzyvy'} {include file='otzyvy.tpl'} {/if} </div> <!-- Основная часть (The End) --> -----------------------------------------------Вот, готово, остается только создать страницу со ссылкой "/otzyvy", или другую,какая вам нравится и вы получите на ней модерируемые отзывы. Такие дела. Думаю можно сделать штуку, чтобы в админке страниц галочкой помечалось где выводить такие,но это делать мне не нужно сейчас, поэтому я не делал.-----------------------------------------------Пользуйтесь на здоровье. Вопросы в skype - abashyrov Поставлю за 500 рубликов, если нужно.Если кому понравилось - можете закинуть мнеспасибо на киви +7 937 304-69-07-----------------------------------------------Вроде не забыл ничего. Изменено 5 февраля, 2015 пользователем ExtraBash Цитата Ссылка на сообщение Поделиться на другие сайты
ps-simpla Опубликовано 5 февраля, 2015 Жалоба Поделиться Опубликовано 5 февраля, 2015 куда лучше было бы если создать отдельно вкладку Отзывы а не вместе с комментариями. {if $smarty.server.REQUEST_URI == '/otzyvy'} {include file='otzyvy.tpl'} {/if} сырая доработка, не в обиду. Допустим как вывести последние 5 отзывов на главную страницу? Цитата Ссылка на сообщение Поделиться на другие сайты
ExtraBash Опубликовано 5 февраля, 2015 Автор Жалоба Поделиться Опубликовано 5 февраля, 2015 куда лучше было бы если создать отдельно вкладку Отзывы а не вместе с комментариями. {if $smarty.server.REQUEST_URI == '/otzyvy'} {include file='otzyvy.tpl'} {/if} сырая доработка, не в обиду. Допустим как вывести последние 5 отзывов на главную страницу?А я и не говорил, что на главную сунуть можно, и более того указал сразу на некоторые возможныенеудобства в работе, но мне более было не нужно, я более и не занимался. Ну придется обработку сунуть отдельно, и придется шаблон формы сунуть в мейн, а форыч ограничить до 5. Думаю у вас, как у профессионала займет минуты 3. Остальные смогут за 2 сунуть на любую другую страницу. Цитата Ссылка на сообщение Поделиться на другие сайты
Consult Опубликовано 6 февраля, 2015 Жалоба Поделиться Опубликовано 6 февраля, 2015 Полезно.Вопрос. А админ может на эти комментарии как-то отвечать?И еще самое важное, я как раз недавно сделал страницу /otzyvy и прикрутил туда комментарии от вкА можно туда вкладкой еще сделать ваши? чтобы у человека был выбор.Т.е заходит человек на страницу отзывов, а там открыта по умолчанию 1 вкладка допустим с комментариями от вк, и, нажав, на другой таб он переходит к стандартным комментариям. Цитата Ссылка на сообщение Поделиться на другие сайты
ExtraBash Опубликовано 6 февраля, 2015 Автор Жалоба Поделиться Опубликовано 6 февраля, 2015 Полезно.Вопрос. А админ может на эти комментарии как-то отвечать?И еще самое важное, я как раз недавно сделал страницу /otzyvy и прикрутил туда комментарии от вкА можно туда вкладкой еще сделать ваши? чтобы у человека был выбор.Т.е заходит человек на страницу отзывов, а там открыта по умолчанию 1 вкладка допустим с комментариями от вк, и, нажав, на другой таб он переходит к стандартным комментариям.Первый вопрос - ну я думаю можно в pageView сделать ограничение, дабы какое-то имя аля Админимтратор нельзя было применить, и просто от его имени писать ответ. В целом такой штуки нет - это стандартный модуль комментариев. Второе - конечно можно, почему нет, otzyvy.tpl редактируем под табы http://jqueryui.com/tabs/ В одном выводите всё, что написано выше, в другом от вк. Цитата Ссылка на сообщение Поделиться на другие сайты
den_k2 Опубликовано 21 февраля, 2015 Жалоба Поделиться Опубликовано 21 февраля, 2015 Плиз подскажи как решитьWarning: Creating default object from empty value in view/PageView.php on line 37Warning: Cannot modify header information - headers already sent by (output started at ........./view/PageView.php:37)line 37: $comment->name = $this->request->post('name');уже и пересохранил в кодировке без вом спасибо Цитата Ссылка на сообщение Поделиться на другие сайты
Kosjak76 Опубликовано 21 февраля, 2015 Жалоба Поделиться Опубликовано 21 февраля, 2015 $comment = new stdClass();$comment->name = $this->request->post('name'); Цитата Ссылка на сообщение Поделиться на другие сайты
den_k2 Опубликовано 24 февраля, 2015 Жалоба Поделиться Опубликовано 24 февраля, 2015 $comment = new stdClass();$comment->name = $this->request->post('name'); Ок! Помогло Цитата Ссылка на сообщение Поделиться на другие сайты
hamelyon Опубликовано 16 апреля, 2015 Жалоба Поделиться Опубликовано 16 апреля, 2015 Ошибка /simpla/CommentsAdmin.php on line 116 Цитата Ссылка на сообщение Поделиться на другие сайты
hamelyon Опубликовано 19 апреля, 2015 Жалоба Поделиться Опубликовано 19 апреля, 2015 На главную методомtype=feedback Цитата Ссылка на сообщение Поделиться на другие сайты
voodoo_pan Опубликовано 23 ноября, 2016 Жалоба Поделиться Опубликовано 23 ноября, 2016 а где вы это взяли ?,<script src="/js/baloon/js/default.js" language="JavaScript" type="text/javascript"></script><script src="/js/baloon/js/validate.js" language="JavaScript" type="text/javascript"></script> это не стандартный набор ! Цитата Ссылка на сообщение Поделиться на другие сайты
gansito Опубликовано 14 января, 2017 Жалоба Поделиться Опубликовано 14 января, 2017 А как вывести у каждого коммента ссылку на товар к которому он относится? ну как в админке только на странице комментариев? {if $comment->type == 'product'}<a href="{$config->root_url}/products/{$comment->product->url}#comment_{$comment->id}">{$comment->product->name}</a>{/if}эта конструкция не выводит Цитата Ссылка на сообщение Поделиться на другие сайты
WIXVW Опубликовано 7 февраля, 2019 Жалоба Поделиться Опубликовано 7 февраля, 2019 (изменено) Над комментариями горит красный кружочек с цифрой 1 и на странице товара он есть. а в самой вкладке пусто. ни одного комментария Изменено 7 февраля, 2019 пользователем WIXVW Цитата Ссылка на сообщение Поделиться на другие сайты
Kami Опубликовано 7 февраля, 2019 Жалоба Поделиться Опубликовано 7 февраля, 2019 Над комментариями горит красный кружочек с цифрой 1 и на странице товара он есть. а в самой вкладке пусто. ни одного комментария смотрите в базе он записывается? Цитата Ссылка на сообщение Поделиться на другие сайты
WIXVW Опубликовано 7 февраля, 2019 Жалоба Поделиться Опубликовано 7 февраля, 2019 нет Цитата Ссылка на сообщение Поделиться на другие сайты
Kami Опубликовано 7 февраля, 2019 Жалоба Поделиться Опубликовано 7 февраля, 2019 нет Как может комментарий присутствовать в карточке товара, а в базе его не быть? Мы же о MySQL базе говорим я надеюсь? Цитата Ссылка на сообщение Поделиться на другие сайты
Рекомендуемые сообщения
Присоединяйтесь к обсуждению
Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.