31 июля 2015 г.

Иногда в голове крутится довольно много задач и разного рода заметки или несущественные события, связанные с работой в магазинах на базе OpenCart, просто выпадают из памяти. Многие эту проблему решают наклеиванием разноцветных стикеров на свои мониторы, другие ведут записи в ежедневниках, а особо педантичные ведут записи в специально предназначенном для этих целей программах.

Можно поступить гараздо проще - поместить на стартовую страницу административной панели OpenCart нечто вроде блокнота с автосохранением, куда можно было бы записывать все свои заметки (см. рисунок).

Рисунок 1. Блок заметок на стартовой странице административной панели OpenCart.

Решение простое, но с элементом защиты информации, т.е. с шифрованием в обычный текстовый фацл. Ключ шифрования задаётся в настройках магазина. Автосохранение после внесения изменений по событию onblur.

Ниже приведена пошаговая инструкция для реализации этого решения на практике:

1. В языковых файлах ./admin/language/russian/common/home.php и ./admin/language/english/common/home.php добавить строки $_['text_notes'] = 'Заметки'; $_['text_notes_saving'] = 'Сохранение...'; и $_['text_notes'] = 'Notes'; $_['text_notes_saving'] = 'Saving...'; соответственно.

2. В файле-контроллере ./admin/controller/common/home.php после строки $this->data['text_statistics'] = $this->language->get('text_statistics'); добавить строки:
$this->data['text_notes'] = $this->language->get('text_notes');
$this->data['text_notes_saving'] = $this->language->get('text_notes_saving');

2.1 В этом же файле перед строкой $this->data['breadcrumbs'] = array(); добавить следующий блок кода:

$file = DIR_LOGS . 'notes.txt';
if (file_exists($file)) {
$contents = file_get_contents($file, FILE_USE_INCLUDE_PATH, null);
$iv_size = mcrypt_get_iv_size(MCRYPT_CAST_256, MCRYPT_MODE_CBC);
$iv = substr($contents, -$iv_size);
$this->data['notes'] = openssl_decrypt(substr($contents, 0, -$iv_size), "AES-256-CBC", $this->config->get('config_encryption'), 0, $iv);
} else {
$this->data['notes'] = '';
}

2.2 Здесь же после функции permisson добавить следующий код функции:

public function notes() {
if ($this->request->server['REQUEST_METHOD'] == 'POST' && !empty($this->request->post['text'])) {
$iv_size = mcrypt_get_iv_size(MCRYPT_CAST_256, MCRYPT_MODE_CBC);
$iv = mcrypt_create_iv($iv_size, MCRYPT_RAND);
$contents = openssl_encrypt($this->request->post['text'], "AES-256-CBC", $this->config->get('config_encryption'), 0, $iv) . $iv;
file_put_contents(DIR_LOGS . 'notes.txt', $contents);
}
}

3. В файле-шаблоне ./admin/view/template/common/home.tpl после тегов </table></div></div> добавить:

<div class="notes">
<div class="dashboard-heading"><?php echo $text_notes; ?></div>
<div class="dashboard-content">
<textarea id="notes" wrap="off" style="width: 99%; height: 300px; padding: 5px; border: 1px solid #ccc; background: #FFFFE1; overflow: scroll;" onblur="saveNotes(this.value)"><?php echo $notes; ?></textarea>
</div>
 </div>

3.1 В этом же файле до строки <?php echo $footer; ?> разместить следующие блоки кода:

<script type="text/javascript" src="view/javascript/ckeditor/ckeditor.js"></script>
<script type="text/javascript"><!--
var notes_content = document.getElementById('notes').value;
function saveNotes(content) {
if (notes_content != content) {
$('.notes .dashboard-heading').text('<?php echo $text_notes_saving; ?>');
$.ajax({
url: 'index.php?route=common/home/notes&token=<?php echo $token; ?>',
type: 'post',
data: {text: content}
}).done(function() {
notes_content = content;
$('.notes .dashboard-heading').delay(500).text('<?php echo $text_notes; ?>');
});
}
}
//--></script>
<script type="text/javascript"><!--
CKEDITOR.replace('notes', {
toolbar :
[
{ name: 'paragraph', items : [ 'NumberedList','BulletedList' ] },
{ name: 'basicstyles', items : [ 'Bold','Italic','Underline'] },
{ name: 'tools', items : [ 'Strike','-','TextColor','BGColor' ] }
],
removePlugins: 'elementspath'
});
CKEDITOR.instances['notes'].on('blur', function() {
saveNotes(this.getData());
});
//--></script>

4. Последний штрих касается положения контейнера заметок относительно других. Для этого в файле ./admin/view/stylesheet/stylesheet.css добавим стандартное смещение: .notes { margin-top: 20px; }.

Стоит отметить, что заметки будут показаны любому авторизованному пользователю. Если их необходимо скрыть от рядовых сотрудников, то можно использовать доработку под пунктом 13.

Это решение может получить продолжение, следите за обновлениями и комментариями. Если необходимо какое-либо дополнение к данному решению или требуется его реализация на базе vQmod, то автор готов помочь в рамках существующих услуг.

3 комментария:

  • RSS
  • Twitter
  • Youtube