Как импортировать изображение в Wix Data Collection? - PullRequest
0 голосов
/ 26 марта 2020

У меня есть коллекция Wix (видимая в Content Manager) под названием «Гости», которая включает столбец типа Изображение . Я хочу импортировать файл CSV таким образом, чтобы внешнее размещенное изображение было загружено в Wix и сохранено в этом поле.

Я могу импортировать файл CSV со значением столбца изображения, установленным на external URL, но файл изображения не импортируется в Wix (т. е. файл изображения извлекается с внешнего сайта при каждом его использовании).

Я пытался написать myCollection_beforeInsert() хук для позвоните wixMediaManager.importFile() и используйте возвращенный fileUrl, но Wix не распознает мое значение как изображение.

  • Если я установлю ее в строку, такую ​​как 'wix:image://v1/{fileUrl}', Wix будет жаловаться: «Тип значения ячейки - текст." *, Wix жалуется: «Тип значения ячейки - JS Объект».
  • РЕДАКТИРОВАТЬ: когда я вручную устанавливаю изображение, а затем экспортирую в CSV, формат 'wix:image://v1/{fileUrl}/{fileName}#originWidth={width}&originHeight={height}'. Я пробовал это, но ширина и высота изображения не возвращаются из метода importFile(), поэтому он все еще распознается как текст.

Какие другие мои варианты для установки значения поля изображения? Документы неясны. https://www.wix.com/corvid/reference/wix-data.html

error message in Wix Content Manager

1 Ответ

0 голосов
/ 27 марта 2020

Я получил эту работу,

  1. , импортировав CSV с полем "imageUrl", затем
  2. импортируя каждый файл (асинхронно) и
  3. присоединение каждого импортированного файла к полю «изображения» соответствующего элемента данных.

Сначала я импортировал CSV с полем "imageUrl".

Затем я вызвал кусок кода (я поместил его в $w.onReady() страницы, но вы можете поместить его где угодно), чтобы вызвать importFile() с дополнительным контекстом:

function importImages() {
    wixData.query("myCollection")
        .isEmpty("image")
        .isNotEmpty("imageUrl")
        .find() // max 1000 items
        .then(result => Promise.all(result.items.map(item => {
            return mediaManager.importFile('/images', item.imageUrl, {
                "mediaOptions": {
                    "mediaType": "image"
                },
                "metadataOptions": {
                    "context": {
                        "itemId": item._id // <-- this is how we know which item to update later
                    }
                }
            });
        }));
}

И я зарегистрировал прослушиватель событий для события onFileUploaded Wix , чтобы обновить поле изображения для соответствующего элемента данных.

export function wixMediaManager_onFileUploaded(event) {
    if (event.context.itemId) {
        // get where item._id === event.context.itemId
        return wixData.get("myCollection", event.context.itemId, { suppressAuth: true })
            .then(itemToUpdate => {
                // set the "image" field
                itemToUpdate.image = event.fileInfo.fileUrl;
                return wixData.update("myCollection", itemToUpdate, { suppressAuth: true });
            });
    }
}
...