Re: [PHP] php - page flow issue...

[email protected] (Rene Veerman)
Newsgroups php.general
Message-ID <[email protected]>
sounds like you want to build an ajax site with global config settings
per subpart(=functionality) for each browser-client.

if it got it right your other requirements are;
- you have run-time config/state settings per subpart instance that
other subparts' instances need to access.
- you want to be able to load subparts within subparts on the site,
also with varying configs.

so i'd say you need a $_SESSION['config'] = array (array(....)).

if you need to store your config, put it in a mysql db with
adodb.sf.net, single table, fields: userID (varchar(250)),
sessionStartDate (datetime), [more fields], config (text).
$sql = 'insert into config (userID,config) values
("'.antiSQLinjection($userID).'",
"'.antiSQLinjection(json_encode($SESSION['config'])).'");';
$q=$adoDBconn->execute($sql); if ($q!==false) { echo 'config updated.'
};

don't bother to make a sql datamodel for the config until it's old and
rusted, or you'll waste much time updating it when your app evolves.

anyways, all subparts need a unique name.
and all instances of any subpart also need an (autogenerated via
random-string / start-date-time) ID/name.
an instance is a running copy of a subpart, with it's own $localConfig.

and all variables in a config for a subpart need to get short yet
descriptive, standarized names. without a prefix.
this is to allow "superglobals" to be overriden by "more local config settings".

$_SESSION['config'] = array (
  'subparts' => array (
     'subPart1Name' => array (
        'global' => array ( /* all browser-specific variables for
subPart1Name, "global" level */ ),
  )),
  'instances' => array (
    'subPart1Name_instance1-ID' => array ( /* all overridden settings
for subPart1Name used in subPart1InstanceID */)
  ),
  'currentSiteLayout' => array(
    'topLevel' => array (
      'subPart1Name_instance1-ID' => array(),
      'subPart5Name_instance2-ID' => array(
         'children' => array (
            'subPart8Name_instance1-ID' => array()
         )
      )
     )
   )
);
Because this allows for much flexibility, that also means it can get messy.
Be careful not to put paradoxes in such a config array.
Or sensitive data.

But it does allow for saving all runtime config settings for any
number of apps on a web desktop, with any number of child-apps per
app.

You need a way to load these subparts without loading too much code.
Let's put the "front-end for a subpart" in a script filename &
function-name that can be called polymorphically.
$subpartIncludeFile = HD_ROOT.'php/subpart_'.$subPartName.'.php';
And lets give each such script at least a function named
'loadHTML_subpart_'.$subPartName ($configArray);
This function should return the HTML needed for the subpart given a
possible $configArray, and this function should call CMS-level
functions to query &/ update the $_SESSION['config'] aswell.

And let's make a single script to load a div with a subpart, to be
called from javascript;
/php/loadSubpart.php?name=subPartName&config={array_as_json_urlencoded}
obviously this will include only the relevant $subpartIncludeFile =
HD_ROOT.'php/subpart_'.$subPartName.'.php';

Centralize your CMS/MVC logic in a single (or a few) require_once()
script(s) and require_once() them at the top of index.php (and at the
top of /php/subpart_xyz.php);
/php/myCMSfunctions.php

Your index.php can put out HTML that uses ajax at all times to load
subparts, or it can push all required html for a page out in 1 go.
Afterall, it has access to the (stored) $_SESSION['config'], and can
load and run the subparts like the ajax script /php/loadSubpart.php
would.
The latter is better imo because it saves some overhead.

As for the javascript end, i recommend jquery.com to simplify all ajax handling.
Their docs are quite good too.
You'll at least need to build a javascript function
loadSubpart(divID_string, subpartName_string, configOverride_array).

Best to put all your CMS' js functions in a single js object from the
start, to keep the namespace clean.
For an example of how to set something like that up, have a look at
http://mediabeez.ws/htmlMicroscope-1.3.0/hm.source.js (site may be
offline for hours sometimes, check "htmlmicroscope" via google and use
the googlecode link to get a copy)

If you need the entire config on the js end (security risks!) then use
json_encode to transfer between php and js. JS has no native
json_encode, but there are several good ones for free on json.org

good luck :)

On Sun, Mar 14, 2010 at 5:53 PM, bruce <[email protected]> wrote:
> hi.
>
> got a situation for a potential page that i'm playing with. i'm trying
> to figure out how to implement it, and the best/good approach to this.
> i'm actually considering integrating this kind of process within a cms
> (joomla/mambo/cmsms/etc..) but right now, this is in the initia
> thought stage...
>
> if you have a thought/page that i can lok at that's actually
> implementing this kind of flow.. i'd really like to see it..
>
> so, here goes...
>
> ===============================================
>
> --need to figure out a way to have the user invoke an action on the
> top section of
>  a page, and have that action, trigger an action on a separate part of the page
>
>
> example:
>
> i have a page that looks something like this:
>
>  +---------------------------------------------------------------+
>
>     initial navbar stuff (always shown on the page)
>
>     <form name="foo">
>       stateList (select/option)
>     </form>
>
>
>     +----------------------------------+
>       <form name="cat"> based on the user
>         selected state                             {
>          <tbl name="dog"> based on the user        {  <<<<< based on
> the selected state
>           user state                               {
>                                                    {
>          "cancelBTN"  "submitBTN"
>       </form>
>
>     +----------------------------------+
>
>                                                        (page1)
>  +---------------------------------------------------------------+
>
> i need to have a way to have the user select a "state" from the
>  statelist, and to then have the tbl/section of the site under
>  the "cat" form, generated, based on the selected state.
>
> at the same time, i need a way to have the user select an item
>  from the "dog" tbl, and to have the user select the
>  cancelBTN/submitBTN, with the app then generating the
>  subsequent action/logic. the page below, is a kind of
>  example of what i'm thinking of...
>
>  +---------------------------------------------------------------+
>
>     initial navbar stuff (always shown on the page)
>
>     <form name="foo">
>       stateList (select/option)
>     </form>
>
>
>     +----------------------------------+
>       <form name="cat2"> based on the user
>         selected state, and the cat1.submitBTN
>
>          confirmation section
>                                                              {
>           based on the user selection from page1/cat1        { <<<
> based on the previous
>           cancel/submitBTN                                   {
> cancel/submitBTN
>
>          "cancelBTN"  "submitBTN"
>       </form>
>
>     +----------------------------------+
>
>                                                        (page2)
>  +---------------------------------------------------------------+
>
>
> i can see a couple of ways of accomplishing this...
>
> 1) i can have a page of logic, that is composed of a bunch of
>  logic, that is basically an "if block", that generates/displays
>  the different parts of the page, based on the user actions of
>  the preceding pages/sections (the cancel/submitBTNs). this approach
>  would essentially require the entire page to be regenerated with
>  each BTN selection.
>
>  the logic would generate/invoke the correct page elements based
>  on the user selection/action of the previous page/section.
>
> 2) i could possibly utilize div/frames, to allow the content in
>  the targeted div/frame to be updated/redrawn/regenerated based
>  on the user action/selection of the previous page/section...
>
>  this might be able to be done (not familiar with the
>  underlying processes to know if this is doable/suitable)
>  or even a goof approach..
>
>  would this apaproach still require the entire page to be
>  redrawn? or just the portion that's in the targeted
>  div/frame...
>
> 3) somehow invoke javascript/ajax function/features/logic,
>  to allow the actions/interaction to occur, such that the
>  content in the targeted div/frame is modified, without
>  requiring the rest of the page to be modified...
>
>  i have no idea if this is doable, or what this would mean,
>  or involve, or how to apprach this..
>
>
> or, there might be a different way of accomplishing this
>  that i haven't even thought of...
>
> any example sites/docs/code would be greatly appreciated...
> heck, i'd even be glad to see an actual site/code that
> demonstrates how this can/might/should be implemented!!!
>
>
> thoughts/comments...
>
> thanks
>
> --
> PHP General Mailing List (http://www.php.net/)
> To unsubscribe, visit: http://www.php.net/unsub.php
>
>
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.