Всего 125 670 комментариев

Shedko Denis
25 января 2021, 13:15
0
Настроил согласно этой инструкции, но появился вопрос.

В текст статьи по этому коду:
{'!rssCDATA' | snippet : [ 'cnt' => ( $id | resource : 'content' | replace : '"assets/' : ('"' ~ $_modx->config.site_url ~ 'assets/') ) ]}
уходит экранированный текст, где все тэги «побиты»
<p><img src="/img/lys.jpg" width="300" alt="Монтаж люстры" align="right"   vspace="0" hspace="5">
<p>Теперь Вам достаточно просто обратиться в нашу компанию. Больше нет необходимости в поиске электрика, наши специалисты сделают это для Вас.</p>
<h2>Монтаж люстры</h2>
<p>Все <b> люстры </b> крепятся практически одинаково, приведем три примера.</p>


Подскажите, что я сделал не так )
Артур Шевченко
25 января 2021, 12:10
0
Вы можете делать что хотите, лишь бы навыков хватило. Вот тут похожей темой интересовался, правда там он спрашивает как вывести заказ. На моём сайте такой функционал реализован, могу скинуть свой код, но позже, пока не у компа. А вот в документации решение этой задачи нет. Вам нужно почитать раздел Разработка компонента minishop2, плюс понимать как с помощью modx api работать с ресурсами, знать какие поля есть у товаров, заказов, как связаны между собой таблицы minishop2. Но это всё не очень сложно, я код скину посмотрите и думаю разберётесь.
Madao
25 января 2021, 12:02
0
3. Сделать этот функционал как отдельную страницу на фронте доступную только админу.
А разве на фронте можно редактировать уже оформленный заказ? Есть ссылка на документацию по этому направлению?
Alexey
25 января 2021, 11:34
0
На самом деле, я тоже стараюсь не плодить TV без надобности. Но многие клиенты прямо настаивают, чтобы в отдельной вкладочке все настройки ресурса были, привыкли к доп. полям с категориями.
Роман
25 января 2021, 11:33
0
Да, именно, у меня такая же ситуация, сторонний сервис как 1C, и приходиться в tv отдельную писать уникальные их id.
Артур Шевченко
25 января 2021, 11:29
+1
Ну вариант, конечно, когда полей много и стандартных не хватает, а тут-то зачем? Ну да ладно, хочется автору через tv пусть будет так))
Артур Шевченко
25 января 2021, 11:22
0
Ну да, по товарам. Если поменять класс будет работать по любым ресурсам.
Роман
25 января 2021, 11:11
0
Как можно не учесть, если внутри админки есть поиск. Ну да ладно. На сколько я понял, ваш поиск работает только по товарам?
Alexey
25 января 2021, 10:48
0
«зачем проверять наличие ресурсов в родителе?»

Ну, в исходном скрипте есть проверка через getCollection, я ХЗ зачем она, спросите автора топика.

«зачем tv»?

А чем не вариант? Есть много реализаций, к примеру, импорт из 1С, где в отдельную тивиху сохраняли ID товара из файла импорта, как уникальное поле — skrinshoter.ru/s/250121/tgpRylds
Артур Шевченко
25 января 2021, 10:32
0
Может быть вы мне объясните, зачем tv и зачем проверять наличие ресурсов в родителе?
Michael
25 января 2021, 10:20
0
Подскажите как его установить? через Установщик пакетов не находит, а скаженный пакет на гитхабе не могу понять как установить. Подскажите пожалуйста.
Alexey
25 января 2021, 10:04
0
Ошибочка:

if (!in_array($media['id'], $tvs)) {
        //добавляю ресурс
        .......
    }

так должно быть
Alexey
25 января 2021, 09:39
1
+1
В общем, как-то так:

<?php
$parent_id = 2; // выносим id родителя в переменную
$tv_id = 6; // тут указать id своего tv-поля

// проверяем наличие ресурсов в родителе
$c = $modx->newQuery('modResource');
$c->where(['parent' => $parent_id, 'published' => 1, 'deleted' => 0, 'searchable' => 1]);
$count = $modx->getCount('modResource', $c);

if($count == 0) return;

// вытаскиваем массив значений tv-полей ресурсов указанного родителя
$q = $modx->newQuery('modResource');
$q->leftJoin('modTemplateVarResource', 'TVS', 'modResource.id = TVS.contentid AND TVS.tmplvarid = '.$tv_id);
$q->select('TVS.value');
$q->where(['parent' => $parent_id]);
if ($q->prepare() && $q->stmt->execute()) {
	$tvs = $q->stmt->fetchAll(PDO::FETCH_COLUMN);
}
//убираем пустые элементы массива tv-полей
$tvs = array_diff($tvs, array(''));

foreach($usersMedia['data'] as $media){
    // проверка наличия $media['id'] в массиве $tvs
    if (in_array($media['id'], $tvs)) {
        //добавляю ресурс
        .......
    }
}
//очистку кеша выносим из цикла
$modx->cacheManager->clearCache();

Не проверял! По идее, должно сработать.
Артур Шевченко
25 января 2021, 02:12
1
+1
$resource=$modx->getObject ('modResource', array('pagetitle'=>$media['title'], 'parent' => 2));
Индексируется страница, а на странице можно вывести например longtitle.
Alexey
25 января 2021, 02:11
0
Пока что предлагаю такой вариант: отдельным циклом пройтись по всем ресурсам родителя, все значения их tv -полей забить в отдельный массив. И потом уже — перебирая основной массив с данными сервиса — проверять через in_array, есть ли в массиве tv-шек значение элемента $media['id']. Соответственно, если нет — создаем новый ресурс.

Обращаю внимание, что массив всех tv-шек извлекаем в цикле ДО начала цикла с данными сервиса.
Роман
25 января 2021, 02:09
0
Спасибо большое, но не могу id писать в pagetitle, это индексируется поисковиками, не должно быть лишнего в заголовке.

с ключом parent не понял, в modResource можно только id указать, написал так
$resource=$modx->getObject ('modResource', 2, array('pagetitle'=>$media['title']));
Артур Шевченко
25 января 2021, 01:53
0
Там где получаете ресурс в массив добавьте ещё один элемент с ключом parent вот и будет вам ограничение по родителю. А про tv умоляю вас, забудьте, они не для этого, для программной работы с ресурсами используйте поля описанные в модели их обычно хватает, а tv это для дополнительной информации когда прям без вариантов. В вашем случае лучше писать уникальный id в pagetitle.