Всего 123 758 комментариев

Александр Туниеков
24 июля 2024, 21:56
0
Поправил немного
<?php
$id = $input;
if (empty($id)) {
    $resource = $modx->resource;
} else {
    $resource = $modx->getObject('modResource', ['id' => intval($id)]);
}
if(!$resource) return [];

$out = $resource->toArray();
// чтоб страница не упала в рекурсию
unset($out['content']);

$id = $resource->id;
$sql = "
    SELECT IF(tvr.value != \"\", tvr.value, tv.default_text) AS tv_value, tv.name, tv.type
    FROM {$modx->getTableName('modTemplateVarResource')} tvr
    LEFT JOIN {$modx->getTableName('modTemplateVar')} tv
    ON tv.id = tvr.tmplvarid
    LEFT JOIN {$modx->getTableName('modTemplateVarTemplate')} tvt
    ON tvt.tmplvarid = tvr.tmplvarid 
    WHERE tvr.contentid = {$id} AND tvt.templateid = {$resource->template}
";
// $modx->log(1,$sql);
$q = $modx->prepare($sql);
$q->execute();
$tvs = $q->fetchAll(PDO::FETCH_ASSOC);

foreach($tvs as $tv){
    switch($tv['type']){
        case 'text': case 'textarea':
            $out[$tv['name']] = $tv['tv_value'];
        break;
        default:
            $out[$tv['name']] = $resource->getTVValue($tv['name']);
    }
}
return $out;
Александр Туниеков
24 июля 2024, 21:35
+2
Я тут решил немного помочь и сделал сниппет
res
<?php
$id = $input;
if (empty($id)) {
    $resource = $modx->resource;
} else {
    $resource = $modx->getObject('modResource', ['id' => intval($id)]);
}
if(!$resource) return [];

$out = $resource->toArray();
$id = $resource->id;
$sql = "
    SELECT IF(tvr.value != \"\", tvr.value, tv.default_text) AS tv_value,tv.name
    FROM {$modx->getTableName('modTemplateVarResource')} tvr
    LEFT JOIN {$modx->getTableName('modTemplateVar')} tv
    ON tv.id = tvr.tmplvarid
    LEFT JOIN {$modx->getTableName('modTemplateVarTemplate')} tvt
    ON tvt.tmplvarid = tvr.tmplvarid 
    WHERE tvr.contentid = {$id} AND tvt.templateid = {$resource->template}
";
// $modx->log(1,$sql);
$q = $modx->prepare($sql);
$q->execute();
$tvs = $q->fetchAll(PDO::FETCH_ASSOC);

foreach($tvs as $tv){
    $out[$tv['name']] = $tv['tv_value'];
}
return $out;
Использовать
{set $res = 1 | res}
<pre>{$res | print_r}</pre>
Расчитанно, что все tv текстовые. Если надо чтоб tv обрабатывались перед помещением в массив, то надо вызывать getTVValue.
foreach($tvs as $tv){
    $out[$tv['name']] = $resource->getTVValue($tv['name']);
}
Артур Шевченко
24 июля 2024, 18:37
0
Яндекс такси определяет нужный вход исходя из местоположения пользователя и если само приложение определит неверно, то никакое API исправить это не поможет. API существует
Вячеслав Варов
24 июля 2024, 17:44
0
У меня Ubuntu и настроил все на NGINX — работает норм
Гарри
24 июля 2024, 11:05
+1
[[!migxLoopCollection?
    &classname=`MaterialSubcategories\Model\subcategories`
    &where=`{"id":"[[+subcategory_id]]"}`
    &joins=`[{"alias":"Categories","classname":"MaterialCategories\\Model\\categories","on":"Categories.id = subcategories.category_id"}]`
    &tpl=`@CODE: [[+title]]/[[+category_id]] - [[+Categories_name]]`
]]
Сергей
24 июля 2024, 10:42
0
Как вы считаете, что лучше Debian и Ubuntu для modx? Я бы выбрал centos. но там нет поддержки isp6.
Артур Шевченко
23 июля 2024, 20:31
0
Добавить поле в заказ и в плагине на событие msOnChangeOrderStatus записывать в это поле текущую дату, если статус равен id статуса «Оплачен».
adminixi
23 июля 2024, 20:26
0
Понятно, а как сохранить дату оплаты?
Артур Шевченко
23 июля 2024, 15:57
0
Данная настройка ограничивает максимальное количество одной позиции товара, а не количество позиций. Если нужно, чтобы в корзине было не больше одного товара — пиши плагин на событие msOnBeforeAddToCart.
Артур Шевченко
23 июля 2024, 15:50
0
А ты сохраняешь дату оплаты? Минишоп сохраняет только дату создания и дату последнего изменения.
Николай Савин
23 июля 2024, 13:37
0
Ужас )) Да, пора бы обновиться. Это все древнее даже для древнего MODX2
Сергей
23 июля 2024, 09:49
0
У меня VPS
centOS 7
5.5.68-MariaDB
Там просто много сайтов и придется похоже все переносить.
Николай Савин
23 июля 2024, 09:46
0
Ой, а можно поинтересоваться — устаревшая это какая? Так то десятая версия тоже не свежа давно. Уже 12 есть.
Сергей
22 июля 2024, 19:58
0
У меня устаревшая MariaDB, это я уже выяснил, что бы установить надо переходить на другой хостинг.
Артур Шевченко
22 июля 2024, 19:55
0
Можно хотя бы один пример создания простой формы с защитой от спама?
Любая форма по умолчанию защищена от спама если в пресете есть хук email или FormItAutoResponder.

Почему-то не создается таблица
Во-первых проверьте версию сервера баз данных MySQL 5.7 или MariaDB 10.4. Во-вторых, попробуйте удалить все вервии пакета и установить самую свежую заново.
Дмитрий
22 июля 2024, 14:31
0
Привет! Правильно я понимаю, что в какой-то из новых версий этот баг исправлен?
И вопрос, раз вышла 2-я мажорная версия, то реально ли бесшовно обновится с 1-ой или есть какие-то breaking changes?
Сергей
22 июля 2024, 14:18
0
Артур, добрый день!
Можно хотя бы один пример создания простой формы с защитой от спама?
Просто если посмотреть в документацию, адрес tpl не тот, presetName тоже не тот.
Тут вы пишете в пункте 2, что больше нет ошибки «Невалидный токен», а я получается ставлю версию 2.1.0 (ранее не было ни какой) и ловлю эту ошибку) и не как не могу понять, как решить эту проблему)

Хотя я нашел проблему.
Could not create table `si_sessions` SQL: CREATE TABLE `si_sessions` (`id` INTEGER unsigned NOT NULL AUTO_INCREMENT, `session_id` VARCHAR(100) NOT NULL, `class_name` VARCHAR(100) NOT NULL, `data` JSON NULL, `createdon` DATETIME NOT NULL, PRIMARY KEY (`id`), UNIQUE KEY `app_session` (`session_id`,`class_name`), INDEX `createdon` (`createdon`)) ENGINE=MyISAM ERROR: Array ( [0] => 42000 [1] => 1064 [2] => You have an error in your SQL syntax; check the manual that corresponds to your MariaDB server version for the right syntax to use near 'JSON NULL, `createdon` DATETIME NOT NULL, PRIMARY KEY (`id`), UNIQUE KEY `app_se' at line 1 )
Почему-то не создается таблица

Версия php 7.4, версия modx 2.8.7