vectorserver

vectorserver

С нами с 12 декабря 2018; Место в рейтинге пользователей: #44
vectorserver
11 ноября 2022, 21:41
0
Создать сниппет модификатор toJson
<?php
return json_encode($input,JSON_UNESCAPED_UNICODE );
Потом применить модификатор: [[+products:toJson]]
[[!checkSend?
    &orderId=`[[+num]]`
    &subtotal=`[[+total.cart_cost]]`
    &phone=`[[+address.phone]]`
    &email=`[[+user.email]]`
    &products=`[[+products:toJson]]`
    &userName=`[[+address.receiver]]`
]]
Ну а далее в сниппете checkSend декодируешь обратно в массив!
vectorserver
04 ноября 2022, 10:51
0
Вот так:
<?php
$user = $modx->getUser();

$ssid = $user->get('sessionid') ? : $_COOKIE[session_name()];

$session = $modx->getObject('modSession',$ssid);

var_dump($session->toArray());
vectorserver
19 октября 2022, 08:05
0
Этот метод используется для загрузки классов отображения ORD xPDO, которые определяют объекты вашего пакета.
boolean addPackage ([string $pkg = ''], [string $path = ''], [string $tablePrefix = ''])
$modx->addPackage('mypkg',MODX_CORE_PATH.'components/mypkg/model/','mypkg_');
vectorserver
18 октября 2022, 14:16
0
boolean setTVValue (str|integer $tv_name OR ID of TV, string $value)
Тип второго параметра должен быть обязательно строкой!
vectorserver
18 октября 2022, 08:08
+1
Попробуй сохранять булев как строку!
$page = $modx->getObject('modResource', 1);
$page->setTVValue('test', 'true');
vectorserver
18 октября 2022, 08:05
+2
setTVValue — В отличие от некоторых других методов API xPDO, метод немедленно сохраняет значения в базе данных, поэтому не нужно вызывать отдельный вызов метода save().
vectorserver
16 октября 2022, 18:40
0
Все твои хотелки есть во FRED, и там есть функция экспорта твоих собранных тем.

vectorserver
12 октября 2022, 15:55
0
Примерно вот так:
<?Php

$sp = session_save_path();
$dir = opendir($sp);

$all = 0;
$inpage = 0;
while ($file = readdir($dir)) {


    {
        $f = strtok($file, "_");


        if ($f == "sess") {

            $file_ar = file($sp . "/" . $file);
            $all++;

            //Тут условия для ввода на странице
            if (strtok($file_ar[0], "|") == "login") {

                $inpage++;
            }

        }
    }
}
closedir($dir);

echo "Всего на сайте: $all 
";
echo "Смотрят эту страницу: $inpage";
vectorserver
12 октября 2022, 14:36
0
Я показал пример вывода сниппета, религией запрещено чтоле0!?
Можешь парсить JSON через модификатор fromJSON, мне удобнее через сниппет родной!
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
09 октября 2022, 08:12
0
Вот так работает?
<input type="checkbox" [[!+check:notempty=`checked`]] >
vectorserver
06 октября 2022, 04:25
0
🙀 переменную $debug=0;
vectorserver
05 октября 2022, 13:25
0
Тебе дали 100500, подсказок, разжевали как могли!
Изучай документацию, и методы работы с компонентом minishop, если не понимаешь что к чему, пиши в раздел modx.pro/work
vectorserver
05 октября 2022, 11:45
0
Тогда иди в miniShop2 :: Настройки (скрин), создавай доп. опции, потом вызывай из через метод $product->loadData()->get('options') (пример кода ниже)



Пример:
<?php
$debug = 1;
$array_ids = $modx->getChildIds(8,6,array('context' => 'web'));

foreach ($array_ids as $doc_ID){
    /* @var msProduct $product */
    $product = $modx->getObject('msProduct',$doc_ID);
    if($product){

        //tv price
        $tv_price = $product->getTVValue('price');
        //tv available
        $tv_available = $product->getTVValue('available');



        //msProduct price
        $product->set('price',$tv_price);

        //Дополнительные опции товара
        $options = $product->loadData()->get('options');
        //Добавим значение в доп. опцию товара
        $options['available'][0] = $tv_available;
        //Обновим опции
        $product->set('options', $options);
        //Save
        $product->save();

        //debug
        if($debug){

            var_dump($product->toArray());
            break;
        }



    }

}
vectorserver
05 октября 2022, 07:40
+1
Я использовал для наличия товара menuindex, или оставляй в TV как есть.
Все опции товара можно посмотреть через var_dump($product->toArray()) (скрин)


<?php
$parent = 8;
$debug = 1;

/* @var modX $modx*/
$array_ids = $modx->getChildIds($parent,6,array('context' => 'web'));

foreach ($array_ids as $doc_ID){
    /* @var msProduct $product */
    $product = $modx->getObject('msProduct',$doc_ID);
    if($product){
        //FILTERS
        //$dataOpt = $product->getOne('Data');
        //$optionKeys = $dataOpt->getOptionKeys();
        //var_dump($optionKeys);



        //tv price
        $tv_price = $product->getTVValue('price');

        //tv available
        $tv_available = $product->getTVValue('available');

        //msProduct price
        $product->set('price',$tv_price);

        //msProduct available to menuindex
        $product->set('menuindex',$tv_available);

        //Save
        $product->save();

        //debug
        if($debug) var_dump($product->toArray()); break;

    }

}
vectorserver
04 октября 2022, 19:53
+1
А что мешает работать через API!?
Вот пример синхры tv поля price:
<?php
/* @var msProduct $resource */
$resource = $modx->getObject('msProduct', $prod_ID);

//tv
$tv_price = $resource->getTVValue('price');

//Opt
$resource->set('price',$tv_price);

$resource->save();


//debug
var_dump($resource->toArray());
vectorserver
22 сентября 2022, 12:21
0
Для динамического обновления цены доставки в корзине можно использовать такой скрипт:

<select name="shk_delivery">
    <option value=""></option>
    <option id="otherTransport" value="700">Деловые линии</option>
</select>
<script type="text/javascript">
$(document).bind('ready',function(){
    
    let otherTransport =  $('#otherTransport');
    //Запишем цену отданную API сервисом
    otherTransport.val('Тут пишем цену');
    
    $('select[name="shk_delivery"]','#shopOrderForm').bind('change',function(){
        SHK.selectDelivery( $(this).val() );
    });
});
</script>
vectorserver
25 августа 2022, 09:59
+1
Быстрее на CURL, я так думаю конечно)
<?php

/**
 * @param $url
 * @return array
 */

function curlGet($url)
{

    $ch = curl_init();

    curl_setopt($ch, CURLOPT_URL, $url);
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
    curl_setopt($ch, CURLOPT_CUSTOMREQUEST, 'GET');

    curl_setopt($ch, CURLOPT_ENCODING, 'gzip, deflate');

    $headers = array();
    $headers[] = 'Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.9';
    $headers[] = 'Accept-Language: ru,en;q=0.9,ru-RU;q=0.8,en-US;q=0.7';
    $headers[] = 'Cache-Control: no-cache';
    curl_setopt($ch, CURLOPT_HTTPHEADER, $headers);

    $result = array('st' => 'OK', 'data' => curl_exec($ch));
    if (curl_errno($ch)) {
        $result['st'] = 'Error';
        $result['ErrorMsg'] = curl_error($ch);
    }
    curl_close($ch);
    return $result;
}

$xmlData = curlGet('http://www.cbr.ru/scripts/XML_daily.asp?date_req=25.08.2022');
var_dump($xmlData);
vectorserver
19 августа 2022, 11:25
0
Нужно писать плагин, для события 'OnSHKcalcTotalPrice'
Вот пример плагина заготовки:
<?php

/** @var modX $modx */
$eventName = $modx->event->name;


switch ($eventName) {
    /* Рассчет полной цены товаров в корзине. $_SESSION['shk_order'], $price_total. */
    case 'OnSHKcalcTotalPrice':

        /** @var $scriptProperties */
        $price_total = (float)str_replace(array(' ', ','), array('', '.'), $modx->getOption('price_total', $scriptProperties, 0));
        $oldPrice = $price_total;


        /* @todo  тут всякие условия для $_SESSION['shk_order']*/


        $modx->event->output($price_total);

        break;
}
vectorserver
19 августа 2022, 08:37
0
Пути к картинке должны быть не относительными, а полными, пример от ЯД:
<item turbo="true">
  <title>Заголовок страницы</title>
  <link>https://tagil300.ru</link>
  <turbo:content>
    <![CDATA[
      <header>
        <h1>Ресторан «Полезный завтрак»</h1>
        <h2>Вкусно и полезно</h2>
        <figure>
          <img src="https://avatars.mds.yandex.net/get-sbs-sd/403988/e6f459c3-8ada-44bf-a6c9-dbceb60f3757/orig">
        </figure>
        <menu>
          <a href="http://example.com/page1.html">Пункт меню 1</a>
          <a href="http://example.com/page2.html">Пункт меню 2</a>
        </menu>
      </header>
      <p>Как хорошо начать день? Вкусно и полезно позавтракать!</p>
      <p>Приходите к нам на завтрак. Фотографии наших блюд ищите <a href="#">на нашем сайте</a>.</p>
      <h2>Меню</h2>
      <figure>
        <img src="https://avatars.mds.yandex.net/get-sbs-sd/369181/49e3683c-ef58-4067-91f9-786222aa0e65/orig">
        <figcaption>Омлет с травами</figcaption>
      </figure>
      <p>В нашем меню всегда есть свежие, вкусные и полезные блюда.</p>
      <p>Убедитесь в этом сами.</p>
      <button formaction="tel:+7(123)456-78-90"
              data-background-color="#5B97B0"
              data-color="white"
              data-primary="true">Заказать столик</button>
      <div data-block="widget-feedback" data-stick="false">
        <div data-block="chat" data-type="whatsapp" data-url="https://whatsapp.com"></div>
        <div data-block="chat" data-type="telegram" data-url="http://telegram.com/"></div>
        <div data-block="chat" data-type="vkontakte" data-url="https://vk.com/"></div>
        <div data-block="chat" data-type="viber" data-url="https://viber.com"></div>
      </div>
      <p>Наш адрес: <a href="#">Nullam dolor massa, porta a nulla in, ultricies vehicula arcu.</a></p>
      <p>Фотографии — http://unsplash.com</p>
    ]]>
    </turbo:content>
</item>