Changes to the Zenphoto repository (SVN)

This note is important for anyone using either the Nightly Builds or the SVN Repository.

We are changing the method of development and support of the Zenphoto codebase. Henceforth there will be two branches in the SVN. One representing the stable builds of the current Zenphoto release, in this case v1.4 and one representing the development of the next release. This will make it easier for us to continue developing new features for Zenphoto while also providing needed bug fixes to users of the current release.

Then nightly builds will now be made from the stable branch of fixes for the current release. You should feel confident of the stability of these Nightly builds.  We may add nightly builds from the development branch as well. If so, they will be clearly labeled. (These will naturally come with more risk as they contain the new development. But typically they have also been stable.)

The “Trunk” branch of the SVN will be the stable (...)

Bug fixes for 1.4

We will attempt to maintain fixes to base 1.4 issues on ticket #1776 for those of you not wishing to use the nightly build.

The nightly builds now represent the bug fixes for the 1.4 release. See also changes to the zenphoto repository svn

Of course, at some point it will become impractical to continue making fixes as the two sources drift apart. We will note on this ticket when we stop making updates

Theme design changes in Zenphoto 1.4

Note: This article already had been published in September 2009 under the title "Theme design changes that will appear in Zenphoto 1.3.2". Since 1.3.2 was skipped in favor of 1.4 it is now being republished.

With the 1.4 release we have undertaken some revisions to how themes should normally be coded. They are summarized below:

New filters have been defined to allow plugins to insert HTML in strategic locations on the WEB page.

  1. theme_head: Every theme should include a call on zp_apply_filter('theme_head'); within the heading ( <head></head> ) tags of the page. This function replaces the call on zenJavascript(); of older Zenphoto versions. That function is now deprecated. You can continue to use it while transitioning to the new call by enabling the deprecated_functions plugin. Plugins which used the addPluginScript() function should instead create a filter for (...)


This plugin is an example demonstrating the use of the various image_html filters. Each effect is defined by a text file these sections (no individual section is required).

Documents the source of the effect

Each effect will have a head section that contains the HTML to be emitted in the theme head.

Elements from this section will be added to the class element of the <img src... /> tag.

It is also possible to create a extra section for html that will be inserted into the <img src... /> just befor the />. This can be used to insert style=" (...)

Zenphoto 1.4

IMPORTANT NOTES: This release includes some major internal restructuring of the object model. This also involves the Zenpage plugin whose categories are now objects like the articles and pages already were.

Additionally the root RSS files have been removed which results in new links to call the RSS feeds. Although we have added htaccess redirection so the links should not break (given you have mod_rewrite of course) you should inform your subscribers about the new links. The same applies to the sitemap-extended plugin.

Also there were some more minor changes to theming and plugin creations. Please review the related tutorials.

  • Major internal restructuring and improvement of the object model for Zenphoto and Zenpage plugin [sbillard, acrylian]
  • Abstraction of the Database interface allowing databases other than MySQl to be implemented (...)

Hebrew translation


Hackers often use "probing" or "password guessing" to attempt to breach your site This plugin can help to throttle these attacks. It works by monitoring failed logon attempts. If a defined threashold is exceeded by requests from a particular IP address, further access attempts from that IP accress will be ignored until a timeout has expired.


This plugin gathers data about searches that users make on your site.

Notes on the analysis of the data:

The search results used for Dynamic album processing are ignored.

Analysis presumes that the Theme does a "uniform" set of object retrievals. That is, the search.php script will always request albums, images, pages, and/or news consistently. Data collection happens for each of these objects so to "normalize" the data the analysis will divide the data by the number of objects searched.

So, if for instance, you sometimes enable Zenpage results, sometimes there will be results for images, albums, pages, and news; and other times there will just be results for images and albums. In this case the reports will under value the searches done when Zenpage results were not enabled.



Provides functionality to select different templates for the standard theme pages album.php, image.php and for Zenpage pages.php and news.php.

The additional template files have to be clones of the standard theme pages which must be kept as default ones. The file names of these additional template files must match these patterns and should not include special characters or characters with diacritical marks:

Zenphoto gallery items

  • For albums: albumcustomname.php
  • For images : imagecustomname.php

"Select default album image layout" checkbox: If you want to avoid to manually select a specific layout for all images in an album you can check this option on the album's edit page. Then a layout is assigned to the images automatically as well.

Example: You select an album layout page named "album_test.php" for an album. If you select (...)

Help Wanted: Database abstraction

Zenphoto is persuing adding database support for databases other than MySQL. To this end we have created a database abstraction layer and implemented two additional abstractions: PDO_MySQL and PDO_SQLite.

The former is pretty straight forwared, but some additional "exposure" on it would be apppreciated. The latter has run into an impass. We are not knowledgeable of SQLite and have things which do not work but we do not understand.

So by this ticket we are looking for developers with SQLite (or perhaps some other Database) knowledge to participate in this abstraction effort. Please signify your interest on ticket #1711.