Всего 123 793 комментария

Павел Романов
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(); // удаляем ресурс
}
alexandr.skyrda
15 февраля 2024, 14:12
0
добрый день, спасибо за ответ, а проблема с изображениями в галерее тоже будет как здесь https://modx.pro/help/22639
что они не удаляются?
myData
15 февраля 2024, 13:49
0
Да, но после этого редактор не запускается вообще

Uncaught TypeError: CKEDITOR.tools.object.keys is not a function
    at Object.setHighlighter (plugin.js?t=1.4.5-pl:51:28)
    at Object.afterInit (plugin.js?t=1.4.5-pl:134:10)
    at Object.<anonymous> (ckeditor.js?v=1.4.5-pl:4830:45)
    at e (ckeditor.js?v=1.4.5-pl:4488:48)
    at Array.y (ckeditor.js?v=1.4.5-pl:4493:105)
    at x (ckeditor.js?v=1.4.5-pl:4498:64)
    at ckeditor.js?v=1.4.5-pl:4511:41
Денис Усманов
15 февраля 2024, 13:15
0
В сис. настройках в ckeditor.extra_plugins дописывал codesnippet?
Pandemic
15 февраля 2024, 12:26
0
Да, оно работало до того как я добавил Человека понятную навигацию, аякс загрузка работала, после уже не работает именно аякс загрузка, если перейти по ссылке вручную то страницу отработает как положено.
Павел Романов
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(); // удаляем ресурс
}
Николай Савин
15 февраля 2024, 07:33
0
Там на компоненте уже года два пометка на удаление стоит.
Насколько я знаю, Женя давно задумал seoFilter Pro и опять же есть некое наитие, что работа скоро начнется.
myData
14 февраля 2024, 23:24
0
Спасибо все встало без проблем. Крутая подборка.
Но есть одни вопрос как поставить плагин
Code Snippet
уже все перерыл не появляется иконка.

Спасибо
Алексей Смирнов
14 февраля 2024, 21:49
0
Я бы подошел к вопросу с другой стороны.
А в какой момент вам нужны эти данные?
Если просто запустить какой-то отдельный скрипт и сделать свои дела — одно.
Если вам нужно взаимодействовать с объектами MODX и, например, проверять уровень привелегий, доступов и прочей ереси, то через MODX.
А сниппет — это тот же php, но вызванный где-то в середине страницы. В этом случае можно сразу вызвать в сниппете. Если, допустим данные которые будут отображены снипетом очень долго получаете, то иногда люди делают через ajax загрузку, чтобы сэкономить время загрузки основной страницы.
Те вы понимаете, что просто отвечать на ваш вопрос не получиться, необходимо знать еще и место и «куда чего-данные».
Сергей
14 февраля 2024, 17:38
0
так а где пакет-то купить можно?
Pandemic
14 февраля 2024, 11:57
0
Получилось, можете ещё подсказать при клике на ссылку, обычную ни одного атрибута нет, не переходит, клик просто игнорируется, если перейду по ссылке вручную, то всё работает, но при ручном клике именно на ссылку не работает.

В консоли ничего нет, в админке тоже пусто.
Наумов Алексей
14 февраля 2024, 11:32
+1
Уберите Fenom синтаксис из значения параметра pageLinkScheme, напишите как в доке.

Значение параметра не обрабатывается парсером, а просто заменяются плейсхолдеры.
Володя
14 февраля 2024, 11:05
+1
Все верно, но никто же не застрахован что в какой то момент времени твой сайт не подвергнется скажем атаке ботов и запрос без лимита будет вызывать задержки при работе сайте.
пока идет запрос удаления новый пользователь не получит новый идентификатор сессии, уже действующий пользователь тоже словит задержку и будет нервно курить и в итоге закроет сайт.

Так вот чтобы не было тормозов я и решил ввести limit, нам же не принципиально очистить таблицу за один проход.

А в smartSessions медленная работа, думается, обусловлена LIKE поиском по колонке user_agent во время очистки и отсутствием индекса))) нужно добавить
да, это ускорит удаление, но не сильно, в случае с большим кол-ом данных думаю будут те же тормоза что я описал выше.
Наумов Алексей
14 февраля 2024, 10:53
+1
Чуть может не понял, но приведу рассуждения. Поправь, если я не прав.

Рассматриваю ситуацию, когда базе у тебя 2 000 000 сессий, из них 1 400 000 (70%) — эт боты.
Т.е. симулируется картина, что либо сессии продолжительное время вообще не очищались и накопились, либо у сайта ну очень высокая посещаемость.

В первом случае, если мы поставим limit 5000, то эти сессии удалятся за 280 подходов. Ну а далее у нас будет регулярно все это работать и 2 млн сессий в базе уже не будет. По идее мы должны так сконфигурировать сервер, чтобы каждый раз при срабатывании gc() устаревало не более 5000 сессий, иначе они начнут накапливаться.

Во втором случае (если бешеная посещаемость), хватит ли лимита в 5000 для того, чтобы удалить старые сессии? А если нет — то мы должны повысить лимит.

И у меня возник вопрос: какая разница в обоих случаях, есть лимит или нет? Кроме первых 280 проходов, которые без лимит выполнились за 1 раз (напомню в нестандартной ситуации, что сессии ранее не очищались).

p.s. про smartSessions:
А в smartSessions медленная работа, думается, обусловлена LIKE поиском по колонке user_agent во время очистки и отсутствием индекса))) нужно добавить. Я когда это писал все — тормозов особо не заметил, посещаемость сайтов моих была ну до 1000 человек в сутки. Но вообще, поле is_bot реально лучше, ибо в этом случае LIKE поиск убирается, остается просто быстрый поиск по колонке tinyint. В общем если руки дойдут — изменю алгоритм.
Кровельный
14 февраля 2024, 10:34
0
Плохая практика отвечать вопросом на вопрос. Артур, пожалуйста пишите по существу! У нас версия старая: MODX Revolution 2.8.3-pl.
Николай Савин
14 февраля 2024, 08:54
0
SeoFilter надеюсь будет работать и с FlatFilters.
Я тебя умоляю, @Евгений Шеронов даже не знает о существовании твоего компонента. И под него что-то делать точно не будет. Он вообще с MODX не работает.
Артур Шевченко
13 февраля 2024, 22:06
0
Проблему с core я знаю, только не знаю как пофиксить, надо сборщик ковырять.

мне кажется большинство их меняет, с целью безопасности
Переименовывать папку с асетами для безопасности это нонсенс, к ней в любом случае есть доступ с фронта, как её не назови.

Что касается развития, то оно будет в ближайшие недели, только только ни функционала поиска, ни функционала SeoFilter не будет. Поиск в mSearch2 хорошо работает. SeoFilter надеюсь будет работать и с FlatFilters.