Сообщения и коментарии обычно располагают на одной странице. Это и нужно нам сделать.
Редактируем файл prod/apps/blog/modules/post/actions/actions.class.php и меняем метод executeShow():
public function executeShow()
{
$this->post = PostPeer::retrieveByPk($this->getRequestParameter('id'));
$this->forward404Unless($this->post);
$c = new Criteria();
$c->add(CommentPeer::POST_ID, $this->getRequestParameter('id'));
$c->addAscendingOrderByColumn(CommentPeer::CREATED_AT);
$this->comments = CommentPeer::doSelect($c);
}
Модифицирум шаблон для показа сообщений и коментариев prod/apps/blog/modules/post/templates/showSuccess.php:
...
<?php use_helper('Text', 'Date') ?>
<hr />
<?php if ($comments) : ?>
<p><?php echo count($comments) ?> comment
<?php if (count($comments) > 1) : ?>s
<?php endif; ?> to this post.</p>
<?php foreach ($comments as $comment): ?>
<p><em>posted by <?php echo $comment->getAuthor() ?> on
<?php echo format_date($comment->getCreatedAt()) ?>
</em></p>
<div class="comment" style="margin-bottom:10px;">
<?php echo simple_format_text($comment->getBody()) ?>
</div>
<?php endforeach; ?>
<?php endif; ?>
Проверяем:
http://localhost/blog_dev.php/post/show?id=1
При добавления коментария мы имеем возможность выбора соответствующего id сообщения, что не очень красиво.
Модифицируем modules/post/templates/showSuccess.php и добавим снизу:
<?php echo link_to('Add a comment', 'comment/create?post_id='.$post->getId()) ?>
Изменим в modules/comment/templates/editSuccess.php:
<tr>
<th>Post:</th>
<td><?php echo object_select_tag($comment, 'getPostId', array (
'related_class' => 'Post',
)) ?></td>
</tr>
на:
<?php if ($sf_params->has('post_id')): ?>
<?php echo input_hidden_tag('post_id',$sf_params->get('post_id')) ?>
<?php else: ?>
<tr>
<th>Post*:</th>
<td><?php echo object_select_tag($comment, 'getPostId',
array('related_class' => 'Post')) ?></td>
</tr>
<?php endif; ?>
Для атоматического редиректа форм при добавлении коментариев изменим в modules/comment/actions/actions.class.php метод executeUpdate():
public function executeUpdate ()
{
if (!$this->getRequestParameter('id', 0))
{
$comment = new Comment();
}
else
{
$comment = CommentPeer::retrieveByPk($this->getRequestParameter('id'));
$this->forward404Unless($comment);
}
$comment->setId($this->getRequestParameter('id'));
$comment->setPostId($this->getRequestParameter('post_id'));
$comment->setAuthor($this->getRequestParameter('author'));
$comment->setEmail($this->getRequestParameter('email'));
$comment->setBody($this->getRequestParameter('body'));
$comment->save();
return $this->redirect('post/show?id='.$comment->getPostId());
}
Это уже похоже на веб дневник.
Комментариев нет:
Отправить комментарий