Логирование отправляемых данных форм. Modx Evolution

Обсуждали с коллегами как правильно обрабатывать формы с большим количеством полей. К единому знаменателю не пришли, но у меня родилась идейка как эти данные быстро и безболезненно сохранять в табличке. Решение как всегда через плагин (обожаю Modx за них безумно=)).
Плагин вешаем на OnLoadWebPageCache и OnBeforeLoadDocumentObject
В форму, данные которой хотим сохранить, вставляем

<input type="text" name="tblname" value="feadback" style="display:none;"/>

 где значение — произвольное название формы. Ну и сам плагин:

 

//<?php
if (isset($_POST[tblname]))
{
$default = 'varchar(256)'; // Здесь задаем умолчание для типа полей
$config = array('comment'=>'varchar(256)'); //Здесь можем задать кастомные типы полей
$tbl = $modx->getFullTableName('log_'.$_POST['tblname']);
unset($_POST['tblname']);
$sql = 'CREATE TABLE IF NOT EXISTS '.$tbl.' (
`id` int(11) NOT NULL AUTO_INCREMENT,';

foreach ($_POST as $key => $poh)
{

if ($config[$key]) $sql.=' `'.$key.'` '.$config[$key].', ';
else $sql.=' `'.$key.'` '.$default.', ' ;

}
$sql.='PRIMARY KEY (`id`),
UNIQUE KEY `id` (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 AUTO_INCREMENT=1 ;';
$modx->db->query($sql);
$arr = array();
foreach ($_POST as $key=>$val) $arr[$key] = $modx->db->escape($val);
$modx->db->insert($arr,$tbl);
}

Проверил на двух сайтах — работает))

Следующая работа

Оставить комментарий