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

Александр Мельник
10 июня 2021, 18:21
0
Существенно ниже при отдаче как статики, около 15 процентов нагрузки на процессора от nginx процесса.
Конечно сервер самый простенький, но зато на нем более показательные получаются результаты. Раз одноядерный процессор может уйти в 100 процентов от отдачи одного файла, то значит нельзя рассчитывать только на вертикальное масштабирование сервера.
Даже если установить 16 ядер то 20 пользователей, которые примерно одновременно запросят на выдачу файл — уложат и 16 ядер легко.
Будем думать, к счастью время есть для поиска оптимального решения, возможно напишу линукс демон, который будет в фоновом режиме пережимать видео и с гигабайта останется 300 мегабайт.
Сергей Шлоков
10 июня 2021, 17:54
+1
Вроде норм. Подсмотреть логику скачиваний можно в FileAttach.
Сергей Шлоков
10 июня 2021, 17:49
0
А если для сравнения отдать как статику? Мне кажется, для раздачи больших файлов сервер слабоват.
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
А почему здесь не хотите помочь?