第二个窗口就是我追求的目标.我从MetaBox调用框架,我已经成功地让它抓住单个或多个图像并将ID保存为字符串,以及将缩略图直接插入预览框.我找不到任何关于调用Gallery框架的信息.
我目前的代码如下:
jQuery('#fg_select').on('click',function(event){ event.preventDefault(); // If the media frame already exists,reopen it. if ( file_frame ) { file_frame.open(); return; } // Create the media frame. file_frame = wp.media.frame = wp.media({ title: "Select Images For Gallery",button: {text: "Select",},library : { type : 'image'},multiple: true // Set to true to allow multiple files to be selected }); file_frame.on('open',function() { var selection = file_frame.state().get('selection'); ids = jQuery('#fg_Metadata').val().split(','); ids.forEach(function(id) { attachment = wp.media.attachment(id); attachment.fetch(); selection.add( attachment ? [ attachment ] : [] ); }); }); file_frame.on('ready',function() { // Here we can add a custom class to our media modal. // .media-modal doesn't exists before the frame is // completly initialised. $( '.media-modal' ).addClass( 'no-sidebar' ); }); // When an image is selected,run a callback. file_frame.on('select',function() { var imageIDArray = []; var imageHTML = ''; var MetadataString = ''; images = file_frame.state().get('selection'); images.each(function(image) { imageIDArray.push(image.attributes.id); imageHTML += '<li><button></button><img id="'+image.attributes.id+'" src="'+image.attributes.url+'"></li>'; }); MetadataString = imageIDArray.join(","); if(MetadataString){ jQuery("#fg_Metadata").val(MetadataString); jQuery("#featuredgallerydiv ul").html(imageHTML); jQuery('#fg_select').text('Edit Selection'); jQuery('#fg_removeall').addClass('visible'); } }); // Finally,open the modal file_frame.open(); });
有任何想法吗?
编辑:
我已经把它直接调用了画廊,没有任何侧边栏等等.但是,它现在忽略了on(‘select’)调用.我猜画廊在选择图像时会发出不同的电话?
jQuery(document).ready(function($){ // Uploading files var file_frame; jQuery('#fg_select').on('click',reopen it. if ( file_frame ) { file_frame.open(); return; } // Create the media frame. file_frame = wp.media.frame = wp.media({ frame: "post",state: "featured-gallery",button: {text: "Edit Image Order"},multiple: true }); file_frame.states.add([ new wp.media.controller.Library({ id: 'featured-gallery',title: 'Select Images for Gallery',priority: 20,toolbar: 'main-gallery',filterable: 'uploaded',library: wp.media.query( file_frame.options.library ),multiple: file_frame.options.multiple ? 'reset' : false,editable: true,allowLocalEdits: true,displaySettings: true,displayUserSettings: true }),]); file_frame.on('open','); if (!empty(ids)) { ids.forEach(function(id) { attachment = wp.media.attachment(id); attachment.fetch(); selection.add( attachment ? [ attachment ] : [] ); }); } }); file_frame.on('ready',function() { // Here we can add a custom class to our media modal. // .media-modal doesn't exists before the frame is // completly initialised. $( '.media-modal' ).addClass( 'no-sidebar' ); }); file_frame.on('change',function() { // Here we can add a custom class to our media modal. // .media-modal doesn't exists before the frame is // completly initialised. setTimeout(function(){ $('.media-menu a:first-child').text('← Edit Selection').addClass('button').addClass('button-large').addClass('button-primary'); },0); }); // When an image is selected,run a callback. file_frame.on('set',function() { alert('test'); }); // Finally,open the modal file_frame.open(); });
编辑2:
好的,所以我已经把所有东西都正确地解雇了.但我无法破译输出的图库代码.
// When an image is selected,run a callback. file_frame.on('update',"); if (MetadataString) { jQuery("#fg_Metadata").val(MetadataString); jQuery("#featuredgallerydiv ul").html(imageHTML); jQuery('#fg_select').text('Edit Selection'); jQuery('#fg_removeall').addClass('visible'); } });
$imageArray或$imageHTML没有任何结果. $image是东西,它是[对象对象].
编辑3:如下面评论中所述,编辑2中的代码的主要问题是,当使用Gallery时,您必须调用“库”而不是“选择”.
// Uploading files var file_frame; jQuery('#fg_select').on('click',state: "gallery",multiple: true }); file_frame.on('open',function() { var selection = file_frame.state().get('selection'); var ids = jQuery('#fg_Metadata').val(); if (ids) { idsArray = ids.split(','); idsArray.forEach(function(id) { attachment = wp.media.attachment(id); attachment.fetch(); selection.add( attachment ? [ attachment ] : [] ); }); } }); // When an image is selected,function() { var imageIDArray = []; var imageHTML = ''; var MetadataString = ''; images = file_frame.state().get('library'); images.each(function(attachment) { imageIDArray.push(attachment.attributes.id); imageHTML += '<li><button></button><img id="'+attachment.attributes.id+'" src="'+attachment.attributes.url+'"></li>'; }); MetadataString = imageIDArray.join(","); if (MetadataString) { jQuery("#fg_Metadata").val(MetadataString); jQuery("#featuredgallerydiv ul").html(imageHTML); jQuery('#fg_select').text('Edit Selection'); jQuery('#fg_removeall').addClass('visible'); } }); // Finally,open the modal file_frame.open(); });
我现在遇到的主要问题是我无法通过选择打开图库编辑.我可以把它打开,但没有选择图像.我在调查那个.我也在考虑重新开放而不是创建新视图并发送预选.如果我进入选择窗口,然后是订单窗口,但是单击X关闭,我可以重新打开订单窗口.所以应该有办法.
编辑4
file_frame.on('open',function() { var library = file_frame.state().get('library'); var ids = jQuery('#fg_perm_Metadata').val(); if (ids) { idsArray = ids.split(','); idsArray.forEach(function(id) { attachment = wp.media.attachment(id); attachment.fetch(); library.add( attachment ? [ attachment ] : [] ); }); } });
这允许我直接重新打开图库编辑状态并预先选择图像.但是,当我直接打开这个状态时,我无法点击取消图库(返回图像选择状态).单击该按钮/链接只会关闭框架.我尝试预填充库和选择,但这也不起作用.以下是来自media-views.js,似乎是控制该按钮的内容.它不是将状态更改为特定状态,而是将其更改为先前的状态.由于我们直接打开gallery-edit,因此没有过去的状态.我想知道是否可以打开图库,然后打开,更改为图库编辑.立即执行以便用户看不到,但是它会将过去的状态带入系统.
galleryMenu: function( view ) { var lastState = this.lastState(),prevIoUs = lastState && lastState.id,frame = this;
编辑5:
终于想通了.我根本无法完成上述任务,我不知道为什么.因此,可能有更好的方法来执行此操作,涉及该代码.如果是这样,我很想知道.
file_frame.on('open',function() { var selection = file_frame.state().get('selection'); var library = file_frame.state('gallery-edit').get('library'); var ids = jQuery('#fg_perm_Metadata').val(); if (ids) { idsArray = ids.split(','); idsArray.forEach(function(id) { attachment = wp.media.attachment(id); attachment.fetch(); selection.add( attachment ? [ attachment ] : [] ); }); file_frame.setState('gallery-edit'); idsArray.forEach(function(id) { attachment = wp.media.attachment(id); attachment.fetch(); library.add( attachment ? [ attachment ] : [] ); }); } });
最终编辑
我的代码现在完全正常工作,我很感激帮助!如果您想看到它的实际效果,请查看http://wordpress.org/plugins/featured-galleries/
// when click Insert Gallery,run callback wp_media_frame.on('update',function(){ var library = wp_media_frame.state().get('library'); var images = []; var image_ids = []; thumb_wraper.html(''); library.map( function( image ) { image = image.toJSON(); images.push(image.url); image_ids.push(image.id); thumb_wraper.append('<img src="' + image.url + '" alt="" />'); }); });
我发现你应该得到’图书馆’而不是’选择’.
编辑:
我已经想出如何回到画廊编辑.这是我的完整代码:
$( '#btn_upload' ).on( 'click',function( event ) { event.preventDefault(); var images = $( '#image_ids' ).val(); var gallery_state = images ? 'gallery-edit' : 'gallery-library'; // create new media frame // You have to create new frame every time to control the Library state as well as selected images var wp_media_frame = wp.media.frames.wp_media_frame = wp.media( { title: 'My Gallery',// it has no effect but I really want to change the title frame: "post",toolbar: 'main-gallery',state: gallery_state,library: { type: 'image' },multiple: true } ); // when open media frame,add the selected image to Gallery wp_media_frame.on( 'open',function() { var images = $( '#image_ids' ).val(); if ( !images ) return; var image_ids = images.split( ',' ); var library = wp_media_frame.state().get( 'library' ); image_ids.forEach( function( id ) { attachment = wp.media.attachment( id ); attachment.fetch(); library.add( attachment ? [ attachment ] : [] ); } ); } ); // when click Insert Gallery,run callback wp_media_frame.on( 'update',function() { var thumb_wrapper = $( '#thumb-wrapper' ); thumb_wraper.html( '' ); var image_urls = []; var image_ids = []; var library = wp_media_frame.state().get( 'library' ); library.map( function( image ) { image = image.toJSON(); image_urls.push( image.url ); image_ids.push( image.id ); thumb_wrapper.append( '<img src="' + image.url + '" alt="" />' ); } ); } ); } );
我想如果你重新打开现有的框架,它将始终保持初始状态,在你的情况下它是’画廊’.你必须每次都创建一个新的框架并检查是否有图像打开’gallery-edit’此外,我更喜欢’gallery-library’而不是’gallery’,因为我希望用户专注于我的画廊.