Как вывести изображения из MIGX ресурсов в таблице Collections?

Понимаю, что с вероятностью 99% надо ковырять свой рендер. Но сам не сдюжу. Подскажите плиз, как надо.
Нужно только первую картинку из списка. Все не надо)
Спасибо
Серый
17 июля 2018, 14:57
modx.pro
3
2 787
+1

Комментарии: 16

Баха Волков
17 июля 2018, 16:18
+1
collections.renderer.migximage = function (value, metaData, record, rowIndex, colIndex, store) {
	if (value != '' && value != null) {
		var jsonString = value;
		var jsonData = JSON.parse(jsonString);
		var link = jsonData[0].image;   // "image" название поля migx где храниться картинка
		return '<img src="' + link + '" width="64">';
	}
};
    Серый
    17 июля 2018, 21:24
    0

    (((

    Collections.renderer.migximage = function (value, metaData, record, rowIndex, colIndex, store) {
    if (value != '' && value != null) {
    var jsonString = value;
    var jsonData = JSON.parse(jsonString);
    var link = jsonData[0].stockList_MIGX;
    return '';
    }
    };
    Может что-то не так прописал?
    Павел Романов
    17 июля 2018, 16:26
    0
    В настройках поля в коллекции можно указать любой сниппет, который будет использоваться в качестве рендера:



    В нем получайте значение поля как $value и формируйте вывод.
    В Вашем случае обрабатываете JSON или просто запускаете getImageList:

    return $modx->runSnippet('getImageList', array(
        'value'=> $value,
        'tpl' => '@CODE: <img src="[[+image]]" />',
        'limit'=> 1
    ));
    Только, если используете в MIGX-TV источник файлов, проверьте пути — скорее всего придётся дописать что-то в шаблон вывода.
      Баха Волков
      17 июля 2018, 16:53
      0
      Не помню, как-то пытался через сниппет, но не заводилось. Поэтому и через js делал
        Баха Волков
        17 июля 2018, 17:06
        0
        Хм, работает
          Баха Волков
          17 июля 2018, 17:33
          0
          Единственное, что из-за простой задачи запускать сниппет необязательно вроде. Делайте так:

          <?php
          $obj = json_decode($value);
          
          return $obj[0]->{'image'};
          Баха Волков
          17 июля 2018, 20:34
          0
          Ну или так:

          <?php
          $obj = json_decode($value);
          
          return $obj[0]->image;
            Серый
            17 июля 2018, 21:22
            0
            Да, надо что-то дописать, и никак не могу нагуглить плейсхолдер для id ресурса. Безрезультатно перепробовал эти: [[+id]], [[*id]], [[+docid]], [[+record.id]]
            А еще страница с этим Collections загружается просто адски долго! Это норма?
              Баха Волков
              17 июля 2018, 22:09
              0
              Сделайте через сниппет

              Вот как Павел сказал, только код вот этот используйте:

              <?php
              $obj = json_decode($value);
              
              return $obj[0]->image; // "image" название поля в migx
              // Если у вас используется другой источник файлов, то
              return 'путь к источнику' . $obj[0]->image;

              Да, надо что-то дописать, и никак не могу нагуглить плейсхолдер для id ресурса. Безрезультатно перепробовал эти: [[+id]], [[*id]], [[+docid]], [[+record.id]]
              Плейсхолдер — где?) Плейсхолдер — куда?) Плейсхолдер — откуда?)

              А еще страница с этим Collections загружается просто адски долго! Это норма?
              Думаю, что нет, если до ваших стараний загружалась быстро, то есть большая вероятность, что вы неправильное что нибудь сделали
                Серый
                18 июля 2018, 08:39
                0
                Плейсхолдер — где?) Плейсхолдер — куда?) Плейсхолдер — откуда?)
                Картинки загружаются в свой отдельный источник файлов, который генерируется MIGX:
                [[!migxResourceMediaPath? &pathTpl=`stock-photo/{id}/` &createFolder=`1`]]
                Таким образом для каждого ресурса из таблицы Collections есть свой id, вот его плейсхолдер для написания пути к файлу я не могу подобрать. Он мне файл выводит, но просто имя, без пути. Могу папку написать, но как оформить id — не знаю. Безрезультатно перепробовал эти: [[+id]], [[*id]], [[+docid]], [[+record.id]]
                Например:
                <?php
                return $modx->runSnippet('getImageList', array(
                    'value'=> $value,
                    'tpl' => '@CODE: <img src="/stock-photo/[[+record.id]]/[[+image]]" />',
                    'limit'=> 1
                ));
                Спасибо
                  Баха Волков
                  18 июля 2018, 09:27
                  1
                  +1
                  <?php
                  $obj = json_decode($value);
                  
                  return '/stock-photo/' . $scriptProperties['row']['id'] . '/' . $obj[0]->image;
                    Серый
                    18 июля 2018, 09:52
                    0
                    Ур-ра! Зарабо-отало! (голосом кота Матроскина)
                    Итак, в итоге:
                    <?php
                    $obj = json_decode($value);
                    
                    return 'stock-photo/' . $scriptProperties['row']['id'] . '/' . $obj[0]->image;
                    а для строки в столбцах Collection помимо сниппета, еще добавил Collections.renderer.image

                    Рендерит шустро!
                    Но вот если бы еще можно было сделать через getImageList, да с tpl'кой!
                    Я б там зараз 4 штуки красиво запузырил бы квадратиком 2х2)))
                      Баха Волков
                      18 июля 2018, 10:43
                      0
                      Ну а кто мешает?

                      <?php
                      return $modx->runSnippet('getImageList', array(
                          'docid' => $scriptProperties['row']['id'],
                          'tvname' => 'название_тв',
                          'tpl' => 'название чанка или инлайн',
                          'limit'=> 4
                      ));
                        Баха Волков
                        18 июля 2018, 10:48
                        1
                        0
                        а для строки в столбцах Collection помимо сниппета, еще добавил Collections.renderer.image
                        Не нужно.

                        Сделать нужно так,
                        <?php
                        $obj = json_decode($value);
                        
                        return '<img src="stock-photo/' . $scriptProperties['row']['id'] . '/' . $obj[0]->image . '" />';
                        ну или как я написал выше
                          Серый
                          18 июля 2018, 15:34
                          2
                          +1
                          Вай-бай-бай, какая же красотища у нас с вами получилась, уважаемые коллеги! :-D


                          Код использовал уот такой:
                          <?php
                          return $modx->runSnippet('getImageList', array(
                              'docid' => $scriptProperties['row']['id'],
                              'tvname' => 'stockList_MIGX',
                              'tpl' => '@CODE:<div style="background-image: url(/[[+image]]);background-position: top center;background-size: cover;background-repeat: no-repeat;width:50%;float:left;padding-bottom:50%;border:1px solid #fff;box-sizing: border-box;"></div>',
                              'limit'=> 4
                          ));

                          Категорически огромное вам человеческое спасибо!
              Баха Волков
              18 июля 2018, 17:12
              0
              Пожалуйста
                Авторизуйтесь или зарегистрируйтесь, чтобы оставлять комментарии.
                16