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

151 views
Skip to first unread message

Евгений Петров

unread,
Dec 1, 2011, 12:33:33 PM12/1/11
to flexo-mana...@googlegroups.com
Сделал на своем блоге систему комментариев для постов. Оформил через сниппет и шаблон, с использованием JQuery. Кто бы подсказал наглядно как это дело оформить в плагин с настройками и т.д., буду премного благодарен, а то пока не въезжаю в эту систему перехвата событий и т.д., куда чего писать фиг знает ))))

Собственно наработка:

таблица в бд
------------------------
CREATE TABLE IF NOT EXISTS `comment` (
  `id` int(11) unsigned NOT NULL auto_increment,
  `page_id` int(11) unsigned NOT NULL default '0',
  `body` text,
  `author_name` varchar(50) default NULL,
  `author_email` varchar(100) default NULL,
  `is_approved` tinyint(1) unsigned NOT NULL default '1',
  `created_on` datetime default NULL,
  PRIMARY KEY  (`id`),
  KEY `page_id` (`page_id`),
  KEY `created_on` (`created_on`)
) ENGINE=MyISAM  DEFAULT CHARSET=utf8 AUTO_INCREMENT=2 ;


сниппет "comments"
-------------------------------
<div id="comments">
<h3 style="cursor: pointer" name="addcomment">» Оставить комментарий</h3>
<div id="comment-form" style="display: none;">
<form name="add-comment" method="post">
<p>Имя</p> <input type="text" name="author-name" style="width: 200px"><br />

<p>E-mail</p> <input type="text" name="author-mail" style="width: 200px"><br />

<p>Комментарий</p> <textarea name="comment" cols="70" rows="10"></textarea>
<br />
<input type="submit" value="Прокомментировать" name="send-comment">
</form>
</div>
<h3>Комментарии</h3>
<?php
$conn = Record::getConnection();
$sql = 'SELECT * FROM '.TABLE_PREFIX.'comment WHERE page_id=? AND is_approved=0';
$sth = $conn->prepare($sql);
$sth->execute(array($this->id()));
$comments = $sth->fetchAll();
foreach ($comments as $item)
{
?>
<div id="comment">
<span class="author-name"><?php echo $item['author_name']; ?></span>
<span class="author-mail"><?php echo $item['author_email']; ?></span>
<p class="comment-body"><?php echo $item['body']; ?></p>
</div>
<?php
}
?>
</div>
<script language="javascript">
$("h3[name=addcomment]").bind("click", function() {

$("#comment-form").slideToggle(200);

});
$("input[name=send-comment]").bind("click", function() {
var author = $("input[name=author-name]").val();
var email = $("input[name=author-mail]").val();
var comment_body = $("textarea[name=comment]").val();
$.post("<?php echo $this->url(); ?>", {name: author, mail: email, comment: comment_body});
$("#comment-form").html('<p style="color: green">Комментарий отправлен.</p>');
return false;
});
</script>
 
 шаблон posts
------------------------
<?php
// FOR COMMENTS SYSTEM
if (isset($_POST['name']) && isset($_POST['mail']) && isset($_POST['comment']))
{
if (!empty($_POST['name']) && !empty($_POST['mail']) && !empty($_POST['comment']))
{
print_r($_POST);
$conn = Record::getConnection();
$sql = "INSERT INTO ".TABLE_PREFIX."comment (page_id, body, author_name, author_email) VALUES (?, ?, ?, ?)";
$sth = $conn->prepare($sql);
$sth->execute(array($this->id(), $_POST['comment'], $_POST['name'], $_POST['mail']));
}
}
// ---END COMMENTS SYSTEM
?>
<?php $this->includeSnippet('header'); ?>
<div id="middler">
<section id="post-content">

<?php if($this->slug) echo($this->breadcrumbs(' &raquo; ')); ?>

<h1><?php echo $this->title(); ?></h1>
Тэги: <i><?php echo implode(', ',$this->tags()); ?></i><br />
Дата: <i><?php echo $this->date('%d.%m.%y %H:%M'); ?></i><br />
<?php echo $this->content(); ?>
Автор: <i><?php echo $this->author(); ?></i><br /><br />
<?php $this->includeSnippet('comments'); ?>
</section>
</div><!--/#middler-->
<?php $this->includeSnippet('footer'); ?>

стили css
---------------
  /*
    comments
*/
#comments {
display:block;
position: relative;
width: 100% auto;
}
#comments h3 {
border-top: 1px solid #e3e4e6;
margin: 1em 0;
padding-top: .5em;
color: #E7431D;
}
#comment-form input,textarea {
border: 1px solid #bbb;
background: #fff;
padding: 5px;
}
.comments-header {
font-size:120%;
width: 100%;
margin:1em 0;
color:#E7431D;
padding-bottom:.5em;
border-bottom:1px solid #e3e4e6;
}
#comment {
margin-bottom: 10px;
border-bottom: 1px dashed #ccc;
}
#comment .author-name {
font-weight: bold;
font-size: 90%;
background: url('../images/comment-user.png') no-repeat;
padding-left: 20px;
}
#comment .author-mail {
margin-left: 30px;
font-size: 90%;
background: url('../images/comment-mail.png') no-repeat;
padding-left: 20px;
}
#comment .comment-body {
border-left: 10px solid #ccc;
padding-left: 10px;
font-size: 90%;
}
 

Евгений Петров

