Перейти к содержанию
Официальный форум поддержки Simpla

Рекомендуемые сообщения

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

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

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

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

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

Есть у меня на серваке по наследству шаблон 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>

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

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

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

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

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

Ссылка на сообщение
Поделиться на другие сайты

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

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

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

Ссылка на сообщение
Поделиться на другие сайты

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

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

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

По аналогии с главной view/MainView.php и design/default/main.tpl, код для вывода возьмите в view/ProductsView.php т добавьте в свой view/?View.php и т.д.
Ссылка на сообщение
Поделиться на другие сайты

вроде сделал

выводит мой 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 там работает тут не только не отображает комментарии но и не записывает новые...

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

Ссылка на сообщение
Поделиться на другие сайты

Ну а вы свой View в папке view создали? Допустим ReviewsView.php, и поместите туда код выборки комментариев из файла View/ProductsView.php.

Ссылка на сообщение
Поделиться на другие сайты

ну вывод коментариев на карточке товара 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');
	}
	


}
Ссылка на сообщение
Поделиться на другие сайты

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

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

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

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

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

Ссылка на сообщение
Поделиться на другие сайты

Присоединяйтесь к обсуждению

Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.

Гость
Ответить в этой теме...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

Загрузка...
×
×
  • Создать...