Обратный звонок Simpla CMS

Открываем phpMyAdmin и делаем SQL запрос:

CREATE TABLE IF NOT EXISTS `s_callbacks` (
  `id` bigint(20) NOT NULL,
  `date` datetime NOT NULL,
  `name` varchar(255) NOT NULL,
  `phone` varchar(255) NOT NULL,
  `message` text NOT NULL,
  `processed` tinyint(1) NOT NULL DEFAULT '0'
) ENGINE=MyISAM AUTO_INCREMENT=5745 DEFAULT CHARSET=utf8;

ALTER TABLE `s_callbacks`
  ADD PRIMARY KEY (`id`);
ALTER TABLE `s_callbacks`
  MODIFY `id` bigint(20) NOT NULL AUTO_INCREMENT,AUTO_INCREMENT=5745;

Далее открываем файл /api/Simpla.php и добавляем ~40 строка:

'callbacks'	 => 'Callbacks',

Далее открываем файл /api/Managers.php и добавляем ~16 строка:

, 'callbacks'

Далее открываем файл /view/IndexView.php и добавляем ~33 строка:

if($this->request->method('post') && $this->request->post('callback')) {
            $callback = new stdClass();
            $callback->phone        = $this->request->post('phone');
            $callback->name         = $this->request->post('name');
            $this->design->assign('callname',  $callback->name);
            $this->design->assign('callemail', $callback->phone);
            $this->design->assign('call_sent', true);
            $callback_id = $this->callbacks->add_callback($callback);
            $this->callbacks->email_callback_admin($callback_id);
        }

Далее открываем файл /simpla/design/html/comments.tpl и добавляем ~строка 6:

{if in_array('callbacks', $manager->permissions)}<li><a href="index.php?module=CallbacksAdmin">Заказ обратного звонка</a></li>{/if}

Далее открываем файл /simpla/design/html/feedbacks.tpl и добавляем ~строка 6:

{if in_array('callbacks', $manager->permissions)}<li><a href="index.php?module=CallbacksAdmin">Заказ обратного звонка</a></li>{/if}

Далее создаем файл /simpla/design/html/callbacks.tpl с таким содержимым:

{* Вкладки *}
{capture name=tabs}
    {if in_array('comments', $manager->permissions)}
        <li><a href="index.php?module=CommentsAdmin">Комментарии</a></li>
    {/if}
		<li class="active"><a href="index.php?module=ReviewsAdmin">Отзывы</a></li>
    {if in_array('feedbacks', $manager->permissions)}
        <li><a href="index.php?module=FeedbacksAdmin">Обратная связь</a></li>
    {/if}
    <li class="active"><a href="index.php?module=CallbacksAdmin">Заказ обратного звонка</a></li>
{/capture}

{* Title *}
{$meta_title='Заказ обратного звонка' scope=parent}

<div id="header">
	{if $callbacks_count}
	<h1>{$callbacks_count} {$callbacks_count|plural:'заказ':'заказа':'заказов'}</h1> 
	{else}
	<h1>Нет заказов</h1> 
	{/if}
</div>

<div id="main_list">
    {include file='pagination.tpl'}
    {if $callbacks}
        <form id="list_form" method="post">
            <input type="hidden" name="session_id" value="{$smarty.session.id}"/>
            <div id="list" class="sortable">
                {foreach $callbacks as $callback}
                    <div class="{if !$callback->processed}unapproved{/if} row">
                        <div class="checkbox cell">
                            <input type="checkbox" id="{$callback->id}" name="check[]" value="{$callback->id}"/>
                            <label for="{$callback->id}"></label>
                        </div>
                        <div class="name cell">
                            <div class='comment_name'>
                                {$callback->name|escape}
                                <a class="approve" href="#">Обработать</a>
                            </div>
                            <div class='comment_text'>
                                Телефон: {$callback->phone|escape|nl2br}
                            </div>
                            <div class='comment_text'>
                                Сообщение: {$callback->message|escape|nl2br}
                            </div>
                            <div class='comment_info'>
                                Заявка отправлена {$callback->date|date} в {$callback->date|time}
                            </div>
                        </div>
                        <div class="icons cell">
                            <a href='#' title='Удалить' class="delete"></a>
                        </div>
                        <div class="clear"></div>
                    </div>
                {/foreach}
            </div>

            <div id="action">
                <label id='check_all' class='dash_link'>Выбрать все</label>
                <span id=select>
                <select name="action">
                    <option value="processed">Отметить как обработанные</option>
                    <option value="delete">Удалить</option>
                </select>
                </span>
                <input id='apply_action' class="button_green" type=submit value="Применить">
            </div>
        </form>
    {else}
        Нет сообщений
    {/if}
    {include file='pagination.tpl'}
</div>
{literal}
<script>
$(function() {

	// Раскраска строк
	function colorize()
	{
		$("#list div.row:even").addClass('even');
		$("#list div.row:odd").removeClass('even');
	}
	// Раскрасить строки сразу
	colorize();
	
	// Выделить все
	$("#check_all").click(function() {
		$('#list input[type="checkbox"][name*="check"]').attr('checked', $('#list input[type="checkbox"][name*="check"]:not(:checked)').length>0);
	});	

	// Удалить 
	$("a.delete").click(function() {
		$('#list input[type="checkbox"][name*="check"]').attr('checked', false);
		$(this).closest(".row").find('input[type="checkbox"][name*="check"]').attr('checked', true);
		$(this).closest("form").find('select[name="action"] option[value=delete]').attr('selected', true);
		$(this).closest("form").submit();
	});
	
	// Обработать
	$("a.approve").click(function() {
		var line        = $(this).closest(".row");
		var id          = line.find('input[type="checkbox"][name*="check"]').val();
		line.addClass('loading_icon');
		$.ajax({
			type: 'POST',
			url: 'ajax/update_object.php',
			data: {'object': 'callback', 'id': id, 'values': {'processed': 1}, 'session_id': '{/literal}{$smarty.session.id}{literal}'},
			success: function(data){
				line.removeClass('loading_icon');
                line.removeClass('unapproved');
			},
			dataType: 'json'
		});	
		return false;	
	});
	
	// Подтверждение удаления
	$("form#list_form").submit(function() {
		if($('select[name="action"]').val()=='delete' && !confirm('Подтвердите удаление'))
			return false;	
	});

});

</script>
{/literal}

И тут же добавим ещё один файл с шаблоном письма на почту email_callback_admin.tpl с таким содержимым:

{$subject="Заявка на обратный звонок от `$callback->name|escape`" scope=parent}
<h1 style="text-align: center;font: 18px;background: #41ade2;color: #fff;padding: 5px; width: 800px;">
    Заявка на обратный звонок от {$callback->name|escape}
</h1>
<table cellpadding=6 cellspacing=0 style='border-collapse: collapse;border: 2px solid #2c6f95;'>
   <tr style="border-bottom: 2px solid #2c6f95;">
    <td style='padding:6px; width:170px; background-color:#41ade2; border:1px solid #e0e0e0;font-family:arial;'>
      Имя
    </td>
    <td style='padding:6px; width:330px; background-color:#ffffff; border:1px solid #e0e0e0;font-family:arial;'>
      {$callback->name|escape}
    </td>
  </tr>
   <tr style="border-bottom: 2px solid #2c6f95;">
    <td style='padding:6px; width:170px; background-color:#41ade2; border:1px solid #e0e0e0;font-family:arial;'>
      Телефон
    </td>
    <td style='padding:6px; width:330px; background-color:#ffffff; border:1px solid #e0e0e0;font-family:arial;'>
     {$callback->phone|escape}
    </td>
  </tr>
</table>

Чтобы вывести в шаблоне:

<form id="callback_form" class="form" method="post">
    <div class="callback_title">Заказ обратного звонка</div>
    <div class="form_group">
        <label for="callback_name">Ваше имя</label>
        <input id="callback_name" class="form_input" type="text" name="name" data-format=".+" data-notice="Введите имя" value="" />
    </div>
    <div class="form_group">
        <label for="callback_phone">Ваш телефон</label>
        <input id="callback_phone" class="form_input" type="text" name="phone" data-format=".+" data-notice="Введите № телефона" value="" maxlength="255" />
    </div>
    <input class="button" type="submit" name="callback" value="Заказать" />
</form>
Поделиться
Отправить
2018   simplacms
Популярное