Разделы

  
 

modMediaSource. Непонятное поведение

Ситуация такова. Хочу я синхронизировать TV ресурса с полем в miniShop. TV — тип Image, у которого есть MediaSource «Изображения» с basePath = 'assets/images/'.
Пишу маленький сниппет, для теста:

$imagetv = $modx->getObject('modTemplateVar', array('name'=>'shop.image'));
$its= $imagetv->source;

$mrobj = $modx->getObject('modMediaSource', array('id' => $its));
$mrarr = $mrobj->toArray();
echo $mrarr['properties']['basePath']['value'];

Все работает, на экран выходит assets/images/
Вписываю это дело в плагин, который должен при сохранении документа прописывать в свойство img объекта ModGoods значение MediaSource + значение TV, чтобы получился на выходе полный паф.

$imagetv = $modx->getObject('modTemplateVar', array('name'=>'shop.image'));
$imagetvvalue = $imagetv->getValue($id);
$its= $imagetv->source;

$mrobj = $modx->getObject('modMediaSource', array('id' => $its));
$mrarr = $mrobj->toArray();
$mrpath = $mrarr['properties']['basePath']['value'];
$imgpath = $mrpath.$imagetvvalue;

if ($msres = $modx->getObject('ModGoods', array('gid' => $id))) {
	$msres->set('img', $imgpath);
	$msres->save();
}

Сохраняю плагин, открываю документ, пытаюсь сохранить — вижу процесс без результата: бесконечное бултыхание прогрессбара. Угу, иду смотреть в логи и вижу:

[2012-05-22 07:51:27] (ERROR @ /connectors/resource/index.php) modMediaSource::load() is not a valid static method.
[2012-05-22 07:51:32] (ERROR @ /connectors/resource/index.php) Could not load class: modMediaSource from mysql.modmediasource.

Непонятно! Почему в одном случае работает, а в другом уже нет.

[Revo] Дополнительные поля данных в настройках пользователя. Как получить доступ?

Здравствуйте!

Если я задам дополнительные поля в настройках пользователя. Например вот такое поле (test_name):

Как в сниппете:
1) Получить значение этого поля?
2) Задать новое значение этого поля?
3) Создать новое поле, если оно не было создано через админку?



( Читать дальше )
  • 0
  • 21 марта 2012, 12:54
  • DWand
  • 2

FormIt - вызов через API

Меня интересует может ли FormIt возвращать какой-либо результат после вызова через runSnippet, или каким способом это можно сделать?

Т.е. например, я хочу через аякс отправлять форму и в вызове сниппета осуществлять необходимые манипуляции(хуками) с данными, возвращая статусные сообщения, на текущий момент это все реализуемо с помощью FormIt?
  • +1
  • 10 марта 2012, 10:40
  • Tesby
  • 2

[Evo][Хак] Вынужденная правка API

Буду краток.

На сайте был TV с типом text. В него писались id ресурсов, через запятую. В какой-то момент этот TV стал Listbox. Но в одном из документов по старой памяти сохранилась запись «22,». В итоге, когда вызывался этот TV в шаблоне Ditto (вместе с самописным модификатором PHx), падал сайт с ошибкой Mysql.

Этот безобидный на первый взгляд баг стоил мне суток простоя в работе. Проблема была в том, что документ с ошибкой в TV был одним из нескольких сотен. Вобщем, шанс отыскать его был практически нулевым.

В итоге выяснилось, что в API функции getDocuments нет проверки на такие вещи. Пришлось внести исправления.

Итак, файл document.parser.class.inc.php, строка 1458:


function getDocuments($ids= array (), $published= 1, $deleted= 0, $fields= "*", $where= '', $sort= "menuindex", $dir= "ASC", $limit= "") {
        if (count($ids) == 0) {
            return false;
        } else {
//вот тут я вставил проверку
            /**++**/
            foreach ($ids as $id) {
              if (intval($id) != 0) $newIds[] = intval($id);
            }
            $ids = $newIds;
            /**++**/
//конец правки



Я понимаю, что шанс поймать такие грабли крайне невелик. Но я также помню, что мизера всегда ходят парами. Может быть кому-то и пригодится.
  • +2
  • 2 марта 2012, 05:30
  • alooze
  • 2

$modx->config['site_url'] выдает пустую строку

Использую MODx Evo 1.0.5. В сниппете необходимо получить site_url для дальнейшего использования. Пишу:
$site_url = $modx->config['site_url'];

Но возвращает пустую строку. Подскажите как быть?

P.S. в начале сниппера использую:
session_start();

Может в этот проблема? Тогда как ее решить?

Api Evo -> Revo

Суммарное изменение в API Revo по отношению к Evo
Исходник
Сюда перенести не удалось потому что редактор режет теги(

api revo и evo

В EVO всегда делал так выборку из базы
$d_q = 'SELECT * FROM nedv_site_content';
	$d_a = $modx->db->query( $d_q );
	$count = 1;
	while( $d_ar = $modx->db->getRow( $d_a ) ) {
	}

а как тоже самое сделать на REVO?
никак не смог найти русской документации по api
  • +1
  • 4 декабря 2011, 22:29
  • botik87
  • 6

(Решено) Помогите как узнать ID документа для плагина

Есть плагин TvTable, хочу его немного переделать (добавить выпадающий список)
и не могу узнать id страницы чтоб передать ее через переменную

пробовал
$id = $modx->documentObject['id'];
или
$id = modx-> documentIdentifier;

без толку

айди нужен чтоб передать плагину при работе в админке, не на фронтэнде

[REVO] нужно вывести число дочерних элементов контейнера (частично решено)

Мой первый вопрос тут, если куда-то не туда написал — прошу прощения.

Нужно: вывести число дочерних элементов (желательно только опубликованных) для контейнера.

В Evo у Wayfinder'a был для этого плейсхолдер, в рево почему то убрали.


( Читать дальше )
  • 0
  • 23 ноября 2011, 03:55
  • asx
  • 12

[REVO] как запустить сниппет через api

Существует ли в REVO аналог EVO`вского
$snippet=$modx->runSnippet('snippet_name', $params);

Чего-то вообще не могу понять api осталось прежним или вообще какая-то новая система? И где искать по нему инфу? Хелп, плиз.
  • 0
  • 11 ноября 2011, 13:27
  • banev
  • 4