Роман

Роман

С нами с 15 октября 2018; Место в рейтинге пользователей: #190
Роман
29 сентября 2022, 10:12
0
Схема в MODX — это файл, в котором описаны все объекты и их связи. Он не участвует в работе компонента, он нигде не используется, он нужен только для генерации модели.
А сама модель уже хранится в .map.inc.php и там уже отвечает за обработку данных.
Тут можете почитать:
https://docs.modx.com/current/ru/extending-modx/xpdo/custom-models/generating-the-model
https://docs.modx.com/3.x/ru/extending-modx/creating-components/work-logic
Роман
29 сентября 2022, 09:54
+1
Откройте в DevTools вкладку Network и посмотрите, отправляется ли аяксом сообщение. Если нет, значит нужно искать в скриптах проблему.
Роман
27 сентября 2022, 13:47
+1
Вы событие у плагина поставили: OnBeforeDocFormSave?
Роман
27 сентября 2022, 12:32
+1
Откройте консоль, и протестируйте. Откуда я знаю, что вы там отправляете.
Роман
27 сентября 2022, 10:27
+1
Тут ошибка:
if ($resource->get('template') == 24) {
        if (!$resource->content) {
                $resource->set('published', 0);
        }
        }
Можно просто переписать:
if ($resource->get('template') == 24 && !$resource->get('content')) $resource->set('published', 0);
save можно не ставить, он потом все равно будет сохранять:
$resource->save();
Проверил, работает, поправьте ошибки и снова проверьте. Может быть проблема в том еще, что она когда удаляет не нужное, но на странице это не показывается, тут наверно нужно как-то отдельно перегружать блок.
Роман
27 сентября 2022, 09:31
0
Я что-то это упустил это. Но тут уже сами перепишите, ничего сложного нет.
$words = array('xxx', 'yyy', 'zzz', 'etc..');
$pattern = '/<p>(?:' . join('|', $words) . ')<\/p>/i';
$content = preg_replace($pattern, '', $content);
Роман
27 сентября 2022, 09:00
+1
Единственное могут быть проблемы со склонениями, тут или расширить список или еще как-то переписать.
Роман
27 сентября 2022, 08:58
+1
А в чем сложность? Сделайте плагин на событие OnBeforeDocFormSave
if ($modx->event->name != 'OnBeforeDocFormSave') {return false;}
$content     = $resource->get('content');
$words = array('xxx', 'yyy', 'zzz', 'etc..');
$pattern = '/\b(?:' . join('|', $words) . ')\b/i';
$content = preg_replace($pattern, '', $content);
$resource->set('content', $content);
Роман
26 сентября 2022, 10:59
0
Скорее всего как-то так.
{$_modx->resource.content | ereplace : "/<\/?div[^>]*\>/i":""}
Ну или как подсказывают выше, вот так:
[[*content:striptags=`<div>`]]
если php 7.4 и выше, то можно и массивом задавать ['div', 'iframe']
Роман
26 сентября 2022, 10:39
0
$content = preg_replace("/<\/?div[^>]*\>/i", "", $content);
Роман
22 сентября 2022, 08:55
0
Тут основная боль, это phpthumbon с наложением ватермарка. =)
Роман
21 сентября 2022, 16:50
0
А TV текущего ресурса как называется?
Роман
21 сентября 2022, 16:43
0
Вот тут вообще не понятно, что вы делаете:
{"[[*option]]:IN":rubrika}
Через IN тут не решить вопрос. Нужно через LIKE ()
Добавьте &showLog=`1` и посмотрите, свой запрос.
Роман
21 сентября 2022, 09:28
0
Ну почему ерунда стразу. Вывод ответы 1(Да) и 0(Нет). Если вам нужно только Да, то второй с помощью css уберите.
ms|new:boolean
ms|favorite:boolean
ms|popular:boolean
#mse2_filters .mse2s_boolean:nth-child(2n) {
    display: none;
}
Роман
21 сентября 2022, 08:43
0
Скопируйте сниппет ms2Gallery и добавьте свой параметр, в нем передавайте pagetitle, так точно быстрее будет.
Роман
20 сентября 2022, 15:39
0
$resource->id
нужно заменить на
$resource->get('id')
Он значение ID не получает, поэтому и не пишет.
Это вообще можно удалить, оно не нужно:
$content = $resource->get('content');
Итого:
foreach($resources as $resource) {
    $tags = ["тег суперселект"];
	
	$values = explode(',', $tags);
	
	foreach ($values as $value) {
		$where = array(
			'resource_id' => $resource->get('id'),
			'tv_id' => $tv_tss,
			'value' => $value,
		);
		
		if (!$modx->getCount('tvssOption', $where))
		{
			$new = $modx->newObject('tvssOption');
			$new->fromArray($where);
			$new->save();
			unset($new);
		}
		
		$where = array(
			'contentid' => $resource->get('id'),
			'tmplvarid' => $tv_tss,
		);
		
		if ($old = $modx->getObject('modTemplateVarResource', $where))
		{
			$old_values = $modx->fromJSON($old->value);
			$old_values[] = $value;
			$old->set('value', $modx->toJSON(array_unique($old_values)));
			$old->save();
		}
		else {
			$new = $modx->newObject('modTemplateVarResource');
			$new->fromArray($where);
			$new->save();
			unset($new);
		}
	
	}
}
Роман
20 сентября 2022, 13:49
0
Кэш после этого чистили? Проверьте базу, пишется ли в базу.
Роман
20 сентября 2022, 09:44
0
Как-то вот так будет работать, не тестировал. $tv_tss поменяйте на свой.
$modx->addPackage('tvsuperselect', MODX_CORE_PATH .'components/tvsuperselect/model/');
$tv_tss = 1; //тут нужно указать ID 'super_select_tags'

foreach($resources as $resource) {
    $content = $resource->get('content');
    $tags = ["тег суперселект"];
	
	$values = explode(',', $tags);
	
	foreach ($values as $value) {
		$where = array(
			'resource_id' => $resource->id,
			'tv_id' => $tv_tss,
			'value' => $value,
		);
		
		if (!$modx->getCount('tvssOption', $where))
		{
			$new = $modx->newObject('tvssOption');
			$new->fromArray($where);
			$new->save();
			unset($new);
		}
		
		$where = array(
			'contentid' => $resource->id,
			'tmplvarid' => $tv_tss,
		);
		
		if ($old = $modx->getObject('modTemplateVarResource', $where))
		{
			$old_values = $modx->fromJSON($old->value);
			$old_values[] = $value;
			$old->set('value', $modx->toJSON(array_unique($old_values)));
			$old->save();
		}
		else {
			$new = $modx->newObject('modTemplateVarResource');
			$new->fromArray($where);
			$new->save();
			unset($new);
		}
	
	}
}
Роман
20 сентября 2022, 09:35
0
Могу предположить, что он в формате json хранит. Так что отправляйте как:
$resource->setTVValue('super_select_tags', json_encode(["тег суперселект"]));
$resource->save();
Плюс в доках сказано, что для данного TV есть отдельная таблица и он пишет в сразу в 2 таблицы, поэтому нужно посмотреть исходники, как там это реализовано, так же для вызова нужно использовать разделитель ||:
{$_modx->runSnippet('tvssResources', [
    'tv' => '2',
    'tags' => $_modx->runSnippet('tvssTags', ['id' => $_modx->resource.id, 'tv' => '2', 'tpl' => '@INLINE [[+tag]]', 'outputSeparator' => '||']),
    'parents' => 0,
    'limit' => 4,
]) ?: 'Похожих записей не найдено'}
Роман
20 сентября 2022, 09:09
0
Сначала нужно проверить, что выдает:
$_modx->resource.parent
$_modx->resource.id
$parent
и уже оттуда плясать. =)