Павел Романов

Павел Романов

С нами с 03 марта 2014; Место в рейтинге пользователей: #70
Павел Романов
20 марта 2024, 20:08
+2
Они шлют прямыми запросами на assets/components/ajaxform/action.php.
Сделайте сниппет chkbot:
<?php
$_SESSION['afchk'] = 1;
return true;

Добавьте его в &preHooks:
[[!AjaxForm?
&preHooks=`chkbot`
&hooks=`spam,email`
...
]]

А в файле assets/components/ajaxform/action.php на 23 строке добавьте:
if($_SESSION['afchk'] != 1){
    echo  $AjaxForm->success('Сообщение успешно отправлено.');
    die();
}
unset($_SESSION['afchk']);
Павел Романов
28 февраля 2024, 11:18
0
Есть системная настройка mse2_index_fields, где можно указать что индексировать.
Попробуйте оставить там только pagetitle:5 и переиндексируйте.
Павел Романов
20 февраля 2024, 12:07
0
Либо добавьте свой пакет в системную настройку extension_packages, либо используйте параметр loadModels.
И если в базе нет поля publishedon, то укажите сортировку по существующему полю:

{'pdoResources' | snippet : [
    'loadModels' => 'название пакета',
    'class' => 'Cities',
    'sortby' => '{ "id":"DESC" }'
]}
Павел Романов
15 февраля 2024, 14:25
+1
Да, естественно. Можно добавить в скрипт:
<?php
$tvid = 123; // ID TV-шки
$vendor = 'Производитель' // Название производителя
$template = 6; // ID шаблона товара

if(!function_exists('removeDirectory')){
    function removeDirectory($dir){
        if ($objs = glob($dir."/*")) {
            foreach($objs as $obj) {
                is_dir($obj) ? removeDirectory($obj) : unlink($obj);
            }
        }
        rmdir($dir);
    }    
}

$sql = "SELECT * FROM {$modx->getTableName('modTemplateVarResource')} WHERE tmplvarid = {$tvid}"; 
$q = $modx->prepare($sql);
$q->execute();
$tvs = $q->fetchAll(PDO::FETCH_ASSOC);
foreach($tvs as $tv) {
    if($tv['value'] != $vendor) continue; // если название не то, пропускаем
    if(!$resource = $modx->getObject('modResource', array('id' => $tv['contentid'], 'template' => $template)) continue; // если нет ресурса с таким ID и шаблоном, пропускаем
    $dir = MODX_ASSETS_PATH.'images/products/'.$tv['contentid'].'/';
    removeDirectory($dir);    
    $resource->remove(); // удаляем ресурс
}
Павел Романов
15 февраля 2024, 12:20
0
Все ID и классы оберток присутствуют?
По умолчанию должно быть так:
<div id="pdopage">
    <div class="rows">
        [[!pdoPage?
            /// параметры
        ]]
    </div>
    [[!+page.nav]]
</div>
Павел Романов
15 февраля 2024, 12:09
1
0
Что-то типа этого (бэкап базы только сделайте):
<?php
$tvid = 123; // ID TV-шки
$vendor = 'Производитель' // Название производителя
$template = 6; // ID шаблона товара

$sql = "SELECT * FROM {$modx->getTableName('modTemplateVarResource')} WHERE tmplvarid = {$tvid}"; 
$q = $modx->prepare($sql);
$q->execute();
$tvs = $q->fetchAll(PDO::FETCH_ASSOC);
foreach($tvs as $tv) {
	if($tv['value'] != $vendor) continue; // если название не то, пропускаем
   	if(!$resource = $modx->getObject('modResource', array('id' => $tv['contentid'], 'template' => $template)) continue; // если нет ресурса с таким ID и шаблоном, пропускаем
	$resource->remove(); // удаляем ресурс
}
Павел Романов
10 января 2024, 12:36
1
+1
В колонке назовите это поле как-нибудь иначе:


В рендере используйте реальное имя.
Если pdoTools установлен и поле называется «project», то так:
Павел Романов
22 ноября 2023, 16:36
0
А в коде страницы что (если Ctrl+U нажать)?
Павел Романов
22 ноября 2023, 15:04
0
А для чего тут pdoPage?
Просто используйте pdoSitemap с limit (остальные параметры тут не нужны):
{'pdoSitemap' | snippet  : [
    'limit' => 100,
]}
Ну и шаблон должен быть пустым.
Павел Романов
09 ноября 2023, 19:30
+1
Версия MODX 2.8.6?
Если да, то попробуйте это: modx.pro/news/24265#comment-140918

PS
Уже написали ))
Павел Романов
15 октября 2023, 10:36
0
Попробуйте так:
[[getImageList?
    &docid=`123` 
    &where=`{ "part-name:LIKE":" %***% " }` 
    &tpl=`tpl.part`
]]
123 — ID ресурса с TV migxTable
*** — критерий для отбора в поле Название

