2016-08-18 3 views
1

Я новичок в разработке Keystone.js и Mongodb/nodejs, но мне это уже нравится.Проблема с отображением изображений галереи с описанием в Keystone.js

Я пытаюсь изменить поведение галереи по умолчанию в Keystone, чтобы добавить имя и описание к каждому из изображений в галерее, так как «Типы.CloudinaryImages», похоже, не позволяют этого. Как найдено на Image gallery with caption using CloudinaryImage on keystonejs Я добавил новую модель «Изображение» и изменил маршрут для моей домашней страницы (где должны отображаться галереи).

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

Галерея Модель

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

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

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

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


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

Изображение Модель

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


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

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

Image.add({                                   
name: { type: String, required: true },                           
publishedDate: { type: Date, default: Date.now },                         
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(); 

Маршрут: index.js

var keystone = require('keystone'),                             
Gallery = keystone.list('Gallery'),                            
Image = keystone.list('Image');                             

exports = module.exports = function (req, res) {                          

    var view = new keystone.View(req, res);                          
    var locals = res.locals;                              

    // locals.section is used to set the currently selected                      
    // item in the header navigation.                            
    locals.section = 'home';                              
    locals.galleries = [];                               

    //Loading the galleries                              
    view.on('init', function(next){                            

     var q = Gallery.model.find()                            
      .populate('heroImage images')                           
      .sort('sortOrder');                              

      q.exec(function(err, results) {                           
       console.log(results);                            
       locals.galleries = results;                           
       next(err);                               
      });                                  
    });                                   


    // Render the view                                
    view.render('index');                               
}; 

Просмотр шаблона: index.jade

//Portfolio section                                
section.grid#portfolio                                
     if galleries.length                              
       each gallery in galleries                           
           if gallery.exists                         
            figure.effect-portfolio.wow.fadeInDown(data-wow-duration="1500ms")            
             img(src=gallery._.heroImage.limit(680,680))                

             each image in gallery.images                    
              figcaption                        
              a(href=image.limit(1024,768), title=gallery.name, data-lightbox-gallery="gallery1", data-lightbox-hidpi=image.limit(300,300))                                
           else                            
            h4.text-muted There are no images to display                  

     else                                  
       h4.text-muted There are no image galleries yet. 

Спасибо большое заранее за вашу помощь!

ответ

1

После того, как вы попробовали разные варианты, я нашел рабочее решение. Это может быть не самое лучшее, так что, если кто-нибудь, как любые дополнительные замечания, чтобы я был благодарен.

Рабочее решение: Я изменил шаблон нефрита, чтобы изменить URL-адрес источника изображения.

//Portfolio section                                
section.grid#portfolio                                
     if galleries.length                              
       each gallery in galleries                           

            figure.effect-portfolio.wow.fadeInDown(data-wow-duration="1500ms")            
             img(src="#{gallery.heroImage.image.secure_url}")               

             each image in gallery.images                    
              figcaption                        
              a(href="#{image.image.url}", title=gallery.name, data-lightbox-gallery=gallery.name, data-lightbox-hidpi="#{image.image.url}")                                

     else                                  
       h4.text-muted There are no image galleries yet. 

Обратите внимание, что выполнение инструкции "if gallery.exists" не работает. Я не могу понять, почему ...

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