Уникальные значения ТВ
<?php
if ((!isset($tvid)) || ($tvid=='')) return;
$out = '';
$r = $modx->db->query('Select distinct(value) from '.$modx->getFullTableName('site_tmplvar_contentvalues').' where tmplvarid='.$tvid.' order by value asc');
while($row = $modx->db->getRow($r)) $out.= str_replace('',$row['value'],$tpl);
return $out;
//[ [UniqueCity? &tvid=`20` &tpl=`<option value="[ +value+]"></option>`]]
FaviconGenerator
<?php
$out='';
$bg = isset($bg) ? $bg : "FFFFFF00";
//apple
$sizes = array('57x57','144x144','72x72','144x144','60x60','120x120','76x76','152x152');
foreach ($sizes as $size){
$as = explode('x',$size);
$out.='<link rel="apple-touch-icon-precomposed" sizes="'.$size.'" href="'.$modx->runSnippet('phpthumb',array('input'=>$img,'options'=>'w='.$as[0].',h='.$as[1].',f=png,far=C,bg='.$bg)).'"/>'.PHP_EOL;
}
//classic
$sizes = array('32x32','16x16','96x96','128x128','196x196');
foreach ($sizes as $size){
$as = explode('x',$size);
$out.='<link rel="icon" type="image/png" sizes="'.$size.'" href="'.$modx->runSnippet('phpthumb',array('input'=>$img,'options'=>'w='.$as[0].',h='.$as[1],',f=png,far=C,bg='.$bg)).'"/>'.PHP_EOL;
}
// MS
$out.='<meta name="msapplication-TileColor" content="#FFFFFF" />'.PHP_EOL;
$out.='<meta name="msapplication-TileImage" content="'.$modx->runSnippet('phpthumb',array('input'=>$img,'options'=>'w=144,h=144,f=png,far=C,bg='.$bg)).'" />'.PHP_EOL;
$sizes = array('70x70','150x150','310x310');
foreach ($sizes as $size){
$as = explode('x',$size);
$out.='<meta name="msapplication-square'.$size.'logo" content="'.$modx->runSnippet('phpthumb',array('input'=>$img,'options'=>'w='.$as[0].',h='.$as[1].',f=png,far=C,bg='.$bg)).'"/>'.PHP_EOL;
}
//Generate .ico
if ($notico!=''){
$out.='<link rel="shortcut icon" href="'.$modx->runSnippet('phpthumb',array('input'=>$img,'options'=>'w=16,h=16,f=ico,far=C,bg='.$bg)).'" type="image/x-icon">'.PHP_EOL.'
<link rel="icon" href="'.$modx->runSnippet('phpthumb',array('input'=>$img,'options'=>'w=16,h=16,f=ico,far=C,bg='.$bg)).'" type="image/x-icon">';
}
return $out;
//[ [FaviconGenerator? &img=`[ (client_company_favicon)]`]]
Удаление всех полей в mm_rules
mm_hideFields('longtitle,description,link_attributes,introtext,menutitle,content,alias,parent,menuindex,show_in_menu', '', '19');
mm_hideTabs('settings', '', '19');
Выводт статистической информации на странице
<!-- Memory: [ ^m^], MySQL: [ ^qt^], [ ^q^] request(s), PHP: [ ^p^], total: [ ^t^], document retrieved from [ ^s^] -->
Assets - постоянное обновление файлов js/css
<?php
if ((!isset($files) || empty($files)) && (!isset($folders) || empty($folders))){
return '';
}
if (!function_exists('set_assets_files')){
function set_assets_files($files,$exceptions){
$output = '';
if (!$files) return;
if (is_string($files)) $files = array_map('trim',array_filter(explode(',',$files)));
foreach($files as $file) {
$file = trim($file);
if (In_array($file,$exceptions)) continue;
$filename = MODX_BASE_PATH . $file;
if (file_exists($filename)){
$ext = pathinfo($filename, PATHINFO_EXTENSION);
$time = file_exists($filename) ? filectime($filename) : 0;
switch($ext) {
case 'js':
default:
$output .= '<script src="'.$file.'?v='.$time.'"></script>';
break;
case 'css':
$output .= '<link rel="stylesheet" href="'.$file.'?v='.$time.'">';
break;
}
}
}
return $output;
}
}
$output = '';
if ((isset($exceptions)) && (!empty($exceptions))){
$exceptions = array_map('trim',array_filter(explode(',',$exceptions)));
} else $exceptions = array();
if ((isset($files)) && !empty($files)){
$output.=set_assets_files($files,$exceptions);
}
if ((isset($folders)) && !empty($folders)){
$folders = explode(',',$folders);
foreach($folders as $folder) {
$dir = scandir(MODX_BASE_PATH.$folder);
$files = [];
foreach($dir as $file){
if (($file!='.') && ($file!='..')) $files[] = $folder.'/'.$file;
}
}
$output.=set_assets_files($files,$exceptions);
}
return $output;
// [ ! assets? &files=`/site/css/main.min.css` &folders=`assets/`! ]
MODxAPI - работа с документами
<?php
include_once(MODX_BASE_PATH."assets/lib/MODxAPI/modResource.php");
//Создание
$doc = new modResource($modx);
$doc->create($fields);
$id = $doc->save(true, false);
//Редактирование
$doc = new modResource($modx);
$doc->edit($id);
foreach($fields as $key=>$val) $doc->set($key, $val);
$doc->save(true, false);
Вызов evo из внешненго файла:
<?php
define('MODX_API_MODE', true);
define('IN_MANAGER_MODE', false);
include_once("index.php");
$modx->db->connect();
if (empty ($modx->config)) {
$modx->getSettings();
}
CheckSpamTime
<?php
if ($_SESSION['now'])
{
$_SESSION['lt'] = $_SESSION['now'];
}
$_SESSION['now'] = microtime(true);
if (!function_exists('checkSpamTime'))
{
function checkSpamTime(&$fields)
{
if (!preg_match('/[\p{Cyrillic}]/u', $fields['message'])) exit();
$time = $_SESSION['now'] - $_SESSION['lt'];
if (($time<2) or ($time>1440)) exit(); //Здесь проверяем сколько секунд прошло с момента точки входа. 5 - с запасом, можно ставить и единицу
}
}
// в eForm вставляем &eFormOnBeforeMailSent=`checkSpamTime`
Текущий алисас документа
$modx->documentIdentifier;
Событие загрузки страницы JS
document.addEventListener('DOMContentLoaded', function(){
});
Отправка формы AJAX-ом
$(document).on("submit",".eform form",function(e){
e.preventDefault();
var formid = '#'+$(this).closest('.eform').attr('id');
console.log(formid);
var err = false;
$(formid+' form [required="required"]').each(function() {
if (!$(this).val()){
$(this).addClass('error');
err = true;
}
});
if (err) {
setTimeout(function(){
$('.error').removeClass('error');
}, 3000);
return;
}
var obj = $(this);
var formData = new FormData();
$.each($(obj).find("input[type='file']"), function(i, tag) {
$.each($(tag)[0].files, function(i, file) {
formData.append(tag.name, file);
});
});
var params = $(obj).serializeArray();
$.each(params, function (i, val) {
formData.append(val.name, val.value);
});
$.ajax({
type: 'post',
url: location.href,
data: formData,
processData: false,
contentType: false,
success: function(result){
var data = $(result).filter(formid).html();
$(formid).html(data);
}
});
});
Оставить комментарий
только без мата, пожалуйста)