Technical changes in Piwigo 2.5

Albums pagination for theme creators.

On index.tpl, add

{if !empty($cats_navbar)}
  {include file='navigation_bar.tpl'|@get_extent:'navbar' navbar=$cats_navbar}

right after {$CATEGORIES}

And modify existing photos navbar by

{if !empty($thumb_navbar)}
  {include file='navigation_bar.tpl'|@get_extent:'navbar' navbar=$thumb_navbar}

Add action buttons for plugin creators.

Introduction of two template methods to add buttons to index and picture toolbars, allowing you to place buttons relative to each other :

$template->add_picture_button($content, $rank);
$template->add_index_button($content, $rank);

No changes for themes.

Info./Error messages moved

On index.tpl, {include file='infos_errors.tpl'} was moved away from the main #content block.

Jquery UI 1.9

Jquery ui effects filename has changed. For example change

footer|combine_script require='jquery.effects.blind'


footer|combine_script require='jquery.ui.effect-blind'

We'll have backward naming compatibility for 2.5 version only!

If you use jquery.ui.dialog, you will have to explicitely require jquery.ui.button too.

Password hash

Until version 2.4 we had a configuration parameter $conf['pass_convert'], which by default was:

$conf['pass_convert'] = create_function('$s', 'return md5($s);');

Now we have 2 configuration settings :

// password_hash: function hash the clear user password to store it in the
// database. The function takes only one parameter: the clear password.
$conf['password_hash'] = 'pwg_password_hash';
// password_verify: function that checks the password against its hash. The
// function takes 2 mandatory parameter : clear password, hashed password +
// an optional parameter user_id. The user_id is used to update the password
// with the new hash introduced in Piwigo 2.5. See function
// pwg_password_verify in include/
$conf['password_verify'] = 'pwg_password_verify';

They are used this way:

if ($conf['password_verify']($clear_password, $row['password'], $row['id']))


    array($conf['user_fields']['password'] => $conf['password_hash']($_POST['use_new_pwd'])),
    array($conf['user_fields']['id'] => $user_id)

Website and email on comment form

On comment_list.tpl we display the website and the email of the author :

<span class="commentAuthor">{if $comment.WEBSITE_URL}<a href="{$comment.WEBSITE_URL}" class="external" target="_blank">{$comment.AUTHOR}</a>{else}{$comment.AUTHOR}{/if}</span>
{if $comment.EMAIL}- <a href="mailto:{$comment.EMAIL}">{$comment.EMAIL}</a>{/if}

On picture.tpl we display website url and email inputs :

{if $comment_add.SHOW_EMAIL}
    <p><label for="email">{'Email'|@translate}{if $comment_add.EMAIL_MANDATORY} ({'mandatory'|@translate}){/if} :</label></p>
    <p><input type="text" name="email" id="email" value="{$comment_add.EMAIL}"></p>
<p><label for="website_url">{'Website'|@translate} :</label></p>
<p><input type="text" name="website_url" id="website_url" value="{$comment_add.WEBSITE_URL}"></p>

index.tpl, Quick search results albums/tags list

In index.tpl, inline CSS was replaced with CSS classes .tag_search_results and .category_search_results and CSS rules were moved to themes/default/theme.css:

{if !empty($category_search_results)} 
<div style="font-size:16px;margin:10px 16px">
{if !empty($tag_search_results)} 
<div style="font-size:16px;margin:10px 16px">

were replaced by

{if !empty($category_search_results)} 
<div class="category_search_results">
{if !empty($tag_search_results)} 
<div class="tag_search_results">

Change the code accordingly in your specific index.tpl if any.

New config var

The number of maximum Ajax requests at once, for thumbnails on-the-fly generation


The categories on PEM (plugins repository) are configurable :

$conf['pem_plugins_category'] = 12;
$conf['pem_themes_category'] = 10;
$conf['pem_languages_category'] = 8;

Protection of originals images:

// one of '', 'images', 'all'
//TODO: Put this in admin and also manage .htaccess in #sites and upload folders
$conf['original_url_protection'] = '';

the value 'all' is not recommended if you have videos


We introduce MySQLi support in Piwigo 2.5, replacing MySQL (still available as a fallback).

  • pwg_db_connect() doesn't return the link_identifier anymore. (it was not useable with other SQL methods anyway)
  • mysql_* functions are broken
  • mysql_fetch_array must be replaced by pwg_db_fetch_row or pwg_db_fetch_assoc

See details on forum, [Piwigo 2.5+] use of mysql_* function is forbidden

Ajax loading enhancement [themes]

New theme variable

'img_dir'      => 'themes/default/images', 

to separate icons and images

New icons

  • for thumbnails.tpl, mainpage_categories.tpl and comment_list.tpl: {$themeconf.icon_dir}/img_small.png displays a “neutral picture” to notify the visitor something should be there during the Ajax loading of the thumbnails
  • for thumbnails.tpl, mainpage_categories.tpl, picture_content.tpl and comment_list.tpl: {$themeconf.icon_dir}/errors_small.png displays an error picture if the Ajax loading failed
  • for thumbnails.tpl, mainpage_categories.tpl, picture_content.tpl and comment_list.tpl: {$themeconf.img_dir}/ajax_loader.gif display a animated gif to show that at least one picture is loading

New div

  • for thumbnails.tpl, mainpage_categories.tpl and comment_list.tpl:

    <img src=”{$ROOT_URL}{$themeconf.img_dir}/ajax_loader.gif”>

    is the customizable div which display the gif: by default the position is absolute at the top right corner

Check the diff of those tpl files for further info

If your theme has $themeconf['load_parent_css'] = false (like Simple), then add in your theme.css:

/* Loader gif new in 2.5 */
.loader {
  display: none;
  position: fixed;
  right: 0;
  bottom: 0;

To summarize, 3 new icons customizable and 4 tpl files changed. These are just enhancements, so your old 2.4 code will still work

Back to top
dev/changes_in_2.5.txt · Last modified: 2013/05/13 12:32 by plg
github twitter newsletter Donate © 2002-2023 · Contact