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

Zulya
18 октября 2022, 13:59
1
0
Здравствуйте, Павел!
Спасибо большое за готовое решение!
Вы можете уточнить 10 в
$ids = $modx->getChildIds(5,10,array('context' => 'web'));

За что отвечает цифра 10?
5 — если правильно поняла, это родитель (дедушка) в котором есть ресурсы, которые имеют комментарии.
Павел Романов
18 октября 2022, 12:45
1
+1
Попробуйте сделать сниппет getMessagesIds:
$ids = $modx->getChildIds(5,10,array('context' => 'web'));
$mess = array();
$table_mess = $modx->getOption('table_prefix').'ec_messages';
foreach ($ids as $id) {
    $sql = "SELECT * FROM {$table_mess} WHERE `thread` = {$id}";
    $q = $modx->prepare($sql);
    $q->execute();
    $messages = $q->fetchAll(PDO::FETCH_ASSOC);
    foreach ($messages as $message) {
       	$mess[] = $message['id'];
    }
}
return implode(',', $mess);

И используйте его в качестве &messages в вызове:
[[!pdoPage?
    &element=`ecMessages`
    &threads=`*`
    &messages=`[[!getMessagesIds]]`
    ......
]]

Что касается полей ресурса, то в чанке сообщения можно использовать FastField:
[[#[[+thread]].pagetitle]]
[[#[[+thread]].logo]]
Евгений
18 октября 2022, 12:18
0
подправил для поле tvFilters
<?php
$filterz = '';
if(isset($_GET['types'])) $filterz = $filterz.'types=='.$_GET['types'].',';
if(isset($_GET['config'])) $filterz = $filterz.'config=='.$_GET['config'].',';
if(isset($_GET['style'])) $filterz = $filterz.'style=='.$_GET['style'].',';
if(isset($_GET['fasad'])) $filterz = $filterz.'fasad=='.$_GET['fasad'].',';

if($filterz !=='') $filterz = substr($filterz,0,-1);

return $filterz;
словил такую ошибку
[pdoTools] Error 42000: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '"`TVtypes`.`value` LIKE '1\"' AND  ( `msProduct`.`parent` IN (2,24,5,6,7,8,9,10,' at line 1
Евгений
18 октября 2022, 11:48
0
пришел к такому решению:
[[!msProducts? &tpl=`tovartplCat` &limit=`64` &parents=`2` &tvFilters=`[[!where]]` &includeTVs=`types,config,style,fasad` ]]
<?php
$filterz = '';
if(isset($_GET['types'])) $filterz['types'] = $_GET['types'];
if(isset($_GET['config'])) $filterz['config'] = $_GET['config'];
if(isset($_GET['style'])) $filterz['style'] = $_GET['style'];
if(isset($_GET['fasad'])) $filterz['fasad'] = $_GET['fasad'];
if($filterz !=='') $filterz = substr($filterz,0,-1);

//if(!empty($filterz)) {$where = json_encode($filterz);} else {$where = '';}

return $filterz;
но чтото не завелось :(
Петр
18 октября 2022, 11:42
0
Как подружить msOptionsPrice2 и babel? Что бы синхронизировать остатки товаров и свойства?
Никита Боднар
18 октября 2022, 11:35
0
Точнее не в этом случае, а в том случае, если у TV стоит проверка на заполненность.
Никита Боднар
18 октября 2022, 11:19
0
Так тоже пробовал, результата ноль.
Никита Боднар
18 октября 2022, 11:19
0
Так сработало, но save() всё-таки нужен в этом случае.
Артур Шевченко
18 октября 2022, 11:01
0
Вот так точно сработает
$page->setTVValue('test', 1);
Наумов Алексей
18 октября 2022, 10:24
1
+1
template — это поле ресурса, нужно это указать.

Я сейчас не вспомню точно как, но что-то типа resource.template или modResource.template.
насчет join — поищите примеры здесь на форуме…
ну типа modx.pro/help/13888
Zulya
18 октября 2022, 10:04
0
Добрый день, Алексей!
Спасибо вам за подробный ответ!
Попробовала 2 вариант с параметром where. Ресурсы с комментариями которые необходимо вывести имеют шаблон 69. Поэтому я указала 69 в where.
<div id="pdopage">
                <div class="rows">
                    [[!pdoPage?
                        &element=`ecMessages`
                        &limit=`10`
                        &includeTVs=`logo,lic`
                        &processTVs=`1`
                        &tpl=`tpl.ecMessages.Row.Review`
                        &threads=`*`
                        &where=`{ "template:IN" : [ 69 ] }`
                        &ajaxMode=`button`
                    ]]
                </div>
                [[!+page.nav]]
            </div>
Но что-то ничего не показывает. Если убираю параметр where, то выводятся все комментарии со всего сайта. А необходимо выводить комментарии ресурсов у которых шаблон равен 69. Может я неправильно указала параметр where?

Еще вопрос. Как использовать JOIN для выборки TV? Можно пример без fenom? Спасибо большое!
Наумов Алексей
18 октября 2022, 09:09
1
+1
привет!
Да, здесь pdoPage должен работать.
{'!pdoPage' | snippet : [
    'element' => 'ecMessages',
...
все прочие параметры ecMessages
....
]}
Про работу кнопки «Загрузить еще» стоит читать его документацию…

Насчет этого «Необходимо собрать все комментарии которые находятся под ресурсом с id 5.»
Два варианта решения:
1. дочерних ресурсов мало — просто формируйте сторонним сниппетом строку для параметра threads для ecMessages в виде 'resource-6,resource-7,resource-8,resource-9,resource-10'…
2. Дочерних много — укажите threads='*', а ограничение выборки делайте через параметр where.
3. Дочерних много и они вложены на много уровней вниз — тут посложнее, все зависит от конкретной ситуации.
Я бы наверное изначально формировал thread в виде category-5-resource-10, чтобы потом через LIKE выбирать: 'category-5-%'.

>> также вывести pagetitle
Читайте про параметр resourceFields у сниппета ecMessages в документации.
А вот TV вы так не выберете. Тут только JOIN если делать.
vectorserver
18 октября 2022, 08:08
+1
Попробуй сохранять булев как строку!
$page = $modx->getObject('modResource', 1);
$page->setTVValue('test', 'true');
vectorserver
18 октября 2022, 08:05
+2
setTVValue — В отличие от некоторых других методов API xPDO, метод немедленно сохраняет значения в базе данных, поэтому не нужно вызывать отдельный вызов метода save().
Артур Шевченко
17 октября 2022, 23:35
0
Всё правильно пробовал, только если ниже не было
$page>save();
то не удивительно, что значение не установилось.
Виталий
17 октября 2022, 16:13
0
Алексей спасибо!
&fiarFrom=`__from_@you-domain` // вылечил проблему
Алексей Смирнов
17 октября 2022, 14:55
+1
попробуйте явно прописать параметры
&fiarFrom=`__from_@you-domain` // тут почта вашего домена. возможно этой строчки не хватает.
&fiarSender=`_from_@mailru`  // явное указание получателя
&fiarReplyTo=`___@mailru`
Виталий
17 октября 2022, 12:28
0
До сих пор в тупике перепробовал кучу всего, помогите найти ошибку, почему FormItAutoResponder не срабатывает.
Все настроил в системных настройка как надо, формирую отчет «Информация о системе» почему-то стоит
SMTP: localhost
smtp_port: 25
Хотя прописано в системных настройках
SMTP: mail.nic.ru
smtp_port: 465
Может в этом проблема?
Виталий
17 октября 2022, 10:04
0
Павел, огромное спасибо.