Leo

Leo

С нами с 11 декабря 2015; Место в рейтинге пользователей: #585
Leo
Leo
19 февраля 2025, 10:17
0
UPD: Рабочий вариант — сниппет для вывода списка контекстов, может кому то пригодиться

<?php
$contexts = $modx->getCollection('modContext', ['key:NOT IN' => ['mgr']]); // Исключаем админский контекст

$list = [];
foreach ($contexts as $context) {
    $contextKey = $context->get('key');

    // Получаем название контекста из самого объекта modContext (а не из modContextSetting!)
    $contextName = $context->get('name'); 

    // Получаем настройки контекста (чтобы достать site_url)
    $contextSettings = $modx->getCollection('modContextSetting', ['context_key' => $contextKey]);
    $settings = [];

    foreach ($contextSettings as $setting) {
        $settings[$setting->get('key')] = $setting->get('value');
    }

    // Получаем URL (если не задан - пропускаем контекст)
    $siteUrl = isset($settings['site_url']) ? $settings['site_url'] : '';
    if (empty($siteUrl) || empty($contextName)) {
        continue;
    }

    $list[] = ['name' => $contextName, 'url' => $siteUrl];
}

// Сортируем список по названию
usort($list, function ($a, $b) {
    return strcmp($a['name'], $b['name']);
});

// Получаем текущий контекст
$currentContextKey = $modx->context->get('key');
$currentContext = $modx->getObject('modContext', ['key' => $currentContextKey]);

// Получаем его название (из поля "Название" в админке)
$currentContextName = $currentContext ? $currentContext->get('name') : $currentContextKey;

// Получаем site_url текущего контекста
$currentSettings = $modx->getCollection('modContextSetting', ['context_key' => $currentContextKey]);
$currentSiteUrl = '';

foreach ($currentSettings as $setting) {
    if ($setting->get('key') === 'site_url') {
        $currentSiteUrl = $setting->get('value');
        break;
    }
}

// Вывод HTML
$output = 'Текущий город - <strong>' . htmlspecialchars($currentContextName) . '</strong>';
$output .= '<select onchange="window.location=this.value">';
$output .= '<option value="">Выберите город...</option>';

foreach ($list as $item) {
    $selected = ($item['url'] == $currentSiteUrl) ? ' selected' : '';
    $output .= '<option value="' . htmlspecialchars($item['url']) . '"' . $selected . '>' . htmlspecialchars($item['name']) . '</option>';
}

$output .= '</select>';

return $output;
Leo
Leo
18 марта 2024, 13:22
0
Спасибо! easyRedirects тоже хорошо справляется с перенаправлением, только прописывать урлы нужно вручную
Leo
Leo
18 марта 2024, 00:18
0
Обновился до MODX 2.8.6 и наступили проблемы с сохранением родителя с вложенными ресурсами, без вложений сохраняет ок. Когда включаешь php 7.4 все сохраняет. В итоге проблемы с сохранением вызывал плагин autoredirector — после удаления плагина сохранение заработало. Есть проблемы с работой msGallery если попытаться обновить превьюхи под php 7.4 — идет бесконечная загрузка, с php 8 и выше все ок.
Leo
Leo
27 декабря 2023, 12:44
0
Спасибо! Почти получилось, выводит названия всех контекстов, но вот урлы ведут на корень — главный контекст web
Leo
Leo
17 ноября 2023, 00:13
0
Спасибо, так и сделал, похоже автор вообще модекс забросил
Leo
Leo
16 ноября 2023, 21:02
0
Понятно. Я задал вопрос в расчете, что кто нибудь из пользователей сталкивался и решил проблему, ну или знает причину кривой работы.
Leo
Leo
16 ноября 2023, 20:04
0
Ок, спасибо, кэп, ценный совет!
Но возможно, у человека желающего помочь, все таки, есть идеи, как решить выше описанную проблему?
Leo
Leo
23 января 2019, 02:29
0
Здравствуйте! К сожалению замена на старую версию phpthumb не решила проблему(
Работает текстовой вотермарк, но почему то эта конструкция игнорирует размер шрифта.

[{"w":450,"h":450,"q":90,"zc":"0","bg":"FFFFFF","fltr":"wmt|site.name|20|C|FFFFFF||90|20|0||0|"},{"w":676,"h":676,"q":90,"zc":"0","bg":"FFFFFF","fltr":"wmt|site.name|28|C|FFFFFF||90|20|0||0|"}]
Leo
Leo
20 января 2019, 14:36
0
Сразу запилил по дефолту ватермарк пнг альфа с прозрачностью, минимум настроек
Leo
Leo
20 января 2017, 17:58
1
0
Здравствуйте!

1. Можно вывести ваш компонент в простом формате? типа — город (картинка состояния погоды) +-градусы

2. И как там с блокировками импорта данных? в примере из тикета о простом выводе погоды импорт блокирован яндексом
http://export.yandex.ru/weather-ng/forecasts/$cityId.xml
Leo
Leo
16 декабря 2016, 13:38
3
0
рабочий вариант, проверено

<?php
define('MODX_API_MODE', true);
require 'index.php';		// Если файл лежит не в корне - здесь нужно указать верный путь
$modx->getService('error','error.modError');
$modx->setLogLevel(modX::LOG_LEVEL_INFO);
$modx->setLogTarget(XPDO_CLI_MODE ? 'ECHO' : 'HTML');

if (!isset($parents)) {$parents = 0;}		// Можно указать список категорий для поиска товаров
if (!isset($resources)) {$resources = '';}	// Можно указать конкретный список товаров

$pdo = $modx->getService('pdoFetch');
$condition = array('parents' => $parents);
$files = $pdo->getCollection('msProduct',
	array(
		'msProduct.class_key' => 'msProduct',
	),
	array(
		'class' => 'msProduct',
		'parents' => $parents,
		'resources' => $resources,
		'innerJoin' => array(
			'msProductFile' => array(
				'alias' => 'msProductFile',
				'on' => array(
					'msProduct.id = msProductFile.product_id',
					'msProductFile.parent' => 0,
					'msProductFile.type' => 'image',
				)
			)
		),
		'select' => array(
			'msProductFile' => 'all'
		),
		'sortby' => 'msProduct.id'
	)
);

echo '<pre>';
echo $pdo->getTime();
foreach ($files as $row) {
	$file = $modx->newObject('msProductFile');	
	$file->fromArray($row, '', true, true);
	
	$children = $file->getMany('Children');
	foreach ($children as $child) {
		$child->remove();
	}
	$file->generateThumbnails();
	
	// Обновляем thumb и image товара
	if ($product = $file->getOne('Product')) {
		$product->updateProductImage();
	}
}

echo microtime(true) - $modx->startTime;
Leo
Leo
29 июня 2016, 22:59
0
Спасибо всем за помощь! Что с феномом что без линки ведут на категорию самого верхнего уровня, а у меня вложенность: Catalog>Category1>Category2>Product (используя представленные примеры линки и заголовок ведут на Category1)
Leo
Leo
13 января 2016, 23:57
0
Максим, спасибо за помощь, все решилось, действительно стоял &fastMode=`1`
Leo
Leo
13 января 2016, 23:14
0
нет, не выводит…