vectorserver

vectorserver

С нами с 12 декабря 2018; Место в рейтинге пользователей: #44
vectorserver
30 ноября 2022, 06:53
1
+2
Нужно еще просто было указать в параметрах, еще один ключ stage

$params = array(
    'crontab' => true,    
    'stage' => 'new_session',
    'id' => 2,
);


Готовый рабочий вариант:
<?php
define('MODX_API_MODE', true);
require '../index.php';

/* @var modX $modx */

//Дадим права админа навыполнение процессора
$modx->user = $modx->getObject('modUser', 1);

//id строки в таблице (колонка ID), таб "Прайс-листы"
$row_ID = 2;

/** @var msPriceList $msPriceList */
$msPriceList = $modx->getService('msPriceList', 'msPriceList', MODX_CORE_PATH . 'components/mspricelist/model/');

$corePath = $modx->getOption('mspricelist_core_path', null, $modx->getOption('core_path') . 'components/mspricelist/');
$path = $modx->getOption('processorsPath', $msPriceList->config, $corePath . 'processors/');


/* @var modX $modx */
$params = array(
    'crontab' => true,
    'stage' => 'new_session',
    'id' => $row_ID,
);

/* @var modProcessorResponse $response */
$response = $modx->runProcessor('mgr/file/export', $params, array(
    'processors_path' => $path
));

if ($response->isError()) {
    die($response->getMessage());
} else {
    echo json_encode($response->response);
}
Alexey
28 ноября 2022, 18:26
1
+2
Рабочее решение, благодарность @vectorserver:

define('MODX_API_MODE', true);
require '../index.php';

$modx->user = $modx->getObject('modUser', 1);

$msPriceList = $modx->getService('msPriceList', 'msPriceList', MODX_CORE_PATH . 'components/mspricelist/model/');
$modx->lexicon->load('mspricelist:default');

$corePath = $modx->getOption('mspricelist_core_path', null, $modx->getOption('core_path') . 'components/mspricelist/');
$path = $modx->getOption('processorsPath', $msPriceList->config, $corePath . 'processors/');

$params = array(
    'crontab' => true,
    'id' => 2,
);

/* @var modProcessorResponse $response */
$response = $modx->runProcessor('mgr/file/export', $params, array(
    'processors_path' => $path
));

if ($response->isError()) {
    die( $response->getMessage() );
} else{
    echo "cron OK";
}
vectorserver
12 октября 2022, 08:43
2
0
В Fenom можно напрямую использовать условный тернарный оператор, не создавая чанк:
{'!getImageList' | snippet : [
    'tvname' => 'test',
    'tpl' => '@CODE: <input type="checkbox" {$check == 1 ? "checked" : ""} >'
    ]
}
Через обычный парсер, нужно создавать чанк и уже в нем прописывать условия
Snippet:
[[!getImageList?
        &tvname=`test`
        &tpl=`option_tpl`
]]
Chunk option_tpl:
<input type="checkbox" [[+check:is=`1`:then=`checked`:else=``]] >
Проверил у себя на тестовом сервере все работает!

Настройки MIGX:
Вкладки формы
[
  {
    "caption": "Заголовок",
    "fields": [
      {
        "field": "image",
        "caption": "Изображение",
        "inputTVtype": "text"
      },
      {
        "field": "check",
        "caption": "checkDATA",
        "inputTVtype": "listbox",
        "inputOptionValues": "Да==1||Нет==0"
      }
    ]
  }
]
Разметка колонок:
[{
  "header": "Изображение",
  "dataIndex": "image"
},{
  "header": "checkDATA",
  "dataIndex": "check"
}]
vectorserver
31 марта 2022, 13:26
1
0
Накидал сниппет на коленке.

Вызов сниппета:
&input — Исходный ролик
&default — другое зеркало ролика
[[ytTest? &input=`https://www.youtube.com/watch?v=BCwkRcDlo2k` &default=`https://www.youtube.com/watch?v=tu-hhC_PNEg`]]
Код сниппета:
<?php
//Snippet ytTest
/**
 * @param $yt_source
 * @return false|mixed
 */
