

---------------------------------------

PHP Layers Menu 3.2.0-rc (Aug 17, 2004)

---------------------------------------



Successfully tested with PHP 5.0.



Added support for SQLite and PHP5 scripts for importing corresponding

DUMPS/sqlite.*.dump; bundled a demo SQLite DB file: DUMPS/phplayersmenu

Affected files:

DUMPS/sqlite.*.dump

DUMPS/sqlite.*.dump.php5

DUMPS/phplayersmenu

lib/layersmenu-process.inc.php (see the getSQLDump() method)

DB-related examples, in particular example-filetodb.php



Added a simple check in scanTableForMenu() method

(i.e. in lib/layersmenu-common.inc.php) to avoid troubles

if the 'phplayersmenu_i18n' table contains items not matching any item

(i.e., any 'id') of the 'phplayersmenu' table.



Updated the browser detection and the see-through workaround to account

for Konqueror 3.3, that, just as Konqueror 3.2, is affected by the

see-through effect only for 2 form elements:

- the select list with size greater than 1

- the textarea

Alas, at the time of this writing (Konqueror 3.2.3 and 3.3.0-rc2),

hiding of such two form elements on Konqueror 3.2 and 3.3 does not work,

as it is still affected by the following bug:

http://bugs.kde.org/72885



A minor change to the getWindowWidth() and getWindowHeight() functions

in lib/layersmenu-library.js to obtain a correct behaviour also when

the page containing a layers-based menu is inside a frame.



Added the DTD declaration to framed documents.



Minor code clean up: removed inclusion of PHPLIB.php in

example-dbtofile.php and example-filetodb.php, where it was not needed.



Added 'class="normal"' here and there in example-see-through.php

(Konqueror 3.3)



Increased the suggested minimal version of Mozilla from 0.9.1 to 0.9.2:

everything should work correctly also on 0.9.1, but the precompiled

tarball of 0.9.1 downloaded from mozilla.org does not install

on the distribution I am currently using (Mandrake 10.0 Official)

and I am not happy to reboot to an older distribution only for testing

on Mozilla 0.9.1; anyway, I suppose that really no one is still using

such an old version of Mozilla and, if my memory does not fail,

Mozilla 0.9.2.1 corresponds to Netscape 6.1... who is still using

Netscape 6.0 nowadays??? >:-)



Reorganized the home page (now the demo is demo.php) and the examples.

Added a server-side (written in PHP) browser detection

( lib/layersmenu-browser_detection.php )

for the home page of the project, that now provides different menus

for different browsers.

Some minor changes to README.ihtml

Added the "bitstream vera sans" fonts option and reduced font sizes

in the stylesheets.



Readded in the PATCHES/ONCLICK/ directory the patches based on code

changes contributed by Alex Pagnoni.



Added in the PATCHES/ICONS_I18N/ directory the icons_i18n.patch,

that adds internationalization (i18n) for the "icon" field

of the "phplayersmenu_i18n" table, beside the "text" and "title" fields.



Added in the PATCHES/FIXEDMENU/ directory the fixedmenu.patch,

that allows to keep the horizontal menu in a fixed position

when the page is scrolled.



---------------------------------------

PHP Layers Menu 3.2beta (July 27, 2004)

---------------------------------------



Added the possibility of highlighting the current item in the tree menus.

Four methods are provided in the LayersMenuCommon class to allow

selection of the current item:

setSelectedItemByCount() -- to select the current item in terms of its

        line number in the corresponding menu structure file

setSelectedItemById() -- to select the current item in terms of the

        corresponding id in the DB table

setSelectedItemByUrl() -- to select the current item specifying a string

        that occurs in the current URL

setSelectedItemByUrlEregi() -- to select the current item of $menu_name

        specifying a regular expression that matches (a substring of)

        the current URL; just the same as the setSelectedItemByUrl()

        method, but using eregi() instead of strpos()

This should close feature request 946429:

http://sourceforge.net/tracker/index.php?func=detail&aid=946429&group_id=33447&atid=408330

Affected files:

layerstreemenu.css

lib/layersmenu-common.inc.php

lib/phptreemenu.inc.php

lib/treemenu.inc.php



Added the setLinksTargets() method to the LayersMenuCommon class to allow

to set the same target for all links of a menu; this method was already

introduced in PgMarket 2.3.1 (shopping/navigation.php) to extend

the bundled version of PHPLM (3.0.0).

Affected file: lib/layersmenu-common.inc.php



A minor change to lib/treemenu.inc.php to fix bug 989437

eliminating "onmousedown" where it was not sensed:

http://sourceforge.net/tracker/index.php?func=detail&aid=989437&group_id=33447&atid=408327



Fixed bug 980509, that affected treemenus containing only one

first-level item (being both the first one and the last one):

http://sourceforge.net/tracker/index.php?func=detail&aid=980509&group_id=33447&atid=408327

Affected files:

lib/phptreemenu.inc.php

lib/treemenu.inc.php

libjs/layerstreemenu.ijs

THEMES/*

menuimages/*tree_collapse_corner_first* (new images)

menuimages/*tree_expand_corner_first* (new images)



Replaced "addslashes" with "stripslashes" in lib/layersmenu-common.inc.php

for the "title" field.



In horizontal layers menus, first-level separators were not ignored.

FIXED.

Affected file:

lib/layersmenu.inc.php



Added some "text-decoration: none;" lines to the CSSs, to avoid problems

with msie.

Affected files:

layersmenu-galaxy.css

layersmenu-gtk2.css

layersmenu-keramik.css

layerstreemenu.css



------------------------------------

PHP Layers Menu 3.1.5 (July 4, 2004)

------------------------------------



Fixed detection of Konqueror 3.0 in libjs/layersmenu-browser_detection.js



In libjs/layersmenu-see-through.js , in function scanChildren() ,

there was an error in the condition for Konqueror 3.2, that affected

also the condition for IE; fixed.



Extended the see-through workaround to cope with resizing

of the browsing window.



Separators: the solution proposed by Mihai Bazon is very clever,

but it seems that separators are invisible (transparent) on msie 5.2.3

for MacOSX (no comment...).

The Mihai's solution has been replaced with the solution proposed

by Bruno in

http://www.brunildo.org/test/separa3d2px.html

that seems to be working also on msie 5.2.3 for MacOSX.

Note: changes have affected the templates and the stylesheets.



Added methods setIconsize() and unsetIconsize() to allow to avoid detection

of width and height of icons, setting them to fixed values.



Implemented feature request 941152 ("URI icons"), to allow to use

also icons specified as URLs, e.g. to link shortcut icons of web sites

without downloading them:

http://sourceforge.net/tracker/index.php?func=detail&aid=941152&group_id=33447&atid=408330

Changes applied to implement this feature are analogous to the changes

provided in the uri_icons-3.1.1.patch attached to the mentioned

feature request.

Note: such changes have affected also the templates.



The "images" directory has been split in the "menuimages" and "menuicons"

directories; menuicons/ contains icons of menu items; menuimages/ contains

images needed by the menu system, i.e. arrows, treemenu themes,

and transparent.png; methods setIcondir() and setIconwww(), analogous to

setImgdir() and setImgwww(), have been added.

This change was needed to cope with the situation explained in the

"Help" discussion forum - "absolute path for icons":

http://sourceforge.net/forum/forum.php?thread_id=1097355&forum_id=104941



Added the replaceStringInUrls() method, to allow to replace a given string

in all URLs (hrefs) of menu items.

As an example, this allows to use constant strings such as 'WWWROOT'

in the menu structure, only for items linking pages in the site

(not for items linking other sites), and then replace 'WWWROOT'

with the corresponding "path", that may have different values

on the development workstation and on the production server.



Many people were confused about getHeader() returning the header

but not preparing it; the same for getFooter().

Now getHeader() prepares the header (calling makeHeader()) if it has not

been prepared yet, then it returns it; now printHeader() simply relies

on getHeader() and does not call makeHeader() anymore; the same changes

have been made for the footer.

This slight change should eliminate the abovementioned misunderstanding.



-------------------------------------

PHP Layers Menu 3.1.4 (June 27, 2004)

-------------------------------------



lib/layersmenu-common.inc.php does not include PEAR.php and DB.php anymore.

With this choice, if PEAR is not installed and the DB support is not used,

no change to the code of the class is needed to avoid errors.

This change implies that now, to use the DB support, the script using

the class must include also PEAR.php and DB.php, just as lib/PHPLIB.php

(whose inclusion was already needed before this change); an example

is in the code of example-db-hormenu.php, that now includes also PEAR.php

and DB.php:

...

require_once 'lib/PHPLIB.php';

require_once 'PEAR.php';

require_once 'DB.php';

require_once 'lib/layersmenu-common.inc.php';

require_once 'lib/layersmenu.inc.php';

...

whereas, in previous versions, example-db-hormenu.php did not include

PEAR.php and DB.php



Some minor "cosmetic" changes to the code to match almost all PEAR

coding standards:

http://pear.php.net/manual/en/standards.php

Currently, the PHPLM code is almost completely compliant with PEAR coding

standards; basically, currently non compliance is in the following point:

http://pear.php.net/manual/en/standards.php#standards.indenting

PHPLM is not compliant with this point, as its indentation is made

using "classical" 8-columns tabs.

I absolutely do not want to restart here the "eternal holy war" about

"tabs versus spaces" :-) , I simply point out that I prefer using tabs.

As currently PHPLM is not included in the PEAR repository, in my opinion

this non-compliance is not a problem.

BTW, it has to be noted that PHPLM does not use PEAR_error, it uses

its own error() method; furthermore, the PHPLIB.php bundled with PHPLM

is slightly different from the original Template_PHPLIB PEAR class

(but it is compatible with it).  The rationale is the following one:

to provide a PHPLM library that requires PEAR only if the DB support

is used and that does not require PEAR otherwise.  The slight changes

to PHPLIB.php make it just independent from PEAR.



-------------------------------------

PHP Layers Menu 3.1.3 (June 20, 2004)

-------------------------------------



Replaced double quotes with single quotes in the PHP code

where it was advisable.  Replaced double quotes with single quotes

also in many lines of JavaScript code.



Updated the ACKNOWLEDGEMENTS



Added the possibility of using separators in layers-based menus.

The hint proposed by Mihai Bazon in

http://dynarch.com/mishoo/articles.epl?art_id=620

has been used.

Separators have to be indicated with three dashes, i.e. with "---",

see layersmenu-horizontal-1.txt and DUMPS/[mysql|pgsql].demo_data.dump

as an example.



Updated links to style sheets in the templates, to obtain

significant previews of templates in Quanta Plus.



Updated CHANGE_TEMPLATE_CLASS_NAME.sh



-------------------------------------

PHP Layers Menu 3.1.2 (June 13, 2004)

-------------------------------------



Applied hover_background_color_fix_for_safari.patch

to fix a rendering problem on Safari

and to workaround yet another one of the countless stupid bugs

of msie 5.5 and 6.0.

References:

http://sourceforge.net/tracker/index.php?func=detail&aid=878361&group_id=33447&atid=408327

http://sourceforge.net/tracker/index.php?func=detail&aid=878367&group_id=33447&atid=408329

http://sourceforge.net/forum/forum.php?thread_id=1075576&forum_id=104941

http://sourceforge.net/tracker/index.php?func=detail&aid=963072&group_id=33447&atid=408329

http://sourceforge.net/tracker/index.php?func=detail&aid=963477&group_id=33447&atid=408327



Applied code_clean_up-3.1.1-1.patch , that removes unused $menu_name

from the _depthFirstSearch() method in lib/layersmenu-common.inc.php

Reference:

http://sourceforge.net/tracker/index.php?func=detail&aid=878607&group_id=33447&atid=408329



Applied galaxy-mdk92-3.1.1.patch , that updates a color of the Galaxy theme

to match Mandrake 9.2.

Reference:

http://sourceforge.net/tracker/index.php?func=detail&aid=878610&group_id=33447&atid=408329



Applied typos_fixes-3.1.1-1.patch , that fixes some typos in templates.

Reference:

http://sourceforge.net/tracker/index.php?func=detail&aid=878612&group_id=33447&atid=408329



Fixed bug 913550: the example-filetodb.php script did not give correct

parent id's.

The bug has been fixed with a patch simpler than filetodb-fix-3.1.1.patch ,

i.e. changing layersmenu-process.inc.php but leaving unchanged

example-filetodb.php

References:

http://sourceforge.net/tracker/index.php?func=detail&aid=913550&group_id=33447&atid=408327

http://sourceforge.net/tracker/index.php?func=detail&aid=931586&group_id=33447&atid=408329



Applied phplm_expand-3.1.1.patch, that changes the 'expand' and 'collapse'

variable/cookie names to 'phplm_expand' and 'phplm_collapse' respectively,

because 'expand' is a very generic term, that can cause conflicts

with certain web applications.

References:

http://sourceforge.net/tracker/index.php?func=detail&aid=931661&group_id=33447&atid=408330

http://sourceforge.net/tracker/index.php?func=detail&aid=931697&group_id=33447&atid=408329



Applied treemenus_themeability-3.1.1.patch , that adds the possibility

of using different themes for distinct tree menus on a page.

Changed accordingly the filenames of images contained in THEMES/*.tar.gz

Extended index.php , example-layersmenus_and_treemenus.php ,

and example-two_treemenus.php , to evidence the added feature.

Reference:

http://sourceforge.net/tracker/index.php?func=detail&aid=962053&group_id=33447&atid=408329



Minor code clean up: removed lines 535 and 721 of lib/layersmenu.inc.php



Re-added the PATCHES directory.

Added to the PATCHES directory the icons_i18n-3.1.1.patch ,

that adds internationalization (i18n) for the "icon" field

beside the "text" and "title" fields.

Reference:

http://sourceforge.net/tracker/index.php?func=detail&aid=962059&group_id=33447&atid=408329



Fixed bug 940086,

[Tree] "Menu open/closes for local dirs in an unpredictable way"

through a small change to libjs/layerstreemenu-cookies.js

Reference:

http://sourceforge.net/tracker/index.php?func=detail&aid=940086&group_id=33447&atid=408327

Many thanks to Sasha Kushnirenko for this bug fix.



Updated the see-through workaround for Konqueror 3.2.x, that is affected

by the see-through effect only for 2 form elements:

- the select list with size greater than 1

- the textarea

Alas, at the time of this writing (Konqueror 3.2.2), hiding of such

two form elements on Konqueror 3.2.x does not work, as it is affected

by the following bug:

http://bugs.kde.org/72885



------------------------------------

PHP Layers Menu 3.1.1 (Nov 15, 2003)

------------------------------------



Eliminated from the code libdir and libjswww, that were no more used.



Fixed a bug in the setTpldirCommon() method.

Changed/extended some parts of code (and updated the examples

accordingly) to allow to change all directory paths using only

the setDirroot() method.

Thanks to Morten Poulsen for his bug report and his suggestion.



Removed the JavaScript tag from lib/layersmenu-browser_detection.js

and updated the examples accordingly.

Thanks to Philipp Kamps for his report.



Changed HTML:default:default with HTML:frames:default in README.PHPDOC

to avoid a warning with phpDocumentor 1.2.2; you have to undo this change

if you are still using phpDocumentor 1.1.



------------------------------------

PHP Layers Menu 3.1.0 (Sep 21, 2003)

------------------------------------



I wish to start the changelog of this new development branch with

some clarifications about choices I have done with this release.

Recently, I have said many times that I would have eliminated the support

of some old browsers (mainly Netscape 4 and Internet Explorer 4)

starting from just *this* release; however, I have still not done this

because a middle-ground solution has rather easily allowed to mantain

support for them.

Such middle-ground solution has consisted of reorganizing some stuff,

so that now incompatibility with old browsers is due only to the code

of templates and style sheets, and of providing, beside the default

templates and style sheets, some old-style templates and style sheets

that still allow you to preserve compatibility if you *really* need.

Please consider that this also implies that, to avoid of accidentally

loosing the support of some browsers, now you must be *much more careful*

if you customize templates and style sheets.

Please also consider that probably, starting from now, the old-style

stuff will not be tested as widely and deeply as the new one,

as now the focus is on non-ancient browsers... the need of abandoning

support for Netscape 4, that has disclosed me the world of Internet,

makes me sad, but it's life: time goes on, and too old software

has to be abandoned at a given time.



Upgraded to HTML_Template_PHPLIB-1.3.1.



Reorganized the PHP code to split the classes in more classes:

LayersMenu --> LayersMenuCommon, LayersMenu, TreeMenu

XLayersMenu --> PHPTreeMenu, PlainMenu



Switched to the look anticipated in version 3.0.0 by the NEW_GENERATION

patch; now ancient browsers are no more supported unless you use

old-style templates and style sheets instead of the default ones

(look at example-hormenu-old.php to see an "old-style" example).

Support for Mozilla 0.6 and Netscape 6.0 is available again.

Support of Konqueror 2.1 has been definitively dropped, also

in old-style templates and style sheets.



Added a workaround for the see-through problem, as loudly and longly

requested by many people.

To avail of the workaround, surround the "dangerous" form elements with

a div with id="phplmseethrough" and include layersmenu-see-through.js,

just as in example-see-through.php.

"Dangerous" elements are automatically found relying on the DOM tree

properties; they are not searched for outside the "phplmseethrough" div:

I have chosen this approach for performance and simplicity reasons.

If you do not need this workaround, you do not have to add any such div.

The workaround is available for Konqueror and Internet Explorer 5+.

As Mozilla 1.4 and Opera 7 have solved the problem, I have decided

to avoid any workaround for both Mozilla (that was alredy almost

not affected by this weird problem) and Opera, and I *strongly*

advise Mozilla and Opera users to upgrade to the new versions if possible.

I do not have added any workaround for Netscape 4 and Internet Explorer 4,

as it seems more difficult (they are both strongly non DOM-compliant)

and as in my opinion it is not worth the effort, also because

in the long term I will drop any support for both them.

On Konqueror 3.x and IE 5+ I have found a reliable way[*] to hide only

elements that actually overlap with popped up layers, but, alas,

on the contrary, since now I have not found a way to check *reliably*

for such overlaps also on Konqueror 2.2, hence the workaround is rather

rough for Konqueror 2.2: each time a layer of the menu is popped up,

*all* "dangerous" form elements are hidden.



[*] According to the performed tests, it *seems* reliable enough ^_^



Changed the name of the "link" field: for better overall coherence,

now it is called "href"; this change affects the DB and the templates

(and the internal code of the classes, but this is not visible to

final users).

Anyway, the API allow to use data put in tables and tables fields

with non default names, hence this change should not cause too many

troubles.



Temporarily dropped the PATCHES directory: the corresponding patches

will be either integrated during this development branch (if it will

appear advisable) or restored later, after needed changes.



Other undocumented changes and improvements to the code.



Be aware that version 3.0 of the manual is not completely suited

to PHPLM 3.1.x and that, in general, version 3.0 of the manual

has to be considered valid only for PHPLM 3.0.x.



--------------------------------------

PHP Layers Menu 3.0.0 (Aug 31st, 2003)

--------------------------------------



Added and changed many examples; a comprehensive manual has been added,

as loudly and longly requested by many people; the manual is not

bundled with the package, it is released as a separate document.



Added a "Keramik-like" patch based on suggestions and contributions

of Shai Coleman (shai@eurotexte.fr).

This patch is a sort of "preview" of the future versions of PHPLM.

Many thanks, Shai.



Michele Antonecchia has prepared logos and shortcut icons for the

PHP Layers Menu System; they have been added under the LOGOS directory.

Many thanks, Michele.



A minor change to the setTpldir() method; now the default filenames

of templates are updated when the template directory is changed.



A minor bug fix related to a workaround needed for Mozilla < 1.4

for MS Windows.



A minor bug fix to the layersmenu-sub_menu*.ihtml templates (a missing

'colspan="2"').



Fixed an incompatibility with PostgreSQL 7.3 in

lib/layersmenu-process.inc.php



Added some checks to avoid that a new menu is requested before that

its menu menu data are parsed.



Renamed the _parseCommon method as parseCommon, as it can be useful

with the ProcessLayersMenu extended class and hence it has to be

considered a public (not private) method.



Minor changes to README.PHPDOC and to lib/layersmenu*.inc.php to make

things work without warnings with phpDocumentor 1.2.2.



Added CHANGE_TEMPLATE_CLASS_NAME.sh to change the name of the template

class from "Template" to "Template_PHPLIB" (or to something else)

if needed.



Commented out the first "if" statement in the _filename() method

of the Template class, to workaround problems that can arise

due to the buggy and stupid "file system" notation of the MS Windows

environments.



Some minor undocumented changes.



-----------------------------------------

PHP Layers Menu 3.0beta2 (May 18th, 2003)

-----------------------------------------



Added the timeout feature to the Layers Menu; this feature is enabled

by default; it can be disabled setting

useTimeouts = 0;

in libjs/layersmenu.js; this feature is automatically disabled for

browsers that have troubles with it.

Now the shutdown of all layers onclick is disabled by default; it can

be reenabled setting

shutdownOnClick = 1;

in libjs/layersmenu.js; this feature is automatically enabled for

browsers that either have troubles with the timeout feature or

are not able to use it.

The old behaviour (no timeout, shutdown onclick) is easily restored

setting

useTimeouts = 0;

and

shutdownOnClick = 1;

in libjs/layersmenu.js

Thanks to Paul Adams and Shai Coleman for their suggestions about

this topic.



Some minor changes to the JS Tree Menu and to the PHP Tree Menu

to improve the resulting html code and reduce its size.

Thanks to Stephan Slabihoud for his suggestions.



Added the PATCHES directory to collect some interesting contributed

patches that can be used to change/customize the menu system behaviour.



Added the DOCS directory where documentation has to be added;

currently, it provides only a document about performed tests.



---------------------------------------

PHP Layers Menu 3.0beta (May 4th, 2003)

---------------------------------------



Split the "lib" directory in "lib" and "libjs"; libdir and libwww

become libdir, libjsdir, libjswww.



Fixed a mistake in lib/layersmenu.inc.php, line 1438 and in

lib/layersmenu-noscript.inc.php, line 175.

Thanks to Stepan Kadlec (steve@students.zcu.cz) for his bug report.



Added the following images for the first item of the Tree Menus:

tree_collapse_first.png

tree_expand_first.png

tree_split_first.png

Thanks to Paulo R. Bagatini (arkanon@ceat.net) for his suggestion.



Minor changes to layersmenu.css to obtain a better look for fonts

with Mozilla 1.3 and Konqueror 3.1 on Mandrake Linux 9.1.



-------------------------------------

PHP Layers Menu 2.3.5 (Mar 9th, 2003)

UNSTABLE BRANCH

-------------------------------------



Some little changes to obtain a better imitation of the Gnome, KDE,

and MS Windows main menus' behaviour for the layers menus w.r.t.

turning off popped up layers.

Added setVisibility() and isVisible() to lib/layersmenu-library.js

to extend the browser abstraction layer and to reduce the amount

of browser-dependent code in lib/layersmenu.js



A minor change to moveLayerX() (lib/layersmenu.js) and to getWindowWidth()

(lib/layersmenu-library.js) to handle Netscape 4 just like Mozilla,

as Netscape 4 seems able to return a correct value of the window width.



Renamed popUp() as LMPopUp() and popUpL() as LMPopUpL(), to allow to use

the "popUp" function name (that seems to be rather widely used) for other

purposes in the same page.



Added a workaround to overcome an annoying behaviour of Mozilla on

MS Windows for the layers menus: now layers popped up for the first time

appear on the right place without appearing with abscissa = 0 before.



Added an extended class (ProcessLayersMenu) providing methods useful

to process/convert menus data, e.g. to output a menu structure and

a DB SQL dump corresponding to already parsed data and hence also

to convert a menu structure file to a DB SQL dump and viceversa.

File: lib/layersmenu-process.inc.php

Some examples of use of this extended class have been added to the package.



Added some examples of use of this package.



-------------------------------------

PHP Layers Menu 2.3.4 (Mar 2nd, 2003)

UNSTABLE BRANCH

-------------------------------------



Server-side speed improvement: now the depth-first recursive search

of items stored in the DB is performed on a PHP array obtained querying

the DB *only once*; this strongly reduces the time needed to retrieve

and process data stored in the DB.

Thanks to Iacopo Spalletti for this fine suggestion.



Added i18n support for items stored in the DB.

Correspondingly, a non mandatory argument ($language) has been added

to the scanTableForMenu() method.



Improvements for the DB-related user interface.

Now the customization of field names allows to disable not available

(not wanted) fields and should be more comfortable and intuitive and

less error prone.

Now field names can be passed in whatever order and their specification

is mandatory only for non-default field names; not available (not wanted)

fields can be disabled simply passing empty field names.



Added error handling for the DB connection request.



Added $prependedUrl (and the corresponding setPrependedUrl() method)

to the LayersMenu class, to allow to prepend the same string to the

content of all links if needed.

As an example, this is needed if the complete URLs of the links depend

on the settings of the package for which you are using the PHP Layers

Menu System and/or when the storing in the DB of $prependedUrl for each

link item either makes no sense or is not really viable/advisable.



********

* NOTE *

********

Extended the menu structure format to foresee the default expansion state

for each item:

[dots]|[text]|[link]|[title]|[icon]|[target]|[expanded]

The DB dumps have been changed accordingly.

Due to this change, the setTreeMenuDefaultExpansion() method is no more

needed and hence it has been eliminated... now you do not need anymore

to guess the numerical ids of items to be expanded by default ;-)

The corresponding method is still used for the PHP Tree Menu, as this

new approach would be not easily viable in this case and as the default

expansion of the PHP Tree Menu can be easily obtained simply looking

and the URL query string.



Noticeable client-side performance improvement through the use of a

smarter approach in the popUp() function of lib/layersmenu.js

To evidence the difference w.r.t. previous versions, you can compare

versions 2.3.3 and 2.3.4; load the demos of these versions in two

distinct browser tabs (if you are using a browser that *still* does not

provide tabs *nowadays*, you have to load the demos in two distinct

browser windows), then go to the last item of the first horizontal menu

("DOM, layers...") and, when the corresponding layer is popped up,

move the mouse up and down over all the links shown in the layer;

you will notice that switching of highlighting of links backgrounds

now is fast, so much faster w.r.t. version 2.3.3.

(You cannot note any difference if you are using Netscape 4)



********

* NOTE *

********

Some changes to functions and variables names for lib/layersmenu.js,

that has been split in the following way.

-------------------------

lib/layersmenu-library.js

-------------------------

General purpose cross-browser functions, whose code provides a browser

abstraction layer that can be useful also for the development of other

projects.

You do not need anymore to load this code if you want to provide only

JavaScript Tree Menus on your pages.

----------------------

lib/layersmenu.js

----------------------

Code used just by the Layers Menus.

You do not need anymore to load this code if you want to provide only

JavaScript Tree Menus on your pages.

-----------------------------

lib/layerstreemenu-cookies.js

-----------------------------

Code needed to handle cookies for the JavaScript Tree Menus.

You do not need anymore to load this code if you want to provide only

Layer Menus on your pages.

********

* NOTE *

********

Coherently with the above change, the makeHeader() and printHeader()

methods do not provide anymore the browser detection code; include

layersmenu-browser_detection.js in your pages as shown in the examples;

do not include it as you do for layersmenu-library.js, layersmenu.js,

and layerstreemenu-cookies.js; embed it *statically* in your page's code

as in the examples, otherwise you can trigger errors in Netscape 4

if loading of lib/layersmenu-browser_detection.js is completed too late.



Added some simple examples related to the use of items stored in a DB:

example-db-1.php, example-db-2.php, example-db-3.php



A minor change in layersmenu.css to have on Konqueror, for the demo title,

the same look provided by Mozilla.



-------------------------------------

PHP Layers Menu 2.3.3 (Feb 9th, 2003)

UNSTABLE BRANCH

-------------------------------------



Minor improvements to the JS Tree Menu code to obtain a correct

behaviour on Konqueror 3.1.



Changes to the JS Tree Menu code to show icons specified for leaf items

in the menu structure.

The images/tree* images have been changed too: now their size is 16x18,

no more 20x18, to match better the size of shortcut icons (16x16).

BTW, 16x18 is just the image size that leads to a perfect imitation

of the "Manage Bookmarks..." window of Mozilla.



Added for the Tree Menus some themes consisting of tarballs of images

that can be used replacing the default ones; available themes

are in the "THEMES" directory: galeon-theme, gmc-theme (the one used

until version 2.3.2), kde-theme, mozilla-theme (the new default one),

nautilus-gnome-theme.



Abandoned the use of tables for the PHP Tree Menu; now it uses exactly

the same tags (layers) used for the JavaScript Tree Menu and it has

*exactly* the same look, also w.r.t. icons specified for leaf items.

This solves also some formatting problems that can occur on Netscape 4

and that seem to be non solvable without abandoning the use of tables.

Please note that Netscape 4 ignores the "white-space: nowrap" CSS

property, hence, if you want to be sure to obtain a correct formatting

also on Netscape 4, you may need to use the tree inside a nowrap

environment, as in the index.php example bundled with the package.

Thanks to Paulo R. Bagatini, that has evidenced the problem.



Minor changes to handle correctly Opera >= 7, which provides a much

better DOM support w.r.t. previous versions.



A minor improvement to sub-menu templates of the layers menu.



Completely switched to XHTML 1.0 Transitional.



Added the possibility to get the menu content from a DB table.

PEAR DB is used to provide independence of the PHP code from the DBMS;

dumps for PostgreSQL and MySQL are bundled with the package together

with demo data dumps, and an example script is provided, too:

example-db.php



Renamed the parseMenuStructure() method as parseStructureForMenu()

hoping that now its name is less misleading ;^)



Changed debian-icon-mini.png, php-bugs-icon-mini.png, and

phplib-logo-mini.png to obtain corresponding 16x16 icons.



--------------------------------------

PHP Layers Menu 2.3.2 (Jan 12nd, 2003)

UNSTABLE BRANCH

--------------------------------------



Some look improvements, especially for the JavaScript Tree Menu

on Netscape 4, IE 4.0, IE 5.0, Opera 5 and 6.

In particular, now the JavaScript Tree Menu is well formatted

on all browsers and, in particular, on Netscape 4.

********

* NOTE *

********

Now two stylesheets are used: layersmenu.css has been split

in layersmenu.css and layerstreemenu.css; layerstreemenu.css

is included with a different syntax (see the demo example, i.e.

index.php) because it has to be used *only* by newer browsers and,

in particular, it must *not* be used by Netscape 4, to avoid the

Tree Menu formatting problems that can be noted on version 2.3.1.



Added support for IE 4.0 to the JavaScript Tree Menu.



Added cookies to the JavaScript Tree Menu to allow the browser

to remember the expansion state of the tree during a browsing session.



-------------------------------------

PHP Layers Menu 2.3.1 (Jan 4th, 2003)

UNSTABLE BRANCH

-------------------------------------



Added a JavaScript Tree Menu to the LayersMenu() class, to provide

tree menus that work completely on the client side.

Only browser sufficiently compliant to the DOM are supported, i.e.

Mozilla (and Mozilla-based browsers, such as Galeon and Netscape >= 6),

Konqueror >= 3.0, IE 5.0, 5.5, and 6.0; everything should run rather

well also on Opera 7.

The following browsers are *not* supported, as supporting them is either

not possible at all or really too hard, even though full accessibility

is provided for them: Netscape 4.x, Konqueror 2.x, lynx, links,

Opera 5 and 6, IE 4.0.

Sorry for Netscape 4; my choice of not supporting it for the JavaScript

Tree Menu makes me very sad, also because it has been the browser

that has disclosed me the world of Internet; but, alas, it is time

to begin abandoning it... thank you so much, and goodbye...



Note: due to the addition of the JavaScript Tree Menu, some name changes

have occurred in the code of the PHP Tree Menu, to avoid conflicts.



Now the Tree Menu uses the text label without any link if the link field

is empty in the menu structure.

Added treeMenuImagesType and setTreeMenuImagesType() to the XLayersMenu

class to allow to use image types different from png in the Tree Menu

without changing the code of the class.

Added treeMenuDefaultExpansion and setTreeMenuDefaultExpansion() to the

XLayersMenu class to allow to set which nodes have to be expanded

by default in the Tree Menu.

Thanks to Paulo R. Bagatini <arkanon@ceat.net> for his suggestions.



Fixed the use of "name=" tags in the Tree Menu.



Some undocumented minor changes and code clean up.



--------------------------------------

PHP Layers Menu 2.3.0 (Dec 15th, 2002)

UNSTABLE BRANCH

--------------------------------------



Dropped support of Mozilla 0.6 and Netscape 6.0; supported versions

are Mozilla >= 0.7 and Netscape >= 6.1.



Dropped support of PHP < 4.1.



Moved to the PEARified version of the PHPLib Template class.



Changed the code to use a PEAR-like syntax:



----------------

LayersMenu class

----------------

----------------------------------------------------------------------

methods:

--------

set_abscissa_step	-> setAbscissaStep

set_ordinate_step	-> setOrdinateStep

set_thresholdY		-> setThresholdY

set_dirroot		-> setDirroot

set_libdir		-> setLibdir

set_libwww		-> setLibwww

set_tpldir		-> setTpldir

set_imgdir		-> setImgdir

set_imgwww		-> setImgwww

set_horizontal_menu_tpl	-> setHorizontalMenuTpl

set_vertical_menu_tpl	-> setVerticalMenuTpl

set_sub_menu_tpl	-> setSubMenuTpl

set_forward_arrow_img	-> setForwardArrowImg

set_forward_arrow	-> setForwardArrow

set_down_arrow_img	-> setDownArrowImg

set_down_arrow		-> setDownArrow

set_menu_structure_file	-> setMenuStructureFile

set_menu_structure_string -> setMenuStructureString

set_separator		-> setSeparator

parse_menu_structure	-> parseMenuStructure

parse_common		-> _parseCommon

update_footer		-> _updateFooter

new_horizontal_menu	-> newHorizontalMenu

new_vertical_menu	-> newVerticalMenu

make_header		-> makeHeader

get_header		-> getHeader

print_header		-> printHeader

get_menu		-> getMenu

print_menu		-> printMenu

make_footer		-> makeFooter

get_footer		-> getFooter

print_footer		-> printFooter

----------------------------------------------------------------------

variables:

----------

package_name		-> _packageName

halt_on_error		-> haltOnError

horizontal_menu_tpl	-> horizontalMenuTpl

vertical_menu_tpl	-> verticalMenuTpl

sub_menu_tpl		-> subMenuTpl

menu_structure		-> menuStructure

nodes_count		-> _nodesCount

max_level		-> _maxLevel

first_level_cnt		-> _firstLevelCnt

first_item		-> _firstItem

last_item		-> _lastItem

first_level_menu	-> _firstLevelMenu

forward_arrow_img	-> forwardArrowImg

forward_arrow		-> forwardArrow

down_arrow_img		-> downArrowImg

down_arrow		-> downArrow

abscissa_step		-> abscissaStep

ordinate_step		-> ordinateStep

----------------------------------------------------------------------



-----------------

XLayersMenu class

-----------------

----------------------------------------------------------------------

methods:

--------

set_tree_menu_separator		-> setTreeMenuSeparator

set_tree_menu_images_width	-> setTreeMenuImagesWidth

new_tree_menu			-> newTreeMenu

get_tree_menu			-> getTreeMenu

print_tree_menu			-> printTreeMenu

set_plain_menu_separator	-> setPlainMenuSeparator

set_plain_menu_tpl		-> setPlainMenuTpl

new_plain_menu			-> newPlainMenu

get_plain_menu			-> getPlainMenu

print_plain_menu		-> printPlainMenu

set_horizontal_plain_menu_separator	-> setHorizontalPlainMenuSeparator

set_horizontal_plain_menu_tpl		-> setHorizontalPlainMenuTpl

new_horizontal_plain_menu		-> newHorizontalPlainMenu

get_horizontal_plain_menu		-> getHorizontalPlainMenu

print_horizontal_plain_menu		-> printHorizontalPlainMenu

----------------------------------------------------------------------

variables:

----------

tree_menu_separator	-> treeMenuSeparator

tree_menu_images_width	-> treeMenuImagesWidth

tree_menu		-> _treeMenu

plain_menu_separator	-> plainMenuSeparator

plain_menu_tpl		-> plainMenuTpl

plain_menu		-> _plainMenu

horizontal_plain_menu_separator	-> horizontalPlainMenuSeparator

horizontal_plain_menu_tpl	-> horizontalPlainMenuTpl

horizontal_plain_menu		-> _horizontalPlainMenu

----------------------------------------------------------------------



Fixed a bug that caused an incorrect behaviour on the Tree Menu links

for the [+] and [-] icons when the http port was not 80.

Thanks to Yves Mettier <ymettier@libertysurf.fr> and

Jesus M. Castagnetto <jmcastagnetto@php.net> for their bug reports

and fixes.



Other undocumented changes and improvements, e.g. to the templates

and to the style sheet.



--------------------------------------

PHP Layers Menu 2.2.0 (Oct 13th, 2002)

--------------------------------------



lib/layersmenu-noscript.inc.php3, new_tree_menu():

fixed the detection of the https protocol.

Thanks to Danny Jovica <danny@e-pc.com.au> for his bug report.



----------------------------------------

PHP Layers Menu 2.2beta (Sep 29th, 2002)

UNSTABLE BRANCH

----------------------------------------



Moved the browser detection from lib/layersmenu.js to the body

of the HTML code returned by the PHP parsing.

This change has been needed to avoid JavaScript errors that

on Netscape 4 often occurred loading the page for the first time

(a reload was needed to make things work).

To this end, the browser detection code has been put in a new file,

i.e. lib/layersmenu-browser_detection.js , which is included

by the template lib/layersmenu-header.ijs , and a minor change

to the make_header() method of the LayersMenu class has been needed

in lib/layersmenu.inc.php3 .



Some minor changes to provide compliance with XHTML 1.0 Transitional.

Now PHP Layers Menu is compliant at least with the following DTDs:



<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">



<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"

        "http://www.w3.org/TR/html4/loose.dtd">



<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"

        "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">



A minor "cosmetic" change in the setX() function in lib/layersmenu.js



A minor change in the yaresizeHandler() function in lib/layersmenu.js



Changed all the Tree Menu images to use all 20x18 images and provide

a better look, especially on Konqueror.



--------------------------------------

PHP Layers Menu 2.1.0 (Sep 21st, 2002)

UNSTABLE BRANCH

--------------------------------------



Now the vertical coordinates of links are obtained simply

as DOM properties.

Hence it is no more needed to estimate their coordinates

through the detection of the position of the mouse pointer,

and it is no more necessary to compute and set reasonable

coordinates for the layers (this was needed for browsers

not able to detect the mouse pointer position).

Detection of the position of the mouse pointer is still employed,

but only for Netscape 4, which does not seem able to return

the vertical coordinate of links relying on the DOM tree.

Many thanks to Iacopo Spalletti for this very fine hint,

which strongly improves the behaviour of this menu system.



A clean up in lib/layersmenu.js for the code handling the

document.onmousedown and the document.onclick events.



Changed the default value of $ordinate_margin, that now is 12

and no more 20.



Updated the README and some comments in the code.

Minor corrections to the README.



--------------------------------------

PHP Layers Menu 2.0.0 (Sep 15th, 2002)

--------------------------------------



Functions setwidth() and setheight(): the bug fix provided in version

2.0beta3 causes problems to IE 5.5 and IE 6.0, and Mozilla does not

need it in that functions (it needs it only in functions setleft()

and settop()); hence the same code used in version 2.0beta2 has been

restored for that functions.



The bug fix provided in version 2.0beta3 also prevents the menu system

from working on Opera 5; extended functions setleft() and settop()

to handle Opera 5 as a distinct case and use the non-fixed code for it.



Some extensions to lib/layersmenu.js and minor changes to the templates

to obtain also with IE 6.0 a correct behaviour with the long DTD for

HTML 4.01 Transitional.



----------------------------------------

PHP Layers Menu 2.0beta3 (Sep 1st, 2002)

UNSTABLE BRANCH

----------------------------------------



A bug fix in lib/layersmenu.js (functions setleft(), settop(),

setwidth(), setheight()); now the menu system works also on Mozilla

also with the long DTD for HTML 4.01 Transitional, i.e. with

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"

        "http://www.w3.org/TR/html4/loose.dtd">

Many thanks to Iacopo Spalletti for this fine bug fix.



Changed the Tree Menu images according to Debian Woody's Gmc and Galeon.



-----------------------------------------

PHP Layers Menu 2.0beta2 (Aug 11th, 2002)

UNSTABLE BRANCH

-----------------------------------------



Fixed some typos.



-----------------------------------------

PHP Layers Menu 2.0beta (July 28th, 2002)

UNSTABLE BRANCH

-----------------------------------------



Commented the code of PHP classes according to the PHPDocumentor syntax.



Added the set_separator() method to allow to change the separator,

that by default is still "|".



Added the possibility of commenting out a line in the menu structure

inserting a "#" as the first character of the line, in analogy with

shell scripts.

Thanks to Normando Marcolongo <normando@lugroma.org> for his suggestion.



Some other minor undocumented changes.



Added an extended class to provide menu solutions not requiring

JavaScript, i.e. Tree Menu (based on the Tree Menu 1.1 package

by Bjorge Dijkstra), Plain Menu, and Horizontal Plain Menu.



Slightly changed the menu structure format: added a separator between

dots and text to allow text of links to begin with one or more dots;

now the menu structure format is

[dots]|[text]|[link]|[title]|[icon]|[target]

(obviously, the separator can be different from "|", which is the default,

if the set_separator() method is used).

More precisely, now only the number of chars before the first separator

is counted, hence it is also possible to use chars different from dots,

even though I discommend to do this and I suggest to continue considering

a format that foresees usage of dots.



--------------------------------------

PHP Layers Menu 1.1.7 (May 26th, 2002)

UNSTABLE BRANCH

--------------------------------------



Reorganization and extension of code, data structures, variables names,

and templates.

Clean up of the style sheet.



Added some variables to the class, in particular, dirroot and libdir.

Thanks to Claudio Bandaloukas <rdfm@lugroma.org>

for his bug report.



Added titles to links and support for icons;

this implies a format change for the menu structure, that now is

[dots][text]|[link]|[title]|[icon]|[target]



Now horizontal menus cells can have arbitrary widths.

This allows to save space in the browser window, with menu layers

still correctly placed.



--------------------------------------

PHP Layers Menu 1.1.6 (May 19th, 2002)

UNSTABLE BRANCH

--------------------------------------



Renamed the class as LayersMenu; renamed methods and added some useful

new methods.



Added the possibility of reading each menu structure from a string

instead of from a file; this is useful if, e.g., the menu structure

is returned by some code that retrieves informations from a data base.



Eliminated inclusion of template.inc.php3 from layersmenu.inc.php3;

now template.inc.php3 has to be included by the script that employs

the LayersMenu class.



Moved some files in suited sub directories and added methods to choose

paths and to choose templates for each menu; changed the demo script

to make more evident this change.



Eliminated $abscissa_stepx5, which was not used.



Added the JavaScript variable IE, to indicate *each version* of IE

(>= 4.0); now the IE4 variable indicates *only* version 4 of IE.

Some minor changes to adapt the code to this choice.



Added an elementary error handling.



Other undocumented changes and improvements.



--------------------------------------

PHP Layers Menu 1.1.5 (May 12th, 2002)

UNSTABLE BRANCH

--------------------------------------



Added handling of window resizing.



Better handling of horizontal autorepositioning of layers.



Some little changes to validate as HTML 4.01 Transitional.



Added methods to allow a more clean use of the menu system

in pages using templating.



Other undocumented improvements and changes.



-------------------------------------

PHP Layers Menu 1.1.4 (May 5th, 2002)

UNSTABLE BRANCH

-------------------------------------



Added the LICENSE file and changed the license to include the option

of later versions of the GNU LGPL.



Added detection of layers widths (for browsers able to detect them),

and then set the position of each layer just in correspondence

of the "father" layer.



Added detection of the document width and of width and scroll

of the browsing window, and then implemented horizontal

and vertical "autowrap" of menu layers.



Added explicit detection of Konqueror, as Konqueror 3 implements

useful features but sets IE4 = 1 ... AAAAAAAAAARGHHH!!!



Extended Opera detection, as Opera 6 provides useful features

not available or completely unreliable in Opera 5.



Some code cleanups in layermenu.js



Provided methods makeheader() and makefooter() beside printheader()

and printfooter(), to allow the use of the menu system in pages

using templating (now $this->header and $this->footer can be used).



A minor change to README to avoid problems with e-mail addresses

inside the "pre" tag.



Updated README and corrected some typos.



Minor changes to the demo menu structure files to evidence new features.



Minor undocumented changes.



----------------------------------------

PHP Layers Menu 1.1.3.1 (Apr 14th, 2002)

UNSTABLE BRANCH

----------------------------------------



Restored popUp calls in leaf node links, they were needed!!!

Thanks to Hanno Saks <hanno@lv.parnu.ee> for his bug report.

Eliminated a spurious tag.

Affected file: layersmenu.inc.php3



--------------------------------------

PHP Layers Menu 1.1.3 (Feb 24th, 2002)

UNSTABLE BRANCH

--------------------------------------



A better and more reliable choice of the layer identifying

the first level menu both for horizontal and vertical menus.

Now the layer is defined inside a td tag to avoid problems

with menus not left aligned.

New workarounds to cope with IE's oddities related to this choice.

Centered the menu hormenu1 in the demo to make more evident

the effects of the change.



Eliminated the no more useful moveLayerY() call in links belonging

to the first level menu of horizontal menus; consequently added

the call of moveLayers() in popUp() when needed (it results to be needed

if the first submenu popped up belongs to a horizontal menu).



Eliminated from the templates the tags identifying layers,

to avoid accidental removal of tags essential for the menus operation;

now such tags are inserted through the PHP code.



Some speed enhancements obtained minimizing the number of function calls

in moveLayers() and removing unuseful popUp calls in leaf nodes links

(such enhancements can be noted mainly on Mozilla and IE4).



Renamed layersmenu-footer.ihtml as layersmenu-submenu.ihtml

Renamed the printfirstleveltable() method as printfirstlevelmenu()



Minor undocumented changes.



--------------------------------------

PHP Layers Menu 1.1.2 (Feb 17th, 2002)

UNSTABLE BRANCH

--------------------------------------



Extended the set of functions provided in layersmenu.js.

Now the menu system is able to detect itself the position of menus.

Hence it is no more needed to estimate and provide the corresponding

coordinates when defining a menu, and the phplm() and newmenu() calls

are simpler.

Thanks to this ability, a better support is provided for Konqueror.

Support for Netscape 4: version >= 4.07 is required now

(version 4.05 simply crashes).

Delayed the positioning of hidden layers after the page loading

to preserve support of Mozilla < 0.9 and Netscape 6.0; this also

provides a better support for Opera.

Now setwidth() is no more used in layersmenu.inc.php3

(it resulted to be unnecessary); some changes have been made

to layersmenu-footer.ihtml; these changes achieve a better support

for Netscape 6.0 and a better look of layers for the other browsers.



Some changes to provide correct working of the package also if

in php.ini it is set

error_reporting = E_ALL

("error_reporting = 8" in PHP3)

Thanks to Tomas J. Fulopp <Tomi@uia.be> - <tomas.fulopp@skynet.be>

for his bug report.



-------------------------------------

PHP Layers Menu 1.1.1 (Feb 3rd, 2002)

UNSTABLE BRANCH

-------------------------------------



Fixed a bug in the detection of non leaf nodes.

On version 1.1.0, the bug can be evidenced deleting

the last line of layersmenu.txt and realizing that the link

"Find Files" does not pop up the corresponding layer, 

that contains the link "RPM Find". 

In practice, in version 1.1.0, if the last entry of the menu

structure file is the only child of the previous entry,

it is not possible to pop up the corresponding layer.

Thanks to Michele Conte <ceu@libero.it>

for his bug report.



Renamed phplayersmenu.inc.php3 as layersmenu.inc.php3



Documentation fixes.



Minor undocumented changes.



--------------------------------------

PHP Layers Menu 1.1.0 (Jan 13th, 2002)

UNSTABLE BRANCH

--------------------------------------



Object Oriented rewrite of the package.

Now an arbitrary number of vertical and horizontal menus

can be used on the same page, and the package's use should be easier.