Чанк tpl.part
<div class="part-data">
  <h2>[[+part-name]]</h2>
  <p>Изображение заведения: <img src="[[+part-image]]"></p>
  <p>Адрес заведения: [[+part-adress]]</p>
</div>
Павел Романов
18 сентября 2023, 12:47
0
Автор — Павел Гвоздь.
Протестировать любое дополнение можно на тестовом тарифе Modhost.
Павел Романов
12 сентября 2023, 15:31
+1
В /core/components/console/files/
Павел Романов
02 августа 2023, 16:07
0
Вам нужно проверять стоит ли в определенных TV у родительского ресурса «1» и если стоит, то выводить их название?
  • Для чего получать все TV родителя?
  • Зачем прописывать текущему ресурсу родительские TV?

Сделайте как я написал выше — это универсальное решение.

Если требуется выводить не название TV а какой-то произвольный текст, то можете так:
<?php
$docid = $modx->getOption('docid', $scriptProperties, $resource->get('id'));
$tvs = json_decode($tvs,1);
$out = array();
foreach($tvs as $tv => $name){
	if(!$tvo = $modx->getObject('modTemplateVar', array('name' => trim($tv)))) continue;
	if(!$tvres = $modx->getObject('modTemplateVarResource', array('tmplvarid' => $tvo->get('id'),'contentid' => $docid, 'value' => 1))) continue;
	$out[] = $name;
}
return implode(', ', $out);

А в вызове указывайте для какой TV какой текст выводить:
[[checkTV?
    &tvs = `{ "tovar_forel_chekbox":"форель","tovar_shuka_chekbox":"щука","tovar_kit_chekbox":"кит" }`
    &docid=`[[*parent]]`
]]
Павел Романов
02 августа 2023, 11:50
0
Если сами TV-шки называются «есть щука», «есть форель» и «есть кит», то так:
<?php
$docid = $modx->getOption('docid', $scriptProperties, $resource->get('id'));
$tvs = explode(',', $tvs);
$out = array();
foreach($tvs as $tv){
	if(!$tvo = $modx->getObject('modTemplateVar', array('name' => trim($tv)))) continue;
	if(!$tvres = $modx->getObject('modTemplateVarResource', array('tmplvarid' => $tvo->get('id'),'contentid' => $docid, 'value' => 1))) continue;
	$out[] = $tvo->get('caption');
}
return implode(', ', $out);

Вызов один:
[[checkTV?
    &docid=`[[*parent]]` //если на дочерних
    &tvs = `tovar_forel_chekbox,tovar_shuka_chekbox,tovar_kit_chekbox`
]]
Павел Романов
03 июля 2023, 10:15
2
+4
Чтобы убрать атрибуты и заодно удалить слеши у одиночных тегов можно сделать плагин на событие onWebPagePrerender )):

<?php
if($modx->resource->get('content_type') == 1){
    $arr1 = array('type="text/css"', 'type="text/javascript"',' />','/>');
    $arr2 = array('','','>','>');
    $output = &$modx->resource->_output;
    $output = str_replace($arr1,$arr2,$output);    
}
Павел Романов
17 июня 2023, 10:53
0
Потому что в коде нет элементов с id, которые указаны в ссылках.
Павел Романов
26 мая 2023, 14:46
0
Добавьте на 20 строке:
<?php
//.......
foreach($tvs as $tv){
   	$a = json_decode($tv['value'], 1);
   	foreach($a as $i){
            $i['resource_id'] = $tv['contentid']; // вот это
   	    $array[] = $i;
   	}
}
//.......
В чанке используйте [[+resource_id]]