function ytTest($yt_source){

    //Парсинг YT ID
    preg_match("#(?<=v=)[a-zA-Z0-9-]+(?=&)|(?<=v\/)[^&\n]+|(?<=v=)[^&\n]+|(?<=youtu.be/)[^&\n]+#", $yt_source, $matches);

    $yt_id = $matches[0];

    if(!$yt_id) return false;

    $yt_image = "https://img.youtube.com/vi/{$yt_id}/default.jpg";

    file_get_contents($yt_image, false, stream_context_create(['http' => ['ignore_errors' => true]]));

    $check = $http_response_header[0];

    return ($check === "HTTP/1.0 200 OK")? $yt_source : false;
}

/** @var TYPE_NAME $input */
/** @var TYPE_NAME $default */
return ytTest($input) ? ytTest($input) : $default;
vectorserver
14 февраля 2022, 13:57
1
0
Я бы сделал прослушку на nodejs, и повесил бы к примеру на node.localhost:3000 и потом через плагин отправлял бы данные.

<?php

$eventName = $modx->event->name;
switch($eventName) {
    case 'OnWebLogin':
        
        // хук на вход http://node.localhost:3000/?userID=1&login=1
        break;
    case 'OnWebLogout':

        // хук на выход http://node.localhost:3000/?userID=1&logout=1
        break;
}

NodeJS
const http = require("http");
 
http.createServer(function(request, response){
     
    console.log("Url: " + request.url);
    console.log("Тип запроса: " + request.method);
    console.log("User-Agent: " + request.headers["user-agent"]);
    console.log("Все заголовки");
    console.log(request.headers);
     
    response.end();
}).listen('node.localhost',3000);
vectorserver
14 февраля 2022, 12:37
1
0
Я использовал в свое время, для синхронизации товаров, точно не помню, вот накидал на коленке.
Работает :)

Пример:
<?php
//Файл дампа времменый
$dump = __DIR__ . "/test_.sql";

//Экспорт из бд №1 таблицы modx_users, modx_user_group_roles
$export_db = exportDatabase('localhost', 'root', '', 'modx', array('modx_users', 'modx_user_group_roles'), $dump);

//Импорт в бд №2
$import_db = importDatabase('localhost', 'root', '', 'remote_modx', $dump);

function importDatabase($host, $user, $password, $database, $backupFilePath)
{

    $password = ($password) ? "-p$password" : "";
    $cmd = "mysql -u {$user} {$password} {$database} < $backupFilePath";
    return exec($cmd) === 0;
}

function exportDatabase($host, $user, $password, $database, $tables, $targetFilePath)
{

    $cmd = "mysqldump --host {$host} --user {$user} ";
    if ($password) {
        $cmd .= " --password {$password} ";
    }
    $cmd .= " {$database} ";

    if ($tables) {
        $cmd .= implode(" ", $tables);
    }

    $cmd .= " > {$targetFilePath}";

    return exec($cmd) === 0;
}
Илья Уткин
10 января 2022, 15:20
2
+5
Есть же метод parsePropertyString — он как раз составит массив из MODX-синтаксиса. То есть что-то типа такого

<?php
$parser = $modx->getParser();
$html = '[[!pdoResources?
	&parents=`1`
	&depth=`0`
	&tpl=`ListRowTpl`
	&tplWrapper=`@INLINE [[+output]]`
	&includeTVs=`image`
]]';

$properties = $parser->parsePropertyString($html);

Там же можно подсмотреть, как MODX определяет тип элемента — в методе processTag
Руслан Алеев
20 ноября 2017, 16:13
2
+1
Здравствуйте!
1) в MODX есть несколько методов фильтрации символов в URL — я ставлю alphanumeric (только буквы и цифры), см. в «Системные настройки -> Дружественные URL -> Метод фильтрации символов в псевдонимах» и править friendly_alias_restrict_chars_pattern не нужно.
2) Чтобы поправить транслитерацию символов заходите в /public_html/core/components/translit/model/modx/translit/tables/russian.php и правите на нужное сочетание, но при обновлении, как выше обсуждалось, может слететь, хотя translit не обновлялся, по-моему, никогда :)