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

Ответ на комментарий с уведомлением автору


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

И так! Что бы не дублировать и не причислять себе уже существующие достяжения и решения, введу предисловие :)

Для орагнизации ответа на комментарий с уведомлением, нам понадобится:

1. Решение e-mail в комментариях от пользователя Ps-simpla™

2. Решение по редактированию комментариев от пользователя Kpoxa

UPD: решение по ссылке более не доступно, читаем тут

После того, как эти два решения интегрированы в Simpla, можно продолжить!

 

1. В таблице комментариев _comments создаем новое поле otvet с типом TEXT (по аналогии с полем text). После этого правим функцию get_comment и get_comments в файле api/Comments.php, которая получает данные из базе по комментариям, нам нужно в SELECT включить наше новое поле. Я не буду дословно описывать "найдите это, замените на это", действия те-же, как в случае с добавлением поля email в таблицу с комментариями, мы просто ищем SQL запрос SELECT в функциях get_comment и get_comments и добавляем после "c.text," новое поле "c.otvet,".

 

2. Дале правим шаблон comment.tpl, добавляя туда скрытое поле с e-mail'ом автора комментария, что бы отправить его потом в POST... после

<input name="type" type="hidden" value="{$comment->type|escape}">

добавляем:

<input name="email" type="hidden" value="{$comment->email|escape}">

А так же, нам понадобится новый textarea для ввода ответа, по аналогии с текстом комментария, выглядеть это должно примерно так:

<!-- Комментарий -->
<div class="block layer">
	<h2>Текст комментария</h2>
	<textarea name="text" class="editor_small" style="width:100%; height:100px;">{$comment->text|escape}</textarea>
	</br></br>
	<h2>Ответ администратора</h2> 
	<textarea name="otvet" class="editor_small" style="width:100%; height:100px;">{$comment->otvet|escape}</textarea>
	{if $comment->email}		
		<input type="checkbox" value="1" id="notify_user" name="notify_user">
		<label for="notify_user">Уведомить пользователя об ответе на комментарий</label>
	{/if}
</div>

В итоге мы получаем следующую картинку:

post-1241-0-49842100-1380544432_thumb.jpg

 

3. Далее в файле CommentAdmin.php добавляем после строки:

$comment->name = $this->request->post('name');

строку получения адреса эл.почты, которую мы передали из шаблона:

$comment->email = $this->request->post('email');

Чуть ниже, мы заменяем строку:

$this->comments->update_comment($comment->id, $comment);

на следующий блок:

$comment->otvet = $this->request->post('otvet');

$is_notify = $this->request->post('notify_user');

$comment_id = $this->comments->update_comment($comment->id, $comment);
if ($comment_id and $is_notify and $comment->email and $comment->otvet)
	$this->notify->email_comment_user($comment_id);

4. Теперь нам надо создать функцию email_comment_user, открываем файл api/Notify.php и в удобное место, к примеру после функции:

public function email_comment_admin($comment_id)
{
  ...
}

добавляем нашу функцию:

// Если админ оставил ответ на комментарий, отправляем письмо пользователю!	
public function email_comment_user($comment_id)
{ 
		if(!($comment = $this->comments->get_comment(intval($comment_id))))
			return false;

		$this->design->assign('comment', $comment);
		
		// Выбирает объект, который прокомментирован:
		if($comment->type == 'product')
		{
			$products = array();
			$products_ids = array();
			$products_ids[] = $comment->object_id;
			foreach($this->products->get_products(array('id'=>$products_ids)) as $p)
				$products[$p->id] = $p;
			if(isset($products[$comment->object_id]))
				$comment->product = $products[$comment->object_id];
		}

		if($comment->type == 'blog')
		{
			$posts = array();
			$posts_ids = array();
			$posts_ids[] = $comment->object_id;
			foreach($this->blog->get_posts(array('id'=>$posts_ids)) as $p)
				$posts[$p->id] = $p;
			if(isset($posts[$comment->object_id]))
				$comment->post = $posts[$comment->object_id];
		}

		// Отправляем письмо
		$email_template = $this->design->fetch($this->config->root_dir.'simpla/design/html/email_comment_user.tpl');
		$subject = $this->design->get_var('subject');
		$this->email($comment->email, $subject, $email_template, $this->settings->notify_from_email);
}

5. Готово, теперь же нам нужен сам шаблон, создаем его simpla/design/html/email_comment_user.tpl

Я использовал следующий шаблон уведомления:

{$subject="Администратор магазина оставил ответ на Ваш комментарий" scope=parent}

<h1 style="font-weight:normal;font-family:arial;">Ваш комментарий получил ответ администратора магазина</h1>

<div style="font-family:arial; font-size: 11pt;">Уважаемый(ая) {$comment->name|escape}! На ваш комментарий
{if $comment->type == 'product'}
к товару <a target="_blank" href="{$config->root_url}/products/{$comment->product->url}#comment_{$comment->id}">{$comment->product->name}</a>
{elseif $comment->type == 'blog'}
к статье <a target="_blank" href="{$config->root_url}/blog/{$comment->post->url}#comment_{$comment->id}">{$comment->post->name}</a>
{/if}
от {$comment->date|date} {$comment->date|time} с текстом:</div>
<span style="font-family:arial; font-size: 10pt; font-style:italic; padding-left:30px">{$comment->text|escape|nl2br}</span> 

<div style="font-family:arial; font-size: 11pt; padding-top: 10px;">получен официальный ответ:</div>
<span style="font-family:arial; font-size: 10pt; font-style:italic; padding-left:30px">{$comment->otvet|escape|nl2br}</span> 

<div style="font-family:arial; font-size: 10pt; padding-top: 20px;">Посмотреть
{if $comment->type == 'product'}
<a target="_blank" href="{$config->root_url}/products/{$comment->product->url}#comment_{$comment->id}">комментарий к товару</a>
{elseif $comment->type == 'blog'}
<a target="_blank" href="{$config->root_url}/blog/{$comment->post->url}#comment_{$comment->id}">комментарий к статье</a>
{/if}
или перейти в <a href="{$config->root_url}">Магазин</a>
</div>

в итоге получаем вот такое красивое уведомление:

post-1241-0-90900900-1380545288_thumb.jpg

 

Ну, на этом все, остальное это уже подгон шаблона! Например в шаблоне Product.tpl используем {$comment->otvet|escape|nl2br} для вывода ответа. Аналогично в шаблоне админки comments.tpl, на главной странице списка комментария выводим ответ:

post-1241-0-12622500-1380546070_thumb.jpgpost-1241-0-64437100-1380546075_thumb.jpg

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

Круто!
В комментариях теперь не хватает только разделения текста на текст общий, о минусах и о плюсах.

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

Круто!

В комментариях теперь не хватает только разделения текста на текст общий, о минусах и о плюсах.

у многих уж есть такое разделение

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

http://www.simplashop.com/products/faq - аналогичная задача. В принципе давно работаю через этот модуль в своей админке.

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

mart в вашем примере возможна переписка, в моем же варианте ТОЛЬКО ответ... Ну такой небольшой ньюанс как бесплатность :)

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

Со временем все будет бесплатно...

Насчет полноценной переписки - необходима повторная идентификация клиента, т.е. по сути дальнейшие вопрос-ответ с клиентом в Симпле возможны только через авторизацию. Или еще можно попробовать через куки, но это вариант не стабилен :( Пока склоняюсь к обязательной регистрации, т.е. даже при заказе без авторизации делать скрытую регистрацию.
Как раньше многие из  http://www.simplashop.com/articles были платными (да и сейчас у некоторых как оказалось. даже мои бесплатные скрипты продают :( )

Ссылка на сообщение
Поделиться на другие сайты
  • 4 месяца спустя...

Добрый день

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

Заранее благодарю

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

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

<div id="page_title"><h2>{$name_title}({$comments|count})</h2></div>
	{if $comments}
		<ul class="comment_list">
		{foreach $comments as $comment}
		<a name="comment_{$comment->id}"></a>
		<li>
			<div class="comment_header">
			{$comment->name|escape}<i>{$comment->date|date}, {$comment->date|time}</i>
			{if !$comment->approved}ожидает модерации</b>{/if}
			</div>
			{$comment->text|escape|nl2br}
                        <div class="answer"><span>Официальный ответ</span><p>{$comment->otvet|escape|nl2br}</p></div>
		</li>
		{/foreach}
		</ul>
	{/if}

скрин: http://i.imgur.com/UKz5zf8.png

Ссылка на сообщение
Поделиться на другие сайты
  • 7 месяцев спустя...

Покапался на днях в своем коде, уже на помню что там было сделано Крохой, а что мной доработано!

 

Т.к. его страница более не доступна, попробую восстановить хронологию, но времени много прошло, и за точность не ручаюсь:

1. Качаем архив прикрепленный к сообщению и раскидываем файлы согласно структуре папок на сайте

2. Открываем simpla/design/html/comments.tpl и перед ссылкой удаления коммента:

<a class="delete" title="Удалить" href="#"></a>

добавляем ссылку на редактирование:

<a class="edit" title="Редактировать" href="{url module=CommentAdmin id=$comment->id return=$smarty.server.REQUEST_URI}"></a>

3. Далее открываем  simpla/IndexAdmin.php и перед:

'CommentsAdmin'       => 'comments',

добавляем 

'CommentAdmin'        => 'comments',

4. Еще наверно в стили simpla/design/css/style.css нужно добавить стиль для ссылки редактирования:

.icons a.edit { background-image: url(design/images/pencil.png); }

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

simpla.rar

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

Покапался на днях в своем коде, уже на помню что там было сделано Крохой, а что мной доработано!

 

Т.к. его страница более не доступна, попробую восстановить хронологию, но времени много прошло, и за точность не ручаюсь:

1. Качаем архив прикрепленный к сообщению и раскидываем файлы согласно структуре папок на сайте

2. Открываем simpla/design/html/comments.tpl и перед ссылкой удаления коммента:

<a class="delete" title="Удалить" href="#"></a>

добавляем ссылку на редактирование:

<a class="edit" title="Редактировать" href="{url module=CommentAdmin id=$comment->id return=$smarty.server.REQUEST_URI}"></a>

3. Далее открываем api/simpla.php и перед:

'CommentsAdmin'       => 'comments',

добавляем 

'CommentAdmin'        => 'comments',

4. Еще наверно в стили simpla/design/css/style.css нужно добавить стиль для ссылки редактирования:

.icons a.edit { background-image: url(design/images/pencil.png); }

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

Не работает данный метод(

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

Не работает данный метод(

Я даже не знаю, как отвечать на такие сообщения? Вы бы хотя бы какой нибудь информации добавили! Что не работает? Какую ошибку пишет?

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

П.3, например, нельзя выполнить, потому что в указанном файле нет указанной строки. А то, что п.3 надо выполнять для совсем другого файла, новичку догадаться трудно...

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

Я даже не знаю, как отвечать на такие сообщения? Вы бы хотя бы какой нибудь информации добавили! Что не работает? Какую ошибку пишет?

НУ почему не знаете как отвечать, данный метод был предназначен для редактирование чужого комментария, и данный метод не позволяет этому совершиться. ))

 

+ в api/simpla.php нет строчек

'CommentsAdmin' => 'comments',

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

НУ почему не знаете как отвечать, данный метод был предназначен для редактирование чужого комментария, и данный метод не позволяет этому совершиться. ))

 

+ в api/simpla.php нет строчек

'CommentsAdmin' => 'comments',

Да, ошибся, это вставляется в simpla/IndexAdmin.php

 

 

П.3, например, нельзя выполнить, потому что в указанном файле нет указанной строки. А то, что п.3 надо выполнять для совсем другого файла, новичку догадаться трудно...

Вы правы, спешил и не то написал... Но я считаю, что бездумно копипастить как то не хорошо.

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

Да, ошибся, это вставляется в simpla/IndexAdmin.php

 

Вы правы, спешил и не то написал... Но я считаю, что бездумно копипастить как то не хорошо.

А я бы сказал, что спешить не надо, а надо заботиться о качестве написанного. Сэкономленная Вами минута оборачивается не только часовыми потерями времени для пользователей на поиск Ваших ошибок и неточностей, но и потерями времени для Вас лично на дополнительную довольно бестолковую переписку. А неуклюжие оправдания типа "я спешил" напоминают классическое "я учил" из безоблачных детских лет, и никак не добавляют положительных элементов имиджу написавшего...

 

Вот еще совсем свежий подобный пример, возможно, там автор тоже куда-то спешил:

http://forum.simplacms.ru/topic/1335-%D0%BC%D0%BD%D0%BE%D0%B6%D0%B5%D1%81%D1%82%D0%B2%D0%B5%D0%BD%D0%BD%D0%BE%D0%B5-%D0%B7%D0%BD%D0%B0%D1%87%D0%B5%D0%BD%D0%B8%D0%B5-%D1%84%D0%B8%D0%BB%D1%8C%D1%82%D1%80%D0%B0/page-10?do=findComment&comment=65802

 

Как говорится, поспешишь - людей насмешишь...

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

Вот еще совсем свежий подобный пример, возможно, там автор тоже куда-то спешил:

http://forum.simplacms.ru/topic/1335-множественное-значение-фильтра/page-10#entry65802

 

Как говорится, поспешишь - людей насмешишь...

Корс да ты как говнюк поступаешь.

Автор (то есть я) написал вполне годную, рабочую статью, а ты вместо того чтобы проверить все - базар устраиваешь.

P.S. Да корс поспешишь людей насмешишь, вот меня ты точно насмешил своей глупостью.

Изменено пользователем Noxter
Ссылка на сообщение
Поделиться на другие сайты
  • 6 месяцев спустя...
  • 2 недели спустя...

Включите вывод ошибок PHP и пишите что за ошибки при сохранении... Ваши вопросы аналогичны, что я ща зайду на автофорум и буду кричать "все сделал, машина не заводится, хелп, помогите".

 

Что бы включить вывод ошибок, добавьте в файлы simpla/index.php после первой строки <?PHP следующее:

ini_set('display_errors', 'On');
error_reporting(E_ALL | E_STRICT);

 

Могу предположить что не сохраняет из-за:

$this->notify->email_comment_user($comment_id);

в файле CommentAdmin.php

 

Вы точно проделали пункт 4 из первого поста?

 

Попробуйте сохранить комментарий БЕЗ галочки об отправке уведомления.

Ссылка на сообщение
Поделиться на другие сайты
  • 2 месяца спустя...

Я еще не дошел до реализации ответа на комментарий и уведомления автору, для начала хотел сделать хотябы редактирование коммента, но ниче не сохраняется, хотя появляется сообщение "комментарий изменен", галочки  об отправке уведомления на странице редактирования у меня нет, вверху страницы выдает вроде ошибку 

Strict Standards: Creating default object from empty value in C:\web\OpenServer\domains\evotime\admin\CommentAdmin.php on line 11

 

Что это может значить? 

Или для функции редактирование обязательно должна быть реализована функция уведомления?

Изменено пользователем martinways
Ссылка на сообщение
Поделиться на другие сайты

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

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

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

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

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

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

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

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

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