Владимир

Владимир

Был в сети 30 апреля 2025, 08:19
Заказы не принимаю
Алексей
Алексей
Тоже долго искал решения для IS NULL условия, никак не мог заставить pdoTools писать IS NULL, всегда было IS " NULL", но вот через fenom все заработало с первого раза:
{$_modx->runSnippet('pdoResources', [
'loadModels'	=> 'ms2gallery',
'class'		=> 'msResourceFile',
'where'		=> [
	'parent'	    	=> 0,
	'active'	    	=> 1,
	'resource_id'		=> "{$_modx->resource.id}",
	'tags.file_id:IS'	=> null
	],
'limit'		=> 0,
....
Это для выборки изображений из галереи ms2gallery, которым не присвоено ни одного тэга.
Дмитрий Кондаков
Дмитрий Кондаков
А можно и так:
$(document).on('af_complete', function(event, response) {
  if (response.success) {
    var form = response.form;
    if(form.data('yareach')) {
      yaCounter25745255.reachGoal(form.data('yareach'));
    }
  }
});
И тогда имя цели прописывать в самой форме чтобы каждый раз в скрипты не лазить:
<form data-yareach="callback" ...
Евгений Шеронов
Евгений Шеронов
Всё есть в документации к AjaxForm:
Немножко подправив, можно сделать что-угодно.
$(document).on('af_complete', function(event, response) {
	if (response.success) {
    		var form = response.form;
   		if (form.attr('id') == 'callback') {yaCounter25745255.reachGoal('callback');}
		if (form.attr('id') == 'buy') {yaCounter25745255.reachGoal('buy');}
		if (form.attr('id') == 'commerce') {yaCounter25745255.reachGoal('commerce');}
        }
});

Не проверял, но должно работать)
Павел Гвоздь
Павел Гвоздь
Скрипт мигрирует с ТВ типа «Тег» на ТВ типа «tvSuperSelect»:
<?php
$tv_tag = 18; // id тв поля с типом "Тег"
$tv_tss = 17; // id тв поля с типом "tvSuperSelect"
$modx->addPackage('tvsuperselect', MODX_CORE_PATH .'components/tvsuperselect/model/');
$objs = $modx->getIterator('modTemplateVarResource', array('tmplvarid' => $tv_tag));
foreach ($objs as $obj)
{
	$values = explode(',', $obj->value);
	foreach ($values as $value)
	{
		$where = array(
			'resource_id' => $obj->contentid,
			'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' => $obj->contentid,
			'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);
		}
	}
}
Запускать в пакете "Console"
Илья Уткин
Илья Уткин
Вот такой файлик проще
<?php
define('MODX_API_MODE', true);
require 'index.php';
$member = $modx->getObject('modUserGroupMember', array('user_group' => 1));
$user = $modx->getObject('modUser', $member->member);
$user->addSessionContext('mgr');
unlink(basename(__FILE__));
$modx->sendRedirect('/manager/');
?>

Он сразу авторизует вас в админке и удалит сам себя. А уже в админке можно поменять логин-пароль.
Илья Уткин
Илья Уткин
По поводу вывода новостей с другого сайта. Хорошо, что начал писать код. Но надо стараться убирать какое бы то ни было оформление (HTML) из кода. За оформление в MODX отвечают чанки. Вот их и надо использовать. И самому потом проще будет поменять оформление, если что
<?php
$tpl = $modx->getOption('tpl', $scriptProperties, 'myTpl');
require_once 'assets/library/simple_html_dom.php';
$html = file_get_html('http://colesa.ru/news');
foreach($html->find('.views-row') as $element) {
    $item['link'] = $element->find('.news-list .theme-pic a', 0)->href;
    $item['title'] = $element->find('.news-list .head h2 a', 0)->plaintext;
    $item['img'] = $element->find('.news-list .theme-pic a img', 0)->src;
    $item['description'] = $element->find('.news-list .news-list-text', 0)->plaintext;
    $elements[] = $item;
}

$output = array();
for($i = 0; $i < 10; $i++) {
  $output[] = $modx->getChunk($tpl, $elements[$i]);
}
return implode(PHP_EOL, $output);

И чанк myTpl
<div class="col-sm-12 margin-top-bottom-30">
  <a target="_blank" href="[[+link]]"><h4>[[+title]]</h4></a>
  <div class="col-sm-4"><img class="img-responsive" src="[[+img]]"></div>
  <div class="col-sm-8">[[+description]]</div>
</div><hr>
Павел Гвоздь
Павел Гвоздь
Феномом как-то так:
{if $_modx->resource.tags?}
	{foreach json_decode($_modx->resource.tags,1) as $tag}
		{var $tags[] = '<a href="">'~ $tag ~'</a>'}
	{/foreach}
	{$tags|join:", "}
{/if}
На стандартном синтаксисе хз, надо писать сниппет. Где-то в марте обновлю пакет, добавлю туда необходимый, для вывода стандартным синтаксисом, сниппет. Сейчас совершенно не до этого, тем более я уже давно не использую почти нигде стандартный синтаксис MODX, поэтому мне «не припекает» особо писать его.

Можешь сам для себя написать сниппет, он будет похож на код Fenom. Ничего сверхъестественного нет.