Skip to content

Instantly share code, notes, and snippets.

@FroggyWeb
Forked from webber12/Helper.php
Created April 26, 2026 18:58
Show Gist options
  • Select an option

  • Save FroggyWeb/64eeb298120e7f5a4709614e8331f891 to your computer and use it in GitHub Desktop.

Select an option

Save FroggyWeb/64eeb298120e7f5a4709614e8331f891 to your computer and use it in GitHub Desktop.
Helper example
<?php
namespace EvolutionCMS\Main;
//положить файл в папку core/custom/packages/Main/src/
//для использования в любом другом месте добавить use EvolutionCMS\Main\Helper;
use Illuminate\Support\Carbon;
use Illuminate\Support\Facades\Cache;
use Illuminate\Support\Facades\DB;
use Illuminate\Support\Str;
class Helper
{
public static function productTvList()
{
// для списков продуктов (в каталоге, в слайдере, в похожих продуктах, в новых продуктах)
// в общем для каких угодно списков, чтобы не прописывать 100 раз одно и то же
return 'image,price,oldprice,label';
}
public static function prepareProductList($data, $modx, $DL, $extDL)
{
//ну тут что-то можно написать про prepare DocLister
return $data;
}
public static function DocLister($key, $params, $lifetime = false)
{
//зачем писать api=1 в каждом вызове доклистера, если можно задать его один раз тут
$params['api'] = 1;
if($key) {
//если есть ключ - кэшируем, иначе - не кэшируем
if(empty($lifetime) || !is_numeric($lifetime)) {
//если время кэширования не задано - кэшируем "навсегда"
$arr = Cache::rememberForever($key, function() use($params){
$arr = [];
$json = evo()->runSnippet("DocLister", $params);
if(!empty($json)) {
$arr = json_decode($json, 1);
}
return $arr;
});
} else {
//иначе кэшируем "на время"
$arr = Cache::remember($key, $lifetime, function() use($params){
$arr = [];
$json = evo()->runSnippet("DocLister", $params);
if(!empty($json)) {
$arr = json_decode($json, 1);
}
return $arr;
});
}
} else {
//если ключа нет - не кэшируем
$arr = [];
$json = evo()->runSnippet("DocLister", $params);
if(!empty($json)) {
$arr = json_decode($json, 1);
}
}
return $arr;
}
public static function DLMenu($key, $params)
{
//аналогично и для DLMenu
$params['api'] = 1;
$arr = [];
if($key === false) {//не кэшируем
$json = evo()->runSnippet("DLMenu", $params);
if(!empty($json)) {
$arr = json_decode($json, 1);
if(!empty($arr[0]) && is_array($arr[0])) {
$arr = $arr[0];
} else if(is_array($arr)) {
$arr = $arr;
} else {
$arr = [];
}
}
} else {
$arr = Cache::rememberForever($key, function () use ($params) {
$arr = [];
$json = evo()->runSnippet("DLMenu", $params);
if (!empty($json)) {
$arr = json_decode($json, 1);
if (!empty($arr[0]) && is_array($arr[0])) {
$arr = $arr[0];
} else if (is_array($arr)) {
$arr = $arr;
} else {
$arr = [];
}
}
return $arr;
});
}
return $arr;
}
public static function plural($n, $forms = [ 'товар', 'товара', 'товаров' ]) {
//склонение
// Helper::plural($productCount)
// Helper::plural($reviewsCount, ['отзыв', 'отзыва', 'отзывов'])
$n = $n ?: 0;
return $n%10==1&&$n%100!=11?$forms[0]:($n%10>=2&&$n%10<=4&&($n%100<10||$n%100>=20)?$forms[1]:$forms[2]);
}
public static function webp($image, $options = '')
{
// если вдруг понадобилось преобразовать изображение в формат webp без всяких обрезок и пребразований
// сокращенная запись того же через thumb плюс фикс пустых options
// Helper::webp($image);
return !empty($image) ? evo()->runSnippet("phpthumb", [ 'input' => $image, 'options' => $options, 'webp' => 1 ]) : '';
}
public static function thumb($image, $options = '', $webp = false)
{
// чтобы долго не писать $modx->runSnippet и всякие параметры не перечислять
// плюс при желании можно быстро сменить со сниппета на хелпер Thumb
$params = [ 'input'=> $image, 'options' => $options ];
if($webp) {
$params['webp'] = 1;
}
return evo()->runSnippet("phpthumb", $params);
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment