Всего 125 673 комментария

Anton
10 июня 2021, 17:39
0
В общем, реализовал так:
1. Создал группы ресурсов и пользователей.
2. Создал ресурсы, к которым открыл доступы нужным группам (ведь 1 пользователь может состоять в нескольких группах).
3. С помощью сниппета «FileDownload R» сделал вывод нужной директории с ftp.
4. С помощью .htaccess закрыл листинг этой директории.
5. Ну и стандартная логин-форма из сниппета «Login».

Теперь вопрос. Это безопасно?
Александр Мельник
10 июня 2021, 17:04
0
Да, документация по функции readfile() не обманула, оперативной памяти расходуется мало в момент отдачи файла, но… процессор сервера кладет в 100%.
На сервере с такими характеристиками
«Процессор1 x 2.8 ГГц
Оперативная память 1 ГБ
NVMe 10 ГБ»
отдача даже одного файла приводит к полной загрузке процессора.
R2m0x94 (Vasily)
10 июня 2021, 14:44
0
Т.е сначала вызываю msProducts
&where=`{ "id:IN":[{$_modx->resource['dopid']}]}`

Далее
{'!msProductKits' | snippet : [
    'tplWrapper' => 'outerTpl',
    'mode' => 'owner',
    'tpl' => 'tpl.msProductKits.Item2',
    'sortby' => 'id',
    'sortdir' => 'asc',
]}
Хороший компонент. Спасибо :)
Наумов Алексей
10 июня 2021, 09:10
0
Вы же запускаете сниппет в контексте mgr, верно?
Там нет $modx->resource, здесь и возникает ошибка…
Роман
10 июня 2021, 09:04
0
Попробуйте в первую очередь почистить кэш. В админке есть фотографии у товаров? В базе посмотрите, в таблице modx_ms2_products, поля image и thumb. Есть ли там значения. Если что пишите на почту, помогу: nokerka[at]ya.ru
Игорь
10 июня 2021, 09:01
0
вот без этой строчки в сниппете:
$resource = intval($modx->getOption('resource', $scriptProperties, $modx->resource->get('id'), true));
работает почему-то
Наумов Алексей
10 июня 2021, 08:59
0
Добрый день.
Я так понимаю, у вас там некий файл с кодом, где нужны id товаров?

Сделайте запрос в бд напрямую, не запускайте сниппет.
Вот вырезка кода, только поправьте ее, я просто скопировал кусок:
// addPackage для загрузки модели
$modx->addPackage('msproductkits', MODX_CORE_PATH . 'components/msproductkits/model/');

// Build query
$c = $modx->newQuery('msProductKitItem');
$c->select($modx->getSelectColumns('msProductKitItem', 'msProductKitItem'));
$c->where(['active' => 1, $mode => $resource]);
$kitItems = $modx->getIterator('msProductKitItem', $c);
// далее foreach
Роман
10 июня 2021, 08:59
0
Есть поле createdby по нему и отбирайте.
Как-то так наверно:
[[pdoResources?
&parents=`0`
&tpl=`resourcesTpl`
&where=`{ "createdby":"1" }`
]]
Игорь
09 июня 2021, 21:09
0
Здравствуйте.
Есть форма распечатывания заказа из админки по методу modx.pro/howto/17280.
Пытаюсь добавить туда состав комплекта — мне нужно просто получить список id товаров, включенных в комплект. Но, почему-то сниппет
{$ids = $_modx->runSnippet('!msProductKits', ['mode' => 'owner','ids' => 1,'resource' => $prodid])}
в данном чанке не срабатывает (на страницах сайта во фронтенде работает нормально).
Как ещё можно получить id товаров из комплекта?
R2m0x94 (Vasily)
09 июня 2021, 18:05
0
В моём случае мне хватило вывести так (в tv на админке для возможных значений в списке):
<?php
// [[!tvLabelnameCountry? &tvVal=`[[+tv.vendor_address]]`]]
$tvArr = explode('||', $tvVal);

foreach($tvArr as $n => $v) {
   echo strstr($v, '=', true);
}

А, так как задача с поставщиками и производителями перешла на ms2 в связке с ресурсами, то пришёл к такому результату, так как с id-шниками не стал заморачиваться, но потребовалось просто вывести страну [[+vendor.country]]:
<?php
/**
 * Получаем страну производителя из настроек ms2 по имени $name. 
 * Если используется для поставщика, то имя может отсутствовать, поэтому ничего не выводим.
 * Если же необходимо получить по id, то 'name' заменить на 'id' (Тodo: Кастумизация)
 * 
 * $page = $modx->getObject('modResource', ['id' => 13]);
 * $output = $page->get('pagetitle');
 * 
 * return $output;
 * 
 * Пример вызова:
 * [[!msVendorCountry? &name=`{$purveyor | resource : "pagetitle"}`]]
 * {'!msVendorCountry' | snippet : ['name' => $purveyor | resource : "pagetitle"]}
 * 
 */

//$name = 'Sony';
$vendor = $modx->getObject('msVendor', ['name' => $name]);
if (!is_object($vendor)) {
    return '';
}
$output = ', '.$vendor->get('country');
return $output;

Код чанка в чанке с mFilter2:
{if $_pls['tv.purveyor']!= ''}
   {foreach $key as $purveyor index=$index}
        {$purveyor | resource : "pagetitle"}{'!msVendorCountry' | snippet : ['name' => $purveyor | resource : "pagetitle"]}
    {/foreach}
{/if}
Михаил
09 июня 2021, 12:34
0
Привет! Запоздалое (уезжал) большое спасибо, да костыль небольшой, зато работает как надо!
Александр Быковский
09 июня 2021, 11:50
0
Добрый день. Тоже подключился к данной теме по просьбе) Дополнения последние msMultiCurrency и Polylang. У У ссылок класс polylang-toggle как и в trigger. Событие OnTogglePolylangLanguage для плагина из документации. Но переключение валюты при смене языка не происходит
Роман
09 июня 2021, 09:12
0
Может просто добавить:
$modx->resource->set("dataMeta", $dataMeta);
Александр Мельник
08 июня 2021, 20:59
0
Спасибо Сергей большое.
Я через поиск находил примерно эти же страницы, но просто работа над проектом еще не начата и я только вскользь ознакамливался с этой темой.
Набросал отдачу через file_put_content() и она работала хорошо, но я пробовал файлы около 100 мегабайт, а у меня предвидятся файлы с видеозаписями по 2-3 гигабайта, причем доступ к ним может быть сразу у сотни пользователей одновременно.
И иногда видеофайл нужно отдать на скачивание, а иногда его нужно запустить на воспроизведение в браузере и здесь я снова плаваю в теории, насколько я понимаю для воспроизведения в браузере как раз хорошо если буферизация включена.
В общем уже буду более детально вникать когда подпишем договор на эту работу.
Сергій
08 июня 2021, 20:53
0
Мне нужно код посмотреть. Логи проверить.
Игорь
08 июня 2021, 20:51
0
А почему здесь не хотите помочь?
Сергей Шлоков
08 июня 2021, 20:06
0
Из документации
readfile() сама по себе не приводит к каким-либо проблемам с памятью, даже при отправке больших файлов. При возникновении ошибки превышения памяти убедитесь, что буферизация вывода отключена с помощью ob_get_level().
Там же в комментациях как отдавать файл частями.

Есть ещё такой вариант.
Andrey
08 июня 2021, 19:08
0
спасибо добрый человек за более сокращенный вариант… я разобрался уже, там куча родителей было, забыл вписать именно того, который отвечал за вывод Тикетов :DDD