unread,
Dec 1, 2011, 12:34:42 PM12/1/11
to flexo-mana...@googlegroups.com
посмотреть мона тут http://blog.yanaydu.com/javascript/vlc-pleer-na-sajt.html

Евгений Петров

unread,
Dec 1, 2011, 12:37:11 PM12/1/11
to flexo-mana...@googlegroups.com
да, надо еще сделать конечно проверки различные на инъекции и т.д., но это можно потом дописать, знать бы только как правильно плагин оформить ))))

sartas

unread,
Dec 1, 2011, 3:06:48 PM12/1/11
to flexo-mana...@googlegroups.com
В ранних версиях флексо был плагин комментариев, но поддержка его была прекращена.

В TODO стоит разработка плагина комментариев и сейчас лучше не придумывать своих велосипедов, а подключить disqus.
К тому же легче сделать плагин для синхронизации с дискусом, чем полнофункциональный плагин комментариев.

Евгений Петров

unread,
Dec 1, 2011, 3:12:55 PM12/1/11
to flexo-mana...@googlegroups.com
да, еще заметил проблему с плагином кэша, нада отключать чтобы отображались одобренные комменты сразу, а не по истечении времени кэша...

Евгений Петров

unread,
Dec 1, 2011, 3:17:22 PM12/1/11
to flexo-mana...@googlegroups.com
ну не знаю как тебе, а я бы использовал встроенный функционал, если он есть. изобретать велосипеды конечно не надо, но и без этого никак )))

научили бы лучше как оформлять в плагины наработки, а там сам пользователь CMS определится что ему больше по душе ))))

хорошо бы отдельную инструкцию для фронтэнда и бэкэнда ....

sartas

unread,
Dec 3, 2011, 12:18:52 AM12/3/11
to flexo-mana...@googlegroups.com
Старый плагин комментариев. Немного поработал над ним, чтобы он заработал на новой версии.

После установки создать сниппет comments

<?php if ( Plugin::isEnabled( 'comments' ) ): ?> 
<?php if ( comments_is_opened( $this ) ): ?>     
<h3>Comments (<?php echo comments_count( $this ); ?>)</h3>  
<?php comments_display( $this ); ?>                 
<h3>Add comment</h3>     
<?php comments_display_form( $this ); ?>  
<?php endif; ?>
<?php endif; ?>


Как пользоваться:

1. В шаблон страницы вставить
<?php $this->includeSnippet('comments'); ?>

2. При редактировании страницы сделать комментарии открытыми
comments.zip

Евгений Петров

unread,
Dec 5, 2011, 1:58:22 AM12/5/11
to flexo-mana...@googlegroups.com
поставил плагин, но постоянно выдает ошибки, что в админке, что на страницах.

sartas

unread,
Dec 8, 2011, 9:15:36 PM12/8/11
to flexo-mana...@googlegroups.com
Рабочая версия комментариев, админка правда немного кривая, надо поправить стили. 
comments.tar.gz

артем воробьев

unread,
Dec 20, 2011, 12:27:19 PM12/20/11
to flexo-manage-content
как ее прикрутить к сайту, чтобы комменты работали. куда распаковать
архив?

On 9 дек, 08:15, sartas <ardua...@gmail.com> wrote:
> Рабочая версия комментариев, админка правда немного кривая, надо поправить
> стили.
>

>  comments.tar.gz
> 90KПросмотретьЗагрузить

sartas

unread,
Dec 20, 2011, 12:32:39 PM12/20/11
to flexo-mana...@googlegroups.com
распаковать в папку плагинов, активировать

После установки создать сниппет comments

<?php if ( Plugin::isEnabled( 'comments' ) ): ?> 
<?php if ( comments_is_opened( $this ) ): ?>     
<h3>Comments (<?php echo comments_count( $this ); ?>)</h3>  
<?php comments_display( $this ); ?>                 
<h3>Add comment</h3>     
<?php comments_display_form( $this ); ?>  
<?php endif; ?>
<?php endif; ?>


Как пользоваться:

1. В шаблон страницы вставить
<?php $this->includeSnippet('comments'); ?>

артем воробьев

unread,
Dec 20, 2011, 12:52:36 PM12/20/11
to flexo-manage-content
Не отображается на сайте. что я мог забыть? еще раз напишите полную
инструкцию, плиз!!!

On 9 дек, 08:15, sartas <ardua...@gmail.com> wrote:

> Рабочая версия комментариев, админка правда немного кривая, надо поправить
> стили.
>

>  comments.tar.gz
> 90KПросмотретьЗагрузить

sartas

unread,
Dec 20, 2011, 1:00:55 PM12/20/11
to flexo-mana...@googlegroups.com
распаковать в папку плагинов, активировать

После установки создать сниппет comments

<?php if ( Plugin::isEnabled( 'comments' ) ): ?>
<?php if ( comments_is_opened( $this ) ): ?>
<h3>Comments (<?php echo comments_count( $this ); ?>)</h3>
<?php comments_display( $this ); ?>
<h3>Add comment</h3>
<?php comments_display_form( $this ); ?>
<?php endif; ?>
<?php endif; ?>

Как пользоваться:

1. В шаблон страницы вставить
<?php $this->includeSnippet('comments'); ?>

2. При редактировании страницы сделать комментарии открытыми



Использовать этот плагин не рекомендую, т.к. он никем не поддерживается. Я выложил его для тех, кто сможет в нем разобраться и откорректировать его до нормальной работы.

Для комментариев лучше установить Disqus http://disqus.com, или комментарии вконтакте
Reply all
Reply to author
Forward
0 new messages