NextGen Gallery从1.00版开始支持模板引擎系统,用户可以定制自己的模板,用户自定义的模板优先级高于插件默认的模板。自定义模板的好处不用多说,NexGen提供给我们很多有用的数据,如何安排将由我们来决定。

修改album模板

在当前主题目录下创建一个目录名为nggallery,自定义的模板放在该目录下,NextGen Gallery总是先到该目录下寻找用户自定义模板,如果没有找到再调用默认模板。

先找到album的默认模板,默认有compact和extend两种样式,选择一个即可,该模板位于

/wp-content/plugins/nextgen-gallery/view/目录下(album-compact.php or album-extend.php)

选择一个拷贝到主题目录下的nggallery目录中,重命名为album-sample1.php,做任何你需要的修改。

要调用album-sample1.php,只需要这样写short code

[ album id=1 template=sample1 ]

修改其它模板的方式亦相同。

gallery.php – 默认的图集模板,shortcode[ nggallery id=1 ]调用该模板
imagebrowser.php – 默认的imagebrowser模板,如果后台options->gallery中选中“ The gallery will open the ImageBrowser instead the effect”这个模板就会用到

美中不足的是,选择自定义模板只能通过shortcode方式,也就是说如果album调用了album-sample1.php,通过点击某个gallery到达gallery页面,该页面仍然调用默认的gallery.php,而不是gallery-sample1.php,无法实现gallery的定制化。当然我可以将gallery.php也放到nggallery文件夹下,插件会优先调用主题目录下的gallery.php,缺点是不能同时拥有多个gallery样式。

看看NextGen Gallery调用模板的程序,问题就一目了然了

/**
	* Renders a section of user display code.  The code is first checked for in the current theme display directory
	* before defaulting to the plugin
	* Call the function :	nggGallery::render ('template_name', array ('var1' => $var1, 'var2' => $var2));
	*
	* @autor John Godley
	* @param string $template_name Name of the template file (without extension)
	* @param string $vars Array of variable name=>value that is available to the display code (optional)
	* @param bool $callback In case we check we didn't find template we tested it one time more (optional)
	* @return void
	**/
	function render($template_name, $vars = array (), $callback = false) {
		foreach ($vars AS $key => $val) {
			$$key = $val;
		}

		// hook into the render feature to allow other plugins to include templates
		$custom_template = apply_filters( 'ngg_render_template', false, $template_name );

		if ( ( $custom_template != false ) &&  file_exists ($custom_template) ) {
			include ( $custom_template );
		} else if (file_exists (STYLESHEETPATH . "/nggallery/$template_name.php")) {
			include (STYLESHEETPATH . "/nggallery/$template_name.php");
		} else if (file_exists (NGGALLERY_ABSPATH . "/view/$template_name.php")) {
			include (NGGALLERY_ABSPATH . "/view/$template_name.php");
		} else if ( $callback === true ) {
                        echo "Rendering of template $template_name.php failed";
		} else {
                        //test without the "-template" name one time more
                        $template_name = array_shift( explode('-', $template_name , 2) );
                        nggGallery::render ($template_name, $vars , true);
		}
	}

9条留言

  1. 请问 我想在网站上显示2个画廊 该如何实现????我想实现在网站上显示两栏图片一栏是植物的 一栏是动物的(在主页上只显示一张) 点击后想实现画廊效果 即点击动物的 从服务器上查看、、、、、

    1. 两个画廊是指两个gallery还是两个album?
      首页上显示一张图片,点击后跳转到另一个页面显示画廊吗?
      gallery是通过shortcode插入,一页可以显示多个gallery,可以通过修改gallery模板达到你要的效果,只是不清楚你要的是不是两个gallery两列栏显示的效果

      1. 不好意思 描述模糊了 是这样的=>我想实现在网站上显示两张图片一张是植物的 一张是动物的 点击后想实现画廊效果 即点击动物的 从服务器上查看所有动物的图片 点击植物的查看所有植物的图片 都是在当前页面实现。

        1. 如果不刷新页面,就需要用ajax请求数据
          服务器上所有的动物或植物图片,如果你用nextgen gallery的话,将他们分别加入到gallery就可以调用,如果你需要更特殊的画廊效果,也可以采用其他的gallery脚本
          首页两张图片就是两个链接,出发ajax事件。
          这个比较定制化,需要自己写代码,实现方法也很多,取决于你的具体需求。

  2. 这个可以单独拿个页面出来做相册吗?

    1. 可以,创建一个page模板,插入shortcode就行了

评论功能已关闭