Jump to content

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


Recommended Posts

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

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

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

Link to post
Share on other sites
  • 3 weeks later...

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

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

Link to post
Share on other sites
  • 4 months later...

Добрый день

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

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

Link to post
Share on other sites
  • 2 weeks later...

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

<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

Link to post
Share on other sites
  • 7 months later...

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

 

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

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

Link to post
Share on other sites
  • 4 weeks later...

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

 

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

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) можно пропустить!

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

Link to post
Share on other sites

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

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

Link to post
Share on other sites

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

Link to post
Share on other sites

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

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

 

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

'CommentsAdmin' => 'comments',

Link to post
Share on other sites

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

 

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

'CommentsAdmin' => 'comments',

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

 

 

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

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

Link to post
Share on other sites

Да, ошибся, это вставляется в 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

 

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

Link to post
Share on other sites

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

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

 

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

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

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

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

Edited by Noxter
Link to post
Share on other sites
  • 6 months later...
  • 2 weeks later...

Включите вывод ошибок 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 из первого поста?

 

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

Link to post
Share on other sites
  • 2 months later...

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

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

 

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

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

Edited by martinways
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...