Extend I18N Gallery
I18N Gallery is extensible!
Hooks
I18N Gallery offers the following hooks and filters, which can be used by other plugins to extend I18N Gallery:
- gallery-extras: action on the edit gallery page that is executed when the gallery options have been output.
- image-veto: filter function taking the arguments $name, $filename, $tags, where $name is the name of the gallery, $filename is the image file and $tags is an array of strings with the tags of this image. This function can be used to exclude images from being displayed by returning true.
Example code for a plugin extending I18N Gallery:
... add_action('gallery-extras', 'myplugin_set_fancybox'); add_filter('image-veto','myplugin_image_veto'); function myplugin_set_fancybox() { if (!@$_GET['name']) { // creating new gallery ?> <script type="text/javascript"> $(function() { // set default value for type $('[name=post-type]').val('fancybox'); }); </script> <?php } } function myplugin_image_veto($gallery, $filename, $tags) { // veto images tagged private if (in_array('private', $tags)) return true; return false; } ...
New Gallery Types
You can create new gallery types by adding a gallery plugin.
- create a new PHP file plugin_mytype.php in plugins/i18n_gallery, and in this file
- register the type with i18n_gallery_register('mytype', 'Name for dropdown', 'description including licensing information', 'i18n_gallery_mytype_edit', 'i18n_gallery_mytype_header', 'i18n_gallery_mytype_content'),
- create a function i18n_gallery_type_edit to display the options in the administration,
- create a function i18n_gallery_type_header to output the CSS and JS includes in the HTML header
- create a function i18n_gallery_type_content to output the gallery itself.
Here is an example for a gallery plugin file named plugin_mytype.php in the directory plugins/i18n_gallery (replace mytype with the actual name):
<?php i18n_gallery_register('mytype', 'My Type', 'Description including license', 'i18n_gallery_mytype_edit', 'i18n_gallery_mytype_header', 'i18n_gallery_mytype_content'); function i18n_gallery_mytype_edit($gallery) { // called for the input fields in the gallery configuration // all field IDs and names must be prefixed mytype- // all Javascript functions must include the type name to be unique ... } function i18n_gallery_mytype_header($gallery) { // called in the header of a page with a gallery // add CSS and Javascript files, etc. ... } function i18n_gallery_mytype_content($gallery) { // called to actually display the gallery ... }
$gallery is an associative array with all gallery parameters. It includes all input fields as parameters (names are not prefixed mytype-).
Ad i18n_gallery_type_edit:
- All fields must be named mytype-xxx.
Ad i18n_gallery_type_header:
-
Use helper functions from helper.php, e.g.
- i18n_gallery_check to check for general gallery settings
- i18n_gallery_needs_include to check if a file needs to be included or was already included for another gallery
- Make sure to separate your CSS into general parts (for all galleries of this type) and specific parts (e.g. size settings for the current gallery.
Ad i18n_gallery_type_content:
- If the gallery shows thumbnails you should check, if only one thumbnail should be displayed (function i18n_gallery_thumb) and hide all other thumbnails in this case.
- You should also check, if a specific picture ($pic) should be displayed.
- Preferably the gallery should also work with Javascript switched off (currently cycle works without Javascript and fancybox and prettyPhoto have a fallback).
- There are a lot of helper functions in helper.php, which can and should be used in the plugin. See one of the existing plugins for an example.
Javascript, Images, CSS:
- Put all Javascript, image and CSS files in the corresponding directories under plugins/i18n_gallery, preferably in subfolders.
Post the new gallery plugin in the support thread or send it to me by private mail.