2014-11-07 1 views
2

Я использую keystonejs и CloudinaryImages для создания галереи изображений.Галерея изображений с надписью с использованием CloudinaryImage on keystonejs

{ type: Types.CloudinaryImages } 

Мне нужна возможность добавить подпись к изображениям.

Я тоже читал это: https://github.com/keystonejs/keystone/pull/604

, но я не мог понять, если этот вариант уже на месте или нет.

Любая идея? Спасибо.

+1

Я сейчас изучаю проблему. Добавление описания ко всей галерее довольно просто: все, что вам нужно сделать, - это изменить модель галереи в 'models/Gallery.js', чтобы добавить поле типа' Types.Textarea', а затем изменить шаблон галереи, чтобы отобразить описание, и вы настроены. Но добавление заголовка к * каждому * изображению является гораздо более сложной задачей, поскольку для добавления описания потребуется какой-то интерфейс, а затем сохранить данные в базе данных. – MaxArt

+0

Что вы подразумеваете под «caption»? какой-нибудь текст на веб-странице рядом с изображением, который его описывает? какой-нибудь текст? некоторый заголовок текста? их сочетание? –

+0

Я имею в виду текст, связанный с каждым изображением. На данный момент вы можете добавить общее поле, описывающее галерею, но связать описание с загруженным изображением невозможно. – Katie

ответ

2

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

Это может быть больше, чем вы ищете, но вот модель изображения:

var keystone = require('keystone'), 
Types = keystone.Field.Types; 

/** 
* Image Model 
* ================== 
*/ 

var Image = new keystone.List('Image', { 
    map: { name: 'name' }, 
    autokey: { path: 'slug', from: 'name', unique: true } 
}); 

Image.add({ 
    name: { type: String, required: true }, 
    image: { type: Types.CloudinaryImage, autoCleanup: true, required: true, initial: false }, 
    description: { type: Types.Textarea, height: 150 }, 
}); 

Image.relationship({ ref: 'Gallery', path: 'heroImage' }); 
Image.relationship({ ref: 'Gallery', path: 'images' }); 

Image.register(); 

И Галереи, содержащие эти изображения выглядит следующим образом:

var keystone = require('keystone'), 
Types = keystone.Field.Types; 

/** 
* Gallery Model 
* ============= 
*/ 

var Gallery = new keystone.List('Gallery', { 
    map: { name: 'name' }, 
    autokey: { path: 'slug', from: 'name', unique: true } 
}); 

Gallery.add({ 
    name: { type: String, required: true}, 
    published: {type: Types.Select, options: 'yes, no', default: 'no', index: true, emptyOption: false}, 
    publishedDate: { type: Types.Date, index: true, dependsOn: { published: 'yes' } }, 
    description: { type: Types.Textarea, height: 150 }, 
    heroImage : { type: Types.Relationship, ref: 'Image' }, 
    images : { type: Types.Relationship, ref: 'Image', many: true } 
}); 

Gallery.defaultColumns = 'title, published|20%, publishedDate|20%'; 
Gallery.register(); 

Вам нужно будет создать Template Views и Routes to Handle this, но это не слишком большая работа - это только модели. Сообщите мне, если вы хотите, чтобы я опубликовал маршруты, которые я использую для этого, я использую Handlebars для своих просмотров, поэтому это может быть не так полезно.

+0

Привет, спасибо за ваш ответ. Я уже использовал аналогичное решение, используя модели изображений и галереи. В будущем было бы очень приятно использовать Types.CloudinaryImages и может добавлять непосредственно описание для каждого изображения. – Katie

+0

Можете ли вы также научить нас тому, где строить представления и маршруты для обработки этих @Codermonk. –

+0

HOw, должен ли я обрабатывать маршруты? @Katie –

Смежные вопросы