Jump to content

Recommended Posts

Доброго дня всем!

Недавно переделал по советам с этого форума отзывы на карточке товара с возможностью через админку отвечать на отзыв (официальный ответ) ну и при этом уведомление на почту автору уходит.

Промучался но всё работает, все довольны )

Но тут стал вопрос о создании отдельной (статической) страницы отзывов...

Под конкретным товаром всё работает а как чтобы все отзывы с ответами на отдельной странице ?

Есть у меня на серваке по наследству шаблон review.tpl

{* Страница отдельной записи блога *}
<div class="product-box">
<!-- Заголовок /-->
<h1>Гостевая книга</h1>
<!-- Комментарии -->

	<h2>Отзывы</h2>
	
{if $comments}
	<!-- Список с комментариями -->
	<div class="div_review">
    <table class="otzivu">
		      <tr>
                <td width="60px">Имя:</td>
                <td> <strong class="rewiew_nime">{$comment->name|escape}</strong></td>
              </tr>
		      <tr>
                <td>Город:</td>		
                <td><strong>{$comment->sity|escape}</strong></td>
              </tr>
		      <tr>
                <td>Дата:</td>
                <td><font class="date_review">{$comment->date|date}</font></td>
              </tr>
            </table>
{if !$comment->approved}
            <div class="comment_header">				
				<p>Ожидает модерации...</p>
			</div>
{/if}
	           <p><strong>Сообщение:</strong></p>
		      <p>{$comment->text|escape|nl2br}}</p>
                <hr />
{/foreach}		
	       </div>
{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" /> 
	
	<div class="write">
	           <div class="heading" id="review_title">
                <h2>Оставить отзыв</h2>
                </div>
                <div class="div_review_write">
                <div id="results"></div>
                    <form class="comment_form" method="post">
                        <p><strong><font style="color: #F00;">*</font>Ваше имя:</strong><br/>
	                       <input class="input_name" type="text" id="comment_name" name="name" size="50" value="{$comment_name}" data-format=".+" data-notice="Введите имя"/><br /></p>
                        <p><strong><font style="color: #F00;">*</font>E-mail:</strong><br/>
	                       <input class="input_name" type="text" id="comment_mail" name="mail" size="50" value="{$comment_mail}" data-format=".+" data-notice="Введите E-mail"/><br /></p>
                        <p><strong><font style="color: #F00;">*</font>Город:</strong><br/>
	                       <input class="input_name" type="text" id="comment_sity" name="sity" size="50" value="{$comment_sity}" data-format=".+" data-notice="Введите город"/><br /></p>    
                        <p><textarea class="comment_textarea" id="comment_text" cols="114" rows="10" name="text" data-format=".+" data-notice="Введите комментарий">{$comment_text}</textarea></p>		  
                        <p> </p>
                    <table width="370px">
                        <tr>
                        <td width="150px">
                            <font style="color: #F00;">*</font> Защитный код:
                        </td>
                        <td>
                            <strong>Введите код с изображения:</strong>
                         </td>
                         </tr>
                         <tr>
                         <td>
                            <img src="captcha/image.php?{math equation='rand(10,10000)'}" alt='captcha'/>
                         </td>
                         <td>
                            <input class="input_captcha" id="comment_captcha" type="text" name="captcha_code" value="" data-format="\d\d\d\d" data-notice="Введите капчу"/>
                            <div class="capcha-text">
                            Если вы не можете прочитать код с изображения,
                            кликните на изображение для генерации нового кода.
                            </div>
                        </td>
                        </tr>
                    </table>
                    <div class="prod-otz">	         
		                  <input class="button" type="submit" name="comment" value="Осавить отзыв" />
                    </div>
 	                  </form>
	           </div>
	       </div>
	<!--Форма отправления комментария (The End)-->
<!-- Комментарии (The End) -->
</div>


{*Выводим левое меню*}
<div class="left-menu">
<p class="brends-glava">Разделы</p>
<div id="catalog_menu">
{include file='razdel_menu.tpl'}
</div>
</div>
<div class="clear"></div>

по идее это шаблон вывода всех комментариев

ума не приложу как его использовать при выводе конкретной статической страницы (Отзывы) ?

Помогите плиз если есть у кого немного времени или натолкните на правильный путь...

запутался я что-то

Заранее спасибо!

Link to post
Share on other sites

я это всё реализовал

но здесь идёт речь о карточке товара

а мне бы всё это выкинуть в отдельную страницу...

Link to post
Share on other sites

я это всё реализовал

но здесь идёт речь о карточке товара

а мне бы всё это выкинуть в отдельную страницу...

По аналогии с главной view/MainView.php и design/default/main.tpl, код для вывода возьмите в view/ProductsView.php т добавьте в свой view/?View.php и т.д.
Link to post
Share on other sites

вроде сделал

выводит мой tpl по ссылке

но комментарии не отображает не подскажете косяк где именно в коде tpl

{* Страница отдельной записи блога *}
<div class="product-box">
<!-- Заголовок /-->
<h1>Гостевая книга</h1>
<!-- Комментарии -->

	<h2>Отзывы</h2>
	<div id="read">

{foreach $comments as $comment}
	       <table class="otzivu" >
		      <tr>
                <td width="60px">Имя:</td>
                <td> <strong class="rewiew_nime">{$comment->name|escape}</strong></td>
              </tr>
		      <tr>
                <td>Город:</td>		
                <td><strong>{$comment->sity|escape}</strong></td>
              </tr>
		      <tr>
                <td>Дата:</td>
                <td><font class="date_review">{$comment->date|date}</font></td>
              </tr>
            </table>
{if !$comment->approved}
            <div class="comment_header">				
				<p>Ожидает модерации...</p>
			</div>
{else} <div>
	           <p><strong>Сообщение:</strong></p>
		      <p>{$comment->text|escape|nl2br}</p></div>
			  {if $comment->otvet} <br><div class="admotv">
			  <p style="color:black; margin-left:60px;"><strong>Интернет-магазина "ПростоДар":</strong></p>
			  <p style="color:black; margin-left:60px; margin-right:10px;">{$comment->otvet|escape|nl2br}</p><br></div>{/if}
{/if}
                <hr />
{/foreach}		
	       </div>
   
            <div class="write">
	           <div class="heading" id="review_title">
                <h2>Оставить отзыв</h2>
                </div>
                <div class="div_review_write">
                <div id="results"></div>
                    <form class="comment_form" method="post">
                        <p><strong><font style="color: #F00;">*</font>Ваше имя:</strong><br/>
	                       <input class="input_name" type="text" id="comment_name" name="name" size="50" value="{$comment_name}" data-format=".+" data-notice="Введите имя"/><br /></p>
                        <p><strong><font style="color: #F00;">*</font>E-mail:</strong><br/>
	                       <input class="input_name" type="text" id="comment_mail" name="mail" size="50" value="{$comment_mail}" data-format=".+" data-notice="Введите E-mail"/><br /></p>
                        <p><strong><font style="color: #F00;">*</font>Город:</strong><br/>
	                       <input class="input_name" type="text" id="comment_sity" name="sity" size="50" value="{$comment_sity}" data-format=".+" data-notice="Введите город"/><br /></p>    
                        <p><textarea class="comment_textarea" id="comment_text" cols="114" rows="10" name="text" data-format=".+" data-notice="Введите комментарий">{$comment_text}</textarea></p>		  
                        <p> </p>
                    <table width="370px">
                        <tr>
                        <td width="150px">
                            <font style="color: #F00;">*</font> Защитный код:
                        </td>
                        <td>
                            <strong>Введите код с изображения:</strong>
                         </td>
                         </tr>
                         <tr>
                         <td>
                            <img src="captcha/image.php?{math equation='rand(10,10000)'}" alt='captcha'/>
                         </td>
                         <td>
                            <input class="input_captcha" id="comment_captcha" type="text" name="captcha_code" value="" data-format="\d\d\d\d" data-notice="Введите капчу"/>
                            <div class="capcha-text">
                            Если вы не можете прочитать код с изображения,
                            кликните на изображение для генерации нового кода.
                            </div>
                        </td>
                        </tr>
                    </table>
                    <div class="prod-otz">	         
		                  <input class="button" type="submit" name="comment" value="Оставить отзыв" />
                    </div>
 	                  </form>
	           </div>
	       </div>
        </div>

 

код брал из product.tpl там работает тут не только не отображает комментарии но и не записывает новые...

они отправляются куда в неизвестном направлении в базе их нет

Link to post
Share on other sites

ну вывод коментариев на карточке товара View/ProductView.php

там всё танцуется от урла товара

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

вот весь ProductView.php

equire_once('View.php');


class ProductView extends View
{

	function fetch()
	{   
		$product_url = $this->request->get('product_url', 'string');
		
		if(empty($product_url))
			return false;

		// Выбираем товар из базы
		$product = $this->products->get_product((string)$product_url);
		if(empty($product) || (!$product->visible && empty($_SESSION['admin'])))
			return false;
		
		$product->images = $this->products->get_images(array('product_id'=>$product->id));
		$product->image = &$product->images[0];

		$variants = array();
		foreach($this->variants->get_variants(array('product_id'=>$product->id, 'in_stock'=>true)) as $v)
			$variants[$v->id] = $v;
		
		$product->variants = $variants;
		
		// Вариант по умолчанию
		if(($v_id = $this->request->get('variant', 'integer'))>0 && isset($variants[$v_id]))
			$product->variant = $variants[$v_id];
		else
			$product->variant = reset($variants);
					
		$product->features = $this->features->get_product_options(array('product_id'=>$product->id));
	
		// Автозаполнение имени для формы комментария
		if(!empty($this->user))
			$this->design->assign('comment_name', $this->user->name);           

		// Принимаем комментарий
		if ($this->request->method('post') && $this->request->post('comment'))
		{
			$comment->name = $this->request->post('name');
            $comment->mail = $this->request->post('mail');
            $comment->sity = $this->request->post('sity');
			$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_mail', $comment->mail);
            $this->design->assign('comment_sity', $comment->sity);
			$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 = $product->id;
				$comment->type      = 'product';
				$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'=>'product', 'object_id'=>$product->id, 'approved'=>1, 'ip'=>$_SERVER['REMOTE_ADDR']));
		$this->design->assign('comments', $comments);
		
		
		// Связанные товары
		$related_ids = array();
		$related_products = array();
		foreach($this->products->get_related_products($product->id) as $p)
		{
			$related_ids[] = $p->related_id;
			$related_products[$p->related_id] = null;
		}
		if(!empty($related_ids))
		{
			foreach($this->products->get_products(array('id'=>$related_ids, 'in_stock'=>1, 'visible'=>1)) as $p)
				$related_products[$p->id] = $p;
			
			$related_products_images = $this->products->get_images(array('product_id'=>array_keys($related_products)));
			foreach($related_products_images as $related_product_image)
				if(isset($related_products[$related_product_image->product_id]))
					$related_products[$related_product_image->product_id]->images[] = $related_product_image;
			$related_products_variants = $this->variants->get_variants(array('product_id'=>array_keys($related_products), 'instock'=>true));
			foreach($related_products_variants as $related_product_variant)
			{
				if(isset($related_products[$related_product_variant->product_id]))
				{
					$related_products[$related_product_variant->product_id]->variants[] = $related_product_variant;
				}
			}
			foreach($related_products as $id=>$r)
			{
				if(is_object($r))
				{
					$r->image = &$r->images[0];
					$r->variant = &$r->variants[0];
				}
				else
				{
					unset($related_products[$id]);
				}
			}
			$this->design->assign('related_products', $related_products);
		}

		// Отзывы о товаре
		$comments = $this->comments->get_comments(array('type'=>'product', 'object_id'=>$product->id, 'approved'=>1, 'ip'=>$_SERVER['REMOTE_ADDR']));
		
		// Соседние товары
		$this->design->assign('next_product', $this->products->get_next_product($product->id));
		$this->design->assign('prev_product', $this->products->get_prev_product($product->id));

		// И передаем его в шаблон
		$this->design->assign('product', $product);
		$this->design->assign('comments', $comments);
		
		// Категория и бренд товара
		$product->categories = $this->categories->get_categories(array('product_id'=>$product->id));
		$this->design->assign('brand', $this->brands->get_brand(intval($product->brand_id)));		
		$this->design->assign('category', reset($product->categories));		
		

		// Добавление в историю просмотров товаров
		$max_visited_products = 100; // Максимальное число хранимых товаров в истории
		$expire = time()+60*60*24*30; // Время жизни - 30 дней
		if(!empty($_COOKIE['browsed_products']))
		{
			$browsed_products = explode(',', $_COOKIE['browsed_products']);
			// Удалим текущий товар, если он был
			if(($exists = array_search($product->id, $browsed_products)) !== false)
				unset($browsed_products[$exists]);
		}
		// Добавим текущий товар
		$browsed_products[] = $product->id;
		$cookie_val = implode(',', array_slice($browsed_products, -$max_visited_products, $max_visited_products));
		setcookie("browsed_products", $cookie_val, $expire, "/");
		$canonical_url = "/products/$product_url";
		$this->design->assign('meta_title', $product->meta_title);
		$this->design->assign('meta_keywords', $product->meta_keywords);
		$this->design->assign('meta_description', $product->meta_description);
        $this->design->assign('canonical_url', $canonical_url);
		
		return $this->design->fetch('product.tpl');
	}
	


}
Link to post
Share on other sites

Ура! Спасибо всем! Комменты вывел!

Отзывы отправляются!

Последний вопрос!

Как к этому всему добавить пагинацию через шаблон?

а то комментов много и они сплошным рулоном...

Link to post
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

Loading...
×
×
  • Create New...