------------------------------------------------------------------------------- Frames and Wirth's Rule The main problem I found with frames was the need to duplicate information into at least 3 separate files. Frames Initialisation and document The Frame Index or Navigation Document The Frame Top level or welcome page Other pages the frames document displays also may need two versions one with navagation buttons for the non-frame users. The problem here can be summed up with Wirth's Rule Wirth's Rule: Never store data in more than one place, sooner or later you will update one and not the other. To solve this problem I have used two techniques. 1/ A single file which is filtered to produce the three framing documents. For Example: Anthony's WWW Images http://www.cit.gu.edu.au/~anthony/ Download the library, or look at a mirror site to see the framing. Uses a C Pre-Processor file. That is to say I created one file with CPP #if #else #endif inserted which allows me to generate the three top level files from one source. The CPP (M4) source file for Anthony's WWW Images is at http://www.cit.gu.edu.au/~anthony/icons/www/Images.m4 I use CPP defines DEFAULT INDEX TOP to generate the appropriate frame file using the following commands (which is put in a shell script or makefile) =======8<-------- # DEFAULT :- generate framing and default NOFRAMEs document /usr/lib/cpp -undef -P -DDEFAULT Images.cpp | \ sed '/^$/d' > Images.html # INDEX :- output the frame navigation document /usr/lib/cpp -undef -P -DINDEX Images.cpp | \ sed '/^$/d' > Images_Index.html # TOP :- generate the framed top level welcome page /usr/lib/cpp -undef -P -DTOP Images.cpp | \ sed '/^$/d' > Images_Top.html =======8<-------- The `sed' command is used to strip extra blank lines that CPP leaves behind 2/ With the advent of the new Extended SSI of the latest Apache Web Server release, you can now use the Extended Server Side Includes, if-else-endif tags. What you do is create one file like the CPP version above but link to this symbolic links for the other framing documents required. You then use the XSSI to test the filename of the document requested to include or not-include the required parts. EG: You only have one document, but the XSSI allows the server to output the appropriate sections required for your frames according to the requested filename. To include or not include navigation buttons in other framed pages is even easier and only needs SSI (no extension needed) What you do is put your navigation buttons in a separate document (which could be shared by all your framed pages :-) and include it in your framed page with... <!--#include file="nav_buttions.html_incl" --> If you call this page "page.shtml" you create a symbolic link called "page.html" pointing to the same document. If you link to "page.html" you will get a framed version which as the file is NOT "Shtml" will not have the navigation buttons included! If you link to "page.shtml" SSI will be performed and the "nav_buttions.html_incl" file included. hey presto navigation buttons will appear. Of course these days, people use SSG (Static Site Genertors) to do all this. -------------------------------------------------------------------------------