Финансовая поддержка VPS, бесплатные дополнения и docs Донаты оплачивают сервер и двигают бесплатные дополнения MODX и документацию. Поддержать

Всего 126 145 комментариев

Мордынский Николай
Мордынский Николай
так вы бы выложили бы решение для соплеменников то)) повидимому вы это делали для умных выпадающих списков опций товара (либо фильтров) в любом случае думаю многим бы пригодилось для общего развития)
Сергей Фартушный
Сергей Фартушный
в том то и проблема, что нужны не только json поля, но и обычные. Немного изменил логику скрипта, теперь вопрос актуален только в качестве информации на будущее.
В любом случае спасибо за ответ.
Clean
Clean
Спасибо за наводку, все сделал, все ОК.

Тем кто только собирается, у Киви есть одна бага-у них SOAP схема 1.2 а в описании 1.1
Это разные вещи, поэтому если в ходе выполнения Xml вернуло вот такую херню:

SOAP-ERROR: Parsing WSDL: Could not find any usable binding services in WSDL.
то нужно в IShopClientWS.wsdl
поменять
<soap12:binding style="document" transport="http://www.w3.org/2003/05/soap/bindings/HTTP/"/>
на
<soap12:binding style="document" transport="http://schemas.xmlsoap.org/soap/http"/>
Сергей Фартушный
Сергей Фартушный
<?php
$q = $modx->newQuery('msProductData');
$q->select(array('DISTINCT msProductData.color'));
$colors = array();
if ($q->prepare() && $q->stmt->execute()){
foreach($q->stmt->fetchAll(PDO::FETCH_ASSOC) as $color) {
if($color['color'] === NULL || $color['color'] == '[""]') continue;
$colors = array_merge($colors, json_decode($color['color']));
}
}
var_dump(array_unique($colors));
Есть другая проблема. Как выбрать одним запросом уникальные значения из нескольких полей той же таблицы, но не уникальные комбинации этих полей, а именно все уникальные значения каждого поля и одним запросом? Может кто подскажет?
Александр Донский
Александр Донский
Когда я устанавливал Tickets, просматривал видео несколько раз и разбил для себя на шаги, возможно это поможет:
  1. на странице создания топиков (на видео это главная страница Home) вызываем сниппет TicketForm
  2. создали шаблон Ticket — шаблон для топика
  3. в нем вызвали чанк Content.ticket (который еще не создан)
  4. создали шаблон Main
  5. в настройках системы указали шаблон Ticket для тикетов
  6. на главную страницу добавляем авторизацию (например, HybridAuth или Loginza)
  7. создаем новую группу, указываем права
  8. авторизуемся на сайте
  9. создаем раздел тикетов с шаблоном Main
  10. создаем копию чанка Content, переименовываем его Content.ticket, в этот чанк добавляем вызов снипета TicketComments
Denys Butenko
Denys Butenko
В чанке создания тикета добавь input с типом file и name, например, photo:
<input type="file" name="photo">
Дальше, добавь enctype атрибут для формы.
<form method="post" enctype="multipart/form-data" action="[[~[[*id]]]]">
Дальше в плагине добавляем обработку загрузки изображения:
case 'OnDocFormSave':
      // Указываем путь, пробовал $modx->getOption('assets_url').'path/to/dir/';
      // получается со слэшем вначале: /assets/images/.
      $path = 'assets/images/'; 
      if($mode == 'new'){  // Режим создания документа
        if (!empty($_FILES)) {  // Проверка на пустоту массива $_FILES
          @mkdir($path, 0777, true); // Создаем папку для хранения изображений, с правами 0777, третий аргумент - рекурсивное создание папок.
          foreach($_FILES as $k => $v) {
            $name = $v['name'];
            $size = $v['size'];
            $tmp = $v['tmp_name'];

            $ext = pathinfo($name, PATHINFO_EXTENSION); //получаем расширение файла
            $hash = md5(time().$name.$size); // новое название файла
            $uploadfile = $path.$hash.$ext; // объединяем в конечный путь к файлу

            if (copy($tmp, $uploadfile)) { // копируем изображения из временной папки в нужное место
              $resource->set('photo', $uploadfile); 
              $resource->save(); // Сохраняем объект.
            }
          }
        }
      } else {
        //resource update
      }
Ну, а дальше, уже сам проверки на расширение, размер и т.д. добавь.