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

Alexey
01 августа 2022, 11:32
0
mFilter2 тут не при чем! Речь идет про msProducts
Константин
01 августа 2022, 11:32
0
0.0000961: pdoTools loaded.
0.0001519: Conditions prepared
0.0000250: xPDO query object created
0.0003450: Included list of tvs: available
0.0001450: leftJoined msProductData as Data
0.0000710: leftJoined msVendor as Vendor
0.0000811: leftJoined msProductFile as medium
0.0000720: leftJoined modTemplateVarResource as TVavailable
0.0000021: Grouped by msProduct.id, `medium`.url
0.0001230: Added selection of msProduct: SQL_CALC_FOUND_ROWS `id`, `type`, `contentType`, `pagetitle`, `longtitle`, `description`, `alias`, `alias_visible`, `link_attributes`, `published`, `pub_date`, `unpub_date`, `parent`, `isfolder`, `introtext`, `richtext`, `template`, `menuindex`, `searchable`, `cacheable`, `createdby`, `createdon`, `editedby`, `editedon`, `deleted`, `deletedon`, `deletedby`, `publishedon`, `publishedby`, `menutitle`, `donthit`, `privateweb`, `privatemgr`, `content_dispo`, `hidemenu`, `class_key`, `context_key`, `content_type`, `uri`, `uri_override`, `hide_children_in_tree`, `show_in_tree`, `properties`, `seotabs_searchable`
0.0000441: Added selection of msProductData: `article`, `price`, `old_price`, `weight`, `image`, `thumb`, `vendor`, `made_in`, `new`, `popular`, `favorite`, `tags`, `color`, `size`, `source`
0.0000432: Added selection of msVendor: `name` AS `vendor.name`, `resource` AS `vendor.resource`, `country` AS `vendor.country`, `logo` AS `vendor.logo`, `address` AS `vendor.address`, `phone` AS `vendor.phone`, `fax` AS `vendor.fax`, `email` AS `vendor.email`, `description` AS `vendor.description`, `properties` AS `vendor.properties`
0.0000269: Added selection of msProductFile: url as `medium`
0.0000069: Added selection of modTemplateVarResource: IFNULL(`value`, '') AS `available`
0.0000100: Replaced TV conditions
0.0000260: Processed additional conditions
0.0001669: Added where condition: class_key=msProduct, msProduct.id:IN(4,4,4,4,4,27,28), msProduct.published=1, msProduct.deleted=0
0.0000062: Replaced TV conditions
0.0000670: Sorted by msProduct.parent, ASC
0.0000851: Sorted by msProduct.menuindex, ASC
0.0000029: Limited to 12, offset 0
0.0002210: SQL prepared «SELECT SQL_CALC_FOUND_ROWS `msProduct`.`id`, `msProduct`.`type`, `msProduct`.`contentType`, `msProduct`.`pagetitle`, `msProduct`.`longtitle`, `msProduct`.`description`, `msProduct`.`alias`, `msProduct`.`alias_visible`, `msProduct`.`link_attributes`, `msProduct`.`published`, `msProduct`.`pub_date`, `msProduct`.`unpub_date`, `msProduct`.`parent`, `msProduct`.`isfolder`, `msProduct`.`introtext`, `msProduct`.`richtext`, `msProduct`.`template`, `msProduct`.`menuindex`, `msProduct`.`searchable`, `msProduct`.`cacheable`, `msProduct`.`createdby`, `msProduct`.`createdon`, `msProduct`.`editedby`, `msProduct`.`editedon`, `msProduct`.`deleted`, `msProduct`.`deletedon`, `msProduct`.`deletedby`, `msProduct`.`publishedon`, `msProduct`.`publishedby`, `msProduct`.`menutitle`, `msProduct`.`donthit`, `msProduct`.`privateweb`, `msProduct`.`privatemgr`, `msProduct`.`content_dispo`, `msProduct`.`hidemenu`, `msProduct`.`class_key`, `msProduct`.`context_key`, `msProduct`.`content_type`, `msProduct`.`uri`, `msProduct`.`uri_override`, `msProduct`.`hide_children_in_tree`, `msProduct`.`show_in_tree`, `msProduct`.`properties`, `msProduct`.`seotabs_searchable`, `Data`.`article`, `Data`.`price`, `Data`.`old_price`, `Data`.`weight`, `Data`.`image`, `Data`.`thumb`, `Data`.`vendor`, `Data`.`made_in`, `Data`.`new`, `Data`.`popular`, `Data`.`favorite`, `Data`.`tags`, `Data`.`color`, `Data`.`size`, `Data`.`source`, `Vendor`.`name` AS `vendor.name`, `Vendor`.`resource` AS `vendor.resource`, `Vendor`.`country` AS `vendor.country`, `Vendor`.`logo` AS `vendor.logo`, `Vendor`.`address` AS `vendor.address`, `Vendor`.`phone` AS `vendor.phone`, `Vendor`.`fax` AS `vendor.fax`, `Vendor`.`email` AS `vendor.email`, `Vendor`.`description` AS `vendor.description`, `Vendor`.`properties` AS `vendor.properties`, `medium`.url as `medium`, IFNULL(`TVavailable`.`value`, '') AS `available` FROM `modx_site_content` AS `msProduct` LEFT JOIN `modx_ms2_products` `Data` ON `msProduct`.`id` = `Data`.`id` LEFT JOIN `modx_ms2_vendors` `Vendor` ON Data.vendor=Vendor.id LEFT JOIN `modx_ms2_product_files` `medium` ON `medium`.product_id = msProduct.id AND `medium`.`rank` = 0 AND `medium`.path LIKE '%/medium/%' LEFT JOIN `modx_site_tmplvar_contentvalues` `TVavailable` ON `TVavailable`.`contentid` = `msProduct`.`id` AND `TVavailable`.`tmplvarid` = 3 WHERE ( `msProduct`.`class_key` = 'msProduct' AND `msProduct`.`id` IN (4,4,4,4,4,27,28) AND `msProduct`.`published` = 1 AND `msProduct`.`deleted` = 0 ) GROUP BY msProduct.id, `medium`.url ORDER BY msProduct.parent ASC, msProduct.menuindex ASC LIMIT 12 „
0.0016711: SQL executed
0.0001159: Total rows: 7
0.0000899: Rows fetched
0.0001149: Returning raw data
0.0008242: Checked the active modifiers
0.0021989: Loaded “modChunk» with name «gridProductTpl»
0.0020950: Compiled Fenom chunk with name «modchunk/54»
0.0014119: Loaded «modSnippet» with name «msGallery»
0.0044742: Time to load products options
0.1365609: Total time
6 291 456: Memory usage
Константин
01 августа 2022, 11:30
0
Вывод:

{$_modx->runSnippet('!mFilter2', [
	'element' => 'msProducts',
	'class' => 'msProduct',
	'limit' => 12,
	'tplOuter' => 'mFilter2OuterTpl',
	'tpl' => 'gridProductTpl',
	'includeTVs' => 'available',
	'includeThumbs' => 'medium',
	'sortby' => '{ "parent":"ASC","menuindex":"ASC" }',
	'tplPagePrev' => '@INLINE <li><a class="" href="{$href}"><i class="fa fa-angle-left" aria-hidden="true"></i></a></li>',
	'tplPageNext' => '@INLINE <li><a class="" href="{$href}"><i class="fa fa-angle-right" aria-hidden="true"></i></a></li>',
	'tplPagePrevEmpty' => '@INLINE <li><a class="" href="{$href}"><i class="fa fa-angle-left" aria-hidden="true"></i></a></li>',
	'tplPageNextEmpty' => '@INLINE <li><a class="" href="{$href}"><i class="fa fa-angle-right" aria-hidden="true"></i></a></li>',
	'tplPageFirst' => '',
	'tplPageLast' => '',
	'tplPageFirstEmpty' => '',
	'groupby' => 'id',
	'tplPageLastEmpty' => '',
	'suggestionsRadio' => 'resource|parent',
	'filters' => 'msoption|marka,
		          msoption|model,
            	ms|vendor:vendors,
            	parent:parents',
            	
	'aliases' => 'ms|vendor==vendor,
			     msoption|marka==marka,
				 msoption|model==model',
			'tplFilter.outer.default' => 'filterSelectOuter',
	        'tplFilter.row.default' => 'filterSelectRow',
	        
			'tplFilter.outer.vendor' => 'filterCheckboxOuter',
	        'tplFilter.row.vendor' => 'filterCheckboxRow',
	        
	        'tplFilter.outer.marka' => 'filterSelectOuter',
	        'tplFilter.row.marka' => 'filterSelectRow',
	        
	        'tplFilter.outer.model' => 'filterSelectOuter',
	        'tplFilter.row.model' => 'filterSelectRow',
	        
	        'tplFilter.outer.resource|parent:parents' => 'filterSelectOuter',
	        'tplFilter.row.resource|parent:parents' => 'filterSelectRow',
	
])}
Ilya
01 августа 2022, 11:30
0
Павел, добрый день! Спасибо большое за подробный ответ.
Без ; после:
foreach($content_currency->Record as $currency) {
    $items .= $modx->getChunk($tpl, array(
        'date' => $currency->attributes()->Date,
        'value' => $currency->Value,
    ))
на сайте выдает ошибку 500.
Вставляю ; после двух скобок ));, ошибка пропадает.
Но таблица отображается. Но уже с пустыми [[+date]] и [[+value]]. Скриншот: https://skr.sh/sFDGc49PTvC?a.

P.S В сниппет я также добавил строку:
$currency_code = 'R01235';
Думал, что может из-за этого таблица пустая. Но, оказывается не из-за этого.
Роман
01 августа 2022, 11:30
0
Добавьте
'showLog' => 1
И посмотрите, какой запрос формируется.
Константин
01 августа 2022, 11:30
0
Не могу найти такой строчки в сниппете mFilter2
Константин
01 августа 2022, 11:28
0
Добавил, все равно товар дублируется…
Роман
01 августа 2022, 11:16
0
в вызов снипета
'groupby' => 'id',
Константин
01 августа 2022, 11:10
0
groupby — это параметр сниппета? Куда добавить groupby?
Vladimir
01 августа 2022, 11:06
0
Заменил даже саму папку с админкой, всё равно так же белый экран после выбора и не выбирается
Павел Романов
01 августа 2022, 10:27
1
+1
Поскольку тут уже HTML, то через getChunk.
Сниппет:
<?php
$out = '';
$date_start = date('d/m/Y', strtotime('-30 days')); // Дата начала выборки
$date = date('d/m/Y'); // Текущая дата (используется для кэша и для конца выборки)
$cache_time_out = 86400; // Время жизни кэша в секундах
$file_currency_cache = './currency.xml'; // Файл кэша
if(!is_file($file_currency_cache) || filemtime($file_currency_cache) < (time() - $cache_time_out)) {
    $ch = curl_init();
    curl_setopt($ch, CURLOPT_URL, 'https://www.cbr.ru/scripts/XML_dynamic.asp?date_req1='.$date_start.'&date_req2='.$date.'&VAL_NM_RQ='.$currency_code);
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
    curl_setopt($ch, CURLOPT_HEADER, 0);
    $out = curl_exec($ch);
    curl_close($ch);
    file_put_contents($file_currency_cache, $out);
}
$content_currency = simplexml_load_file($file_currency_cache);
$content_currency_result = ''; // Переменная для объединения всех дней в одну группу

foreach($content_currency->Record as $currency) {
    $items .= $modx->getChunk($tpl, array(
        'date' => $currency->attributes()->Date,
        'value' => $currency->Value,
    ))
}	
if($items != '') $out = $modx->getChunk($tplWrapper, array('items' => $items));
return $out;

Вызов:
[[snippetName?
    &tplWrapper=`chunk_wrapper`
    &tpl=`chunk_item`
]]

Чанк chunk_wrapper:
<div class="currency-exchange">
    <div class="ce-title">Таблица изменений курса доллара США за 30 дней</div>
    <table class="table table-condensed ce-table">
        <thead>
            <tr>
                <td>Дата</td>
                <td>Курс рублей за 1 usd</td>
                <td>Изменение</td>
            </tr>
        </thead>

        <tbody>
            [[+items]]
        </tbody>
    </table>
</div>

Чанк chunk_item:
<tr>
    <td>[[+date]]</td>
    <td>[[+value]]</td>
    <td></td>
</tr>
Vladimir
01 августа 2022, 10:00
0
Странно, первый раз такое вижу, сайт полностью обновил до 2,8,4, все плагины обновлены
Артур Шевченко
31 июля 2022, 23:17
0
В документации всё есть.
Дефолтный скрипт отслеживает изменение формы продукта и подгружает данные о модификации.
Для работы скрипта необходимо добавить необходимые классы, пример чанка продукта — gist.github.com/vgrish/b6998560c6a64c0f34109a9e632b9b56
mors
31 июля 2022, 23:14
0
Как в итоге сделали?
Ilya
31 июля 2022, 23:11
0
Павел, а как быть с выводом данных в таблицу? В обычном php файле, следующий код работает, но используя в сниппете выходит ошибка return;1.
<?php
function get_currency_td($currency_code = 'R01235') {

$date_start = date('d/m/Y', strtotime('-30 days')); // Дата начала выборки
	$date = date('d/m/Y'); // Текущая дата (используется для кэша и для конца выборки)

$cache_time_out = 86400; // Время жизни кэша в секундах

$file_currency_cache = './currency.xml'; // Файл кэша

if(!is_file($file_currency_cache) || filemtime($file_currency_cache) < (time() - $cache_time_out)) {

$ch = curl_init();

curl_setopt($ch, CURLOPT_URL, 'https://www.cbr.ru/scripts/XML_dynamic.asp?date_req1='.$date_start.'&date_req2='.$date.'&VAL_NM_RQ='.$currency_code);

curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);

curl_setopt($ch, CURLOPT_HEADER, 0);

$out = curl_exec($ch);

curl_close($ch);

file_put_contents($file_currency_cache, $out);

}

$content_currency = simplexml_load_file($file_currency_cache);

$content_currency_result = ''; // Переменная для объединения всех дней в одну группу

foreach($content_currency->Record as $currency) {

$content_currency_result .= '<tr><td>'.$currency->attributes()->Date.' </td><td> '.$currency->Value.'</td><td></td></tr>';

}

return $content_currency_result;

}

?>
<div class="currency-exchange">

<div class="ce-title">Таблица изменений курса доллара США за 30 дней</div>

<table class="table table-condensed ce-table">

<thead>

<tr>

<td>Дата</td>

<td>Курс рублей за 1 usd</td>

<td>Изменение</td>

</tr>

</thead>

<tbody>

<?php echo get_currency_td('R01235'); ?>

</tbody>

</table>
</div>
Оставив только php код в сниппете и переносив html код в шаблон, пробовал использовать setPlaceholders, но с таблицей не получается. Данные отображаются внутри одного
<tr>
<td></td>
<td></td>
<td></td>
</tr>
Вот скриншот: https://skr.sh/sFCZaUMux90?a
А необходимо чтобы данные распределились в отдельные tr td.

Предполагаю, что тут уже без чанка/ов не обойтись, верно?
Если да, то как это реализовать? Заранее спасибо!
Артур Шевченко
31 июля 2022, 22:31
0
Я не говорил, что мой вариант проще, я говорил, что Ваш вариант неправильный и костыльный, да к тому же не работает. А если сделать правильно, то всё будет работать. Но раз у вас полтора десятка лет за плечами, я не буду лезть к Вам со своими советами.
Сергей
31 июля 2022, 21:57
0
ошибочно
Ilya
31 июля 2022, 20:27
0
Павел, большое вам спасибо за помощь! Все отлично работает.
Ilya
31 июля 2022, 20:26
0
Не знаю, что сделал, но теперь уже работает.
tracersani
31 июля 2022, 19:51
+1
На MODX 2.8.4 ломает админку.
Сбрасывал кэш, обновлял etc 0 толку.

Кто столкнулся с подобным, через PMA (напр.) меняем в базе manager_theme => value на default
Удаляем содержимое папки /core/cache/ и обновляем страницу.