On Fri, April 13, 2007 8:52 pm, Paul Lesniewski wrote:
> On 4/13/07, Alan in Toronto <[EMAIL PROTECTED]> wrote:
>> Currently I'm working on a site that is located in a sub-directory of my web
>> hosting
>> account. When it's complete, I'll move it to the server of the non-profit 
>> group
>> I'm
>> doing this for, where presumably it will live at the web root (directly 
>> under the
>> domain name). Ideally I'd like to have to change some central variable 
>> rather than
>> have to change paths on every page or in every script.

> Much of this depends on WHAT you are working on.

It's a script to enable the site navigation menu to live in a separate HTML 
file,
currently Menu.htm. I want to keep most of the PHP in a separate file or files, 
such
as currently in Menu.php. That way the content web pages are mostly straight 
HTML
with just a small amount of PHP at the top such as the includes.

Each web page will ultimately grab Menu.htm via PHP include. This enables easier
maintenance of the navigation menu, as only that one file needs editing when new
pages are added or links changed. When the file is included, PHP will also 
identify
the currently-viewed page by writing an attribute into the Anchor of the nav 
menu
link to that currently-viewed page.

> It also depends where you are needing to use this kind of code.

The include is inserted in each content web page where I want the navigation 
menu to
appear. It would be good to do this in such a way that the include_once 
statement
always uses the same path, so that it doesn't need to be different for web pages
calling the include from varying levels of nested directories. IOW, the site 
will
have content pages in directories and sub-directories and it would simplify site
creation and addititions if the include_once line were always the same and did 
not
have to change depending upon what directory level the content web page resides 
in.

Using your "home" directory variable idea, at the top of each content web page
(before the doctype declaration) I have this (yes, I realize I can name SM_PATH
whatever I want, but for now that makes it obvious to me what I'm doing and 
that it
was your suggestion):

<?php
define('SM_PATH','../');
$file_name = basename($_SERVER['PHP_SELF']);
include_once(SM_PATH . 'CSSetc/Menu.php');
?>

Later in the page, where I want the menu to appear, I have this:

<?php echo $nav; ?>

Menu.php contains, in addition to other code, this line:
$nav = file_get_contents("CSSetc/Menu.htm");

Menu.htm is just the navigation menu, HTML only.

> define your own "home" directory variable (constant is better)
> and use it EVERYWHERE you refer to a file in PHP.

> here is how SM does it.  Look at /src/compose.php:
> First thing it does is define the relative path to the main
> application directory.  After that, all files are included using that
> constant.

/src/compose.php contains:
define('SM_PATH','../');

/plugins/newmail/newmail.php contains:
define('SM_PATH','../../');

Thanks, I've now added something similar to my pages, and it works, so that's 
one
issue you've solved. So, I need to ensure that in that "define" line I add 
another
"../" each time a page is in a lower-level sub-directory. I'm not missing 
something,
that there's some automated way to accomplish that, am I? I assume that when 
adding
that "define" line to each page that you must first know how many directory 
levels
deep the page will be, so as to add the right number of  "../"

> if you have things like links and image tags in plain HTML, then just
> make sure all the files those point to are done with RELATIVE links.

Yes, that's what I always do. e.g. I always use references such as
 link rel="stylesheet" href="../../CSSetc/Mainsite.css"
That's fine for linking a stylesheet or images, but is a problem in the Menu.htm
because it gets included into content web pages that live in varying directory
levels. So a relative link in Menu.htm that works from one directory deep 
doesn't
work from two directories deep. Your sqm_baseuri() idea might be that way to 
deal
with that.

> If you need to calculate hrefs and things like that in the PHP code,
> it can be a little more complicated, but doesn't have to be for simple
> sites.  See how SM calculates $base_uri in the sqm_baseuri() function
> in strings.php in STABLE (note that $PHP_SELF is constructed in the
> function php_self()).  In most simple cases, you can simply include a
> "startup" file (after you define the constant pointing to your main
> app dir per above), and in that startup file, just set another
> constant that contains the base URI for use in hrefs and such things
> throughout the code.  Then you only have to change that value when you
> move the site.

Sorry, could you spell that out a little more step-by-step? I think I 
understand the
concept, of specifying a base location in one single file and then having that 
value
written into each content page. I'm just not clear on what I need to do to 
create
all that.

I had wondered about using BASE HREF in each web page's HTML head. To avoid 
having
to change the BASE HREF in each file once the site is complete and is moved, I
wondered if there's a way to use PHP to write the BASE HREF into each file by
getting the value from a central location. Then when the site moves, I'd only 
have
to change that value in the one file, and PHP would insert it automatically 
into the
content pages. For instance, maybe something like this?:
<base href="<?php echo $site_base ?>">

Perhaps that's what you're doing too, but being such a PHP newbie I couldn't 
figure
out what specifically to write and do to execute your suggestion.


Also, is there a reason why PHP comments in SM files begin with slash and two
asterisks?

I know there's some difference between single quotes versus double quotes, but 
in
many PHP examples they seem to be used interchangeably. For instance, I was 
using
this include line:
include_once("CSSetc/Menu.php");
But I see that you use single quotes instead. Would it be better for me to 
change
such references to single quotes?

Thanks for your help. I'm already further ahead thanks to you, as usual.


-------------------------------------------------------------------------
This SF.net email is sponsored by DB2 Express
Download DB2 Express C - the FREE version of DB2 express and take
control of your XML. No limits. Just data. Click to get it now.
http://sourceforge.net/powerbar/db2/
--
squirrelmail-users mailing list
Posting Guidelines: 
http://www.squirrelmail.org/wiki/MailingListPostingGuidelines
List Address: [EMAIL PROTECTED]
List Archives: 
http://news.gmane.org/thread.php?group=gmane.mail.squirrelmail.user
List Archives:  http://sourceforge.net/mailarchive/forum.php?forum_id=2995
List Info: https://lists.sourceforge.net/lists/listinfo/squirrelmail-users

Reply via email to