Сниппеты

Частоиспользуемые шаблоны, решающие некоторые задачи

1. Включение и отключение режима отладки через get параметр

Очень удобно в процессе тестирования. В случае нахождения ошибки у заказчика - можно попросить перейти в режим отладки и достать происходящие внутри запросы

if (isset($_GET['debug']))$_SESSION['debug']=$_GET['debug'];
if (!empty($_SESSION['debug']))c\core::$debug=$_SESSION['debug'];

2. Сброс кеша всех статичных файлов

c\core::$version=time();

3. Преборазование даты полученой через mysql в российскую локализацию в компоненте c\tables

c\tables::$header['date_create']['fill']=function($row,$field){
	return date('d.m.Y H:i:s',strtotime($row[$field]));
};

4. Подсветка строки таблицы в зависимости от значений

c\tables::$row_attributes['status']=function($row){
	return $row['status'];
};
tr[status="1"]{ /*Статус новый*/
    background-color: #fe9;
}
tr[status="2"]{ /*Статус старый*/
    background-color: #9ef;
}

5. Отображение таблицы по структуре базы данных

c\tables::$header=c\datawork::describeToTableHeader(c\dbwork::describeTable($table));

6. Обработка данных формы

Правильный обработчик отправки данных через форму

В данном примере $data - начальное значение полей формы

if (c\forms::isSubmit()){
	c\forms::setData($data);
	c\forms::setDataForce();
	try {
		$data=c\forms::getData();
		if (c\forms::isInvalid($data,true))throw new Exception(c\translate::t('Form invalid'));
		actionWith($data);
		c\error::addSuccess(c\translate::t('Successfully saved'))->redirect();
	} catch (Exception $exc) {
		c\error::addError(c\translate::t('Error on submit').($exc->getMessage()?': '.$exc->getMessage():''));
	}
}

7. Редирект, если адрес прописан без / на конце

//сразу после c\mvc::init();
if (c\mvc::getParamAsString() && substr(c\mvc::getParamAsString(),-1)!='/')c\mvc::redirect('/'.c\mvc::getParamAsString().'/');

8. Главная заготовка skeleton application

<?php
require("core/3.5/global-config/corep.php");
c\mvc::init(__DIR__);
do @include c\mvc::content(); while (c\mvc::check());
c\mvc::header();
require c\mvc::viewPage();
c\mvc::footer();

9. Построение Элемента TreeGrid из таблицы с плоской структурой

<?php
c\tables::$header=array(
    'HIERARHY_ID'=>array('name'=>'ID','sort'=>false),
    'NAME'=>array(
        'name'=>'Наименование',
        'sort'=>false,
        'fill'=>function($row){ return ($row['has_subtree']?'<span onclick="toggleSubtree(this);event.stopPropagation();" class="glyphicon glyphicon-chevron-down"></span>':''). $row['NAME']; },
        'attributes'=>array('class'=>function($row){ return 'name level-'.min($row['level'],10); }),
        ),
    //... Список остальных колонок
);
$sql="SELECT HIERARHY_ID,PARENT_HIERARHY_ID, NAME,*
    from table 
    order by PARENT_HIERARHY_ID";
$rs=c\db::ea($sql);
$tree=  c\datawork::tree($rs, 'HIERARHY_ID', 'PARENT_HIERARHY_ID','children',0);
c\tables::$data = c\datawork::flatTree($tree);
$table_params=array(
    'row_attributes'=>array(
        'group'=>function($row){ return $row['HIERARHY_ID']; },
        'level'=>function($row){ return $row['level'];},
    ),
);
function toggleSubtree(object){
    if ($(object).toggleClass('glyphicon-chevron-down glyphicon-chevron-right'));
    var tr=$(object).closest('tr');
    var level=parseInt(tr.attr('level'));
    if ($(object).is('.glyphicon-chevron-down')){
        // список должен раскрыться
        tr.nextAll().each(function($key,item){
            var curlevel=parseInt($(item).attr('level'));
            if (curlevel<=level)return false;
            if (curlevel==level+1)$(item).show();;
        });
    }else{
        // список должен закрыться
        tr.nextAll().each(function($key,item){
            var curlevel=$(item).attr('level');
            if (curlevel<=level)return false;
            $('.name .glyphicon',item).removeClass('glyphicon-chevron-down').addClass('glyphicon-chevron-right');
            $(item).hide();
        });
    }
}

10. Ограничение на выполнение функции не чаще чем раз в $n секунд

$n=60;
// $n seconds timeout protection
$time = c\cache::get('timeout', function() {
    return time();
}, $n);
if (time() < $time)do_something();

11. Генерация кеша на сегодня до конца дня

$var=c\cache::get('key','callback',   strtotime('tomorrow')   -time());

12. Генерация api с возможностью указывать методы в компонентах и категории с api

if (c\mvc::controllerPageInstant(__DIR__)){
    c\mvc::controllerPage(__DIR__);
}else{
    c\mvc::virtualRoute('_api');
}
c\mvc::layoutRemove();
c\core::$data['error_callback']=function($text,$type){
	return true;
};
header('Content-Type: application/json');

13. Кеширование шаблонов

<?=c\cache::get('your-template-cache-key', function(){
    ob_start();
    ?>
<div>
...
</div>
<? return ob_get_clean(); });?>

14. Сортировка модели в указаном порядке

$rs=[5,22,14,23];
$goods = new good();
$goods->whereIn('id',$rs);
if ($rs)$goods->order('field(id,'.implode(',',$rs).')');

15. Пост обработка вывода html

// in /index.php
function myCallback($buffer){
	return $buffer;
}

do @include c\mvc::content();
while (c\mvc::check());
c\mvc::header();
ob_start('myCallback'); // add this
require c\mvc::viewPage(false);
ob_end_flush(); // and this
c\mvc::footer();

Создано при помощи сервиса Core CMS