Pages: [1]
  Print  
Author Topic: EXAMPLE: GaiaModXCMS Framework - Create your site.xml....online.  (Read 14145 times)
Glidias
Gaia User
**
Posts: 35


« on: March 12, 2009, 05:31:49 AM »

Advised to check out ModX CMS http://www.modxcms.com so you can understand how the following implementation below works.

For the online example (still a WIP) you can log in as a guest administrator at the following URL:
http://glidias.freehostia.com/manager/
Username: guest
Password: guest123

The experimental site i'm making is at the root url.
http://glidias.freehostia.com/

The site .xml is at http://glidias.freehostia.com/?id=50 . Obviously, you can simply log into the manager as a guest and peek into the other resources being used to generate the site.

I've set up some simple templates/snippets that allows you to to get your ModX CMS site structure working into Gaia Flash Framework. It's only the beginning though so it isn't much.. but hope you find it useful. With it, you can create your "site.xml" online with ModXCMS, and maintain your content from there.  Generally, the design of such an online content-managed Gaia site involves the following:

- You have a standard ModX page template chunk you use for all Gaia Page-based nodes. You can create any number of pages that use this reusable chunk of code below, which is based off Gaia's standard SEO html page template, only I replaced the various portions with various PHP snippet/placeholder calls under ModX, in order to have a fully functioning template. With this chunk, say goodbye to re-scaffolding/managing multiple .html files offline.

{{gaiaSEOTemplate}}
Code:
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
<head>
    <title>[(site_name)] | [*pagetitle*]</title>
    <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
    <meta name="language" content="en" />
    <meta name="description" content="" />
    <meta name="keywords" content="" />
    <script type="text/javascript" src="assets/js/swfobject.js"></script>
    <script type="text/javascript" src="assets/js/swfaddress.js"></script>
    <script type="text/javascript">
        var flashvars = {
            siteXML: "/index.php?id=47",
            branch: [!GetGaiaBranch!]
        };
        var params = {
            menu: "false",
            scale: "noScale",
            allowFullscreen: "true",
            allowScriptAccess: "always",
            bgcolor: "#ffffff"
        };
        var attributes = {
            id:"CGG"
        };
        swfobject.embedSWF("assets/flash/main.swf", "altContent", "1024", "813", "9.0.0", "expressInstall.swf", flashvars, params, attributes);
    </script>
    <style type="text/css">
        html, body { height:100%; background-color:#aaaaaa }
        body { margin:0 auto; }
    </style>
</head>
<body>
    <div id="altContent">
        
        <h1>[(site_name)]</h1>
        <h2>[*pagetitle*]</h2>
               <p>You need Flash player to view this content beautifully.</p>
        [[Wayfinder?startId=`0`]]
        <div id="copy">
           [*content*]
        </div>
        <p><a href="http://www.adobe.com/go/getflashplayer"><img
            src="http://www.adobe.com/images/shared/download_buttons/get_flash_player.gif"
            alt="Get Adobe Flash player" /></a></p>
    </div>
</body>
</html>

The Site XML

Here's an example online siteXML link what can be generated online. :
And the online link: http://glidias.freehostia.com/?id=50

I'll go through the siteXML specs later. For now, read through the template specs.

Template Specs

Here are the 3 different template specs for the 3 different node types, particularly template variables being used for them.

1) == The page node: ==

Template vars being used:
(You'd need to copy and paste link into URL address bar)
http://glidias.freehostia.com/assets/images/modx/gaiaPageTVs.PNG
This template uses the {{gaiaSEOTemplate}} chunk to display content.


2) == The Index page node: ==

Template vars being used:
(You'd need to copy and paste link into URL address bar)
http://glidias.freehostia.com/assets/images/modx/gaiaIndexPageTVs.PNG
This template uses the {{gaiaSEOTemplate}} chunk to display content.

3) == The asset resource node: ==

Template vars being used:
(You'd need to copy and paste link into URL address bar)
http://glidias.freehostia.com/assets/images/modx/gaiaAssetTVs.PNG
Asset nodes' src url normally links directly to the content URL on the Modx site, unless otherwise stated. Be sure to declare the necessary inline attributes (like 'type="xml"') to explicitly declare the type of asset you wish to have under Gaia, since by default, there's no file extensions to indicate the type of asset being used.

By default, the tempate uses the [*content*] placeholder to display content directly.


Here's how different page settings can affect the way child nodes are arranged for the Gaia siteXML.
(You'd need to copy and paste link into URL address bar)
http://glidias.freehostia.com/assets/images/modx/siteXMLnested.PNG[/img]
This allows you to "flatten" your site for Gaia (certain child pages/assets can be brought out as siblings), so the Modx site structure doesn't need to match Gaia's site structure. It even generates a routing "siteXML.route" XMLList table that serves as a useful reference to look up resources by href, id or alias attribute within your Gaia site..

All page ids are set to the unique modx document ids by default, this is because many of such sites may have their pages "flattened" as siblings (1 level deep only) , such that the Gaia site.xml structure does not reflect the content structure in the Modx site. To prevent conflicting ids , I've resorted to using Modx numeric unique ids for each page asset, so that regardless of where it's found in the Gaia site structure, there's no worry as all page ids will be unique anyway. Since the [[GetSiteXML]] snippet generates friendly "route" attributes based off each page node within the Modx site structure, it's a win-win situation, allowing a completley flattened site with unique ids pointing to each page resource, yet having proper the SWF Addresses being shown if "routing" is set to true in [[GetSiteXML]] code. (Otherwise, Gaia will use it's default title-based pretty URL mechanism).

__________________


Last but not least, the source code for the snippets:

[[GetSiteXML]] snippet to scaffold your siteXML dynamically at runtime. This basically echoes out the whole siteXML structure. You need some Modx page to host this snippet obviously. (Also, it's obvious that such a page should use a template containing a template variable of "isGaiaIndexPage" to block itself from being shown in the outputted siteXML code ). Same goes with other pages that host other services that you want to remain hidden from the siteXML output.

Additionally, you need to register page-based templates in the  snippet using their template ids in a lookup assosiative array table (as shown in the line: $pageLookupVars["templateIds"] = array(5=>true); ).
This is to indicate that such resources will end up using Gaia's "page" node (template id of "5"),  otherwise "asset" is always used by default. For page-based assets, a "seo" attribute is created that points to the respective content URL inside the Modx CMS site. :

[[GetSiteXML]]
Code:
<?php
$page
0;
$pageLookupVars = array('isGaiaIndexPage','gaiaInlineAttributes','gaiaDescendantXML''gaiaPageSrc''gaiaRoute''gaiaSiblingChildren');
$assetLookupVars = array('isGaiaIndexPage','gaiaInlineAttributes','gaiaDescendantXML''gaiaAssetId''gaiaAssetSrc');

// Setup template ids and starting variables
$pageLookupVars["templateIds"] = array(5=>true);
$assetLookupVars["templateIds"] = array(6=>true);
$basePath "index";   // index/main
$indexPageId 47;


function 
getDocs($modx$pgVars$assetVars$basePath$startid$parentBranch$parentSibling$routStr$gaiaPath) {
    
$docs $modx->getActiveChildren($startid); 
    
    foreach (
$docs as $key => $doc) {
        
$id $doc['id'];
        
$data $modx->getDocument($id);
        
$isPage $pgVars["templateIds"][$data['template']];
        
$nodeName $isPage ?  "page" "asset";
        
$lookupvars $nodeName == "page" $pgVars $assetVars;
        
$tplvars $modx->getTemplateVarOutput($lookupvars$id);
        if (
$tplvars["isGaiaIndexPage"]) continue;
       
        
$isPage $nodeName == "page";
        
$branchId $doc['alias']!='' $doc['alias'] : $id;

        
$siblingChildren $nodeName == "page" $tplvars["gaiaSiblingChildren"] == "parent" $parentSibling $tplvars["gaiaSiblingChildren"] == "true" false
        
$innerXML $tplvars["gaiaDescendantXML"]; 
        
$myInlineAttributes ""
        
        
$parentRoute $parentBranch == "" $branchId $parentBranch."/".$branchId;
        
$route $tplvars["gaiaRoute"] ? $tplvars["gaiaRoute"] :  $parentRoute;
        
$dispid$tplvars["gaiaAssetId"] ? $tplvars["gaiaAssetId"] : $nodeName=="page" $id $branchId;
     
        
$myGaiaPath $gaiaPath."/".$dispid;
        
$resourceURL $modx->makeUrl($id);
        
        
$addRout '<route id="'.$id.'" alias="'.$doc['alias'].'" href="'.$resourceURL.'" path="'.$myGaiaPath.'" />';
        
$routStr .=  $addRout;
        
        
$myInlineAttributes.=' id="'.$dispid.'"';
        
$myInlineAttributes.=' route="'.$route.'"'
        
$myInlineAttributes.=' title="'.$data["pagetitle"].'"';
        
$myInlineAttributes.= $data["hidemenu"] ? ' menu="false"' ' menu="true"';
        if ( 
$nodeName=="page" $asrc =  $tplvars["gaiaPageSrc"];
        else 
$asrc $tplvars["gaiaAssetSrc"]!="" $tplvars["gaiaAssetSrc"] : $resourceURL;
         
        
$myInlineAttributes.= ' src="'.$asrc.'"';
        
$myInlineAttributes.= $nodeName=="page" ?  ' seo="'.$resourceURL.'"' "";
        
$myInlineAttributes.= ' '.$tplvars["gaiaInlineAttributes"];
       
      
       
$echoStr '<'.$nodeName.' '.$myInlineAttributes .' >'.$innerXML;
       echo 
str_replace('&''&amp;'$echoStr);
      

       
       if (!
$siblingChildren) {
          if (  
$modx->getActiveChildren($id)  ) $routStr getDocs($modx,$pgVars,$assetVars,$basePath$id$parentRoute$siblingChildren$routStr$myGaiaPath);
        
           echo( 
'</'.$nodeName.'>' );
       }
       else {
           echo( 
'</'.$nodeName.'>' );
           if ( 
$modx->getActiveChildren($id) )  $routStr getDocs($modx,$pgVars,$assetVars,$basePath$id$parentRoute$siblingChildren$routStr$gaiaPath);
       }
    } 
    return 
$routStr;
}

echo <?
xml version="1.0" encoding="utf-8"?>
';
echo '<site title="[(site_name)]" indexFirst="true" menu="true" routing="true" preloader="/assets/flash/preload.swf"  >';

$indexDoc = $modx->getDocument($indexPageId);
$tplvars = $modx->getTemplateVarOutput($pageLookupVars, $indexPageId);
$myInlineAttributes = "";
$myInlineAttributes.= ' src="'.$tplvars["gaiaPageSrc"].'"';
//$myInlineAttributes.= ' seo="'.$modx->makeUrl($indexPageId).'"';
$myInlineAttributes.= ' '.$tplvars["gaiaInlineAttributes"];

echo '<page id="index" title="CGG Index" '.$myInlineAttributes.'>';
echo $tplvars["gaiaDescendantXML"];

//echo '<page id="main" src="/assets/flash/section.swf">';
$routStr = getDocs($modx, $pageLookupVars, $assetLookupVars, $basePath, 0, "", $tplvars["gaiaSiblingChildren"] == "true", "", $basePath);
//echo '</page>';

echo "</page>";

echo $routStr;

echo "</site>";
?>


[[GetGaiaBranch]] snippet to retrieve Gaia page branch path from current page resource id, to allow Gaia redirection from any Modx page.

Code:
<?php
// Setup template ids and starting variables
$basePath "index";
$lookupvars = array("gaiaSiblingChildren");
$indexPageId 47;

$id $modx->documentIdentifier;
$derivedPath $id;
while ( 
$parent $modx->getParent($id,0,'id, template') ) {
   
$id $parent["id"];
  
   
$derivedPath $id."/".$derivedPath;
}

$chkArray explode("/"$derivedPath);
$tplvars $modx->getTemplateVarOutput($lookupvars$indexPageId);
$siblingChildren $tplvars["gaiaSiblingChildren"] == "true";
$derivedPath "";
$lastParentPath "";

foreach(
$chkArray as $str) {
    
$tplvars $modx->getTemplateVarOutput($lookupvars$str);
    
$siblingChildren $tplvars["gaiaSiblingChildren"] == "parent" $siblingChildren $tplvars["gaiaSiblingChildren"] == "true";
   

     
$derivedPath $lastParentPath."/".$str;
   
   
      if  (!
$siblingChildren)  $lastParentPath $derivedPath;
       
   
}


return 
$basePath."".$derivedPath;
?>


This is used in the {{gaiaSEOTemplate}} chunk to output the appropiate branch path for the Gaia site. Excerpt below:
Code:

 var flashvars = {
            siteXML: "/index.php?id=47",
            branch: [!GetGaiaBranch!]
        };



Sorry, if this seems like a mouthful. The idea is very simple actually. Hopefully with some examining and tinkering you can figure this out to create your own ModX/Gaia-Powered CMS site!
« Last Edit: May 09, 2010, 06:56:35 AM by Glidias » Logged

My GitHub code repository:
http://github.com/Glidias
turtlebite
Gaia Fan
***
Posts: 174



WWW
« Reply #1 on: March 13, 2009, 03:14:20 AM »

Hi Glidias

That looks really interesting... and like a lot of work ahead...  Wink I was thinking of creating an interface for Weblication or Typo 3, but I didn't even start, it turned out to be to much of a workaround. I haven't tried ModX yet, but it looks nice!
Logged

kulkoff
Gaia Novice
*
Posts: 3


« Reply #2 on: July 16, 2009, 08:58:43 AM »

...
A sample "BaseModXIndexPage  class" ...


I start use MODx 2 days ago, and its amazing stuff  Smiley

I don't understand what about "BaseModXIndexPage  class".
Can you explain me, maybe with some example of code?
« Last Edit: July 17, 2009, 12:20:28 AM by kulkoff » Logged
Lem
Gaia User
**
Posts: 18


Point & Click Addicted


WWW
« Reply #3 on: March 15, 2010, 08:40:56 AM »

Thanks Glidias for this well explained Step-by-Step!
Can you add the Screenshots again?

I would really appreciate it.

Best regards
Lem
Logged

SunRhythms
Gaia User
**
Posts: 23


« Reply #4 on: April 07, 2010, 01:29:15 PM »

Any one get this working...
Can you upload any pics?
Logged
Glidias
Gaia User
**
Posts: 35


« Reply #5 on: April 18, 2010, 10:39:03 AM »

I've updated the example. It's online as well, through the Flash isn't there yet and the content will be real content soon between Gaia and Modx. IT's far more minimalistic and doesn't add any more dependencies (extraneous xmls and such..). It only consist of just one siteXML, a minimal set of template variables for asset/page nodes to customise the properties of each node, and 1 template chunk which is the standard Gaia SEO page format used for page nodes.
« Last Edit: April 18, 2010, 08:11:11 PM by Glidias » Logged

My GitHub code repository:
http://github.com/Glidias
Glidias
Gaia User
**
Posts: 35


« Reply #6 on: May 09, 2010, 03:06:08 AM »

Here's some example service code I used to convert html-generated hyperlinks received from the CMS directly to Gaia navigation paths. Since the CMS-generated site.xml automatically generates an XMLList of route nodes, converting web-based (SEO) href paths to Gaia paths is a snap.

The service, which can be used standalone:
Code:
package cgg.services
{
import com.gaiaframework.api.IGaia;
/**
* Resolves hrefs to proper Gaia navigation routes.
* @author Glenn Ko
*/
[Inject]
public class HrefNavigationService implements IHrefNavigationService
{
protected var _gaia:IGaia;
protected var _routeList:XMLList;

/**
* Constructor. Reads off Gaia api's site xml and 'route' list in the xml.
* @param gaia
*/
public function HrefNavigationService(gaia:IGaia)
{
if (gaia == null) return;
_gaia = gaia;
_routeList = gaia.getSiteXML().route;
}


/**
* Checks whether there's a matching href attribute in route-list
* @param val
* @return
*/
public function hasHref(val:String):Boolean {
return (_routeList.(@href== val)).length();
}

/**
* Attempts to navigate to Gaia path by href reference
* @param href
* @return Whether matching href in route-list is found to perform gaia navigation.
*/
public function navigateByHref(href:String):Boolean {
var tryRoute:XMLList = _routeList.(@href == href);
if ( tryRoute.length() ) {
_gaia.goto(tryRoute[0].@path);
return true;
}
return false;
}



}

}


The interface signature I mapped as a singleton to use the above service implementatation.

Code:
package cgg.services
{

/**
* ...
* @author Glenn Ko
*/
public interface IHrefNavigationService
{

/**
* Checks whether there's a matching href attribute to perform navigation within the Flash site
* @param val
* @return
*/
function hasHref(val:String):Boolean;

/**
* Attempts to navigate to Flash site path by href reference
* @param href
* @return Whether matching href attribute in route-list is found to perform Flash navigation.
*/
function navigateByHref(href:String):Boolean;
}

}

And my StageMediator view I whipped up under RobotLegs that makes use of the above service to help convert bubbled TextEvent.LINK events from the Gaia site .
Code:
package cgg.views
{
import cgg.services.IHrefNavigationService;
import com.gaiaframework.api.IGaia;
import flash.display.DisplayObjectContainer;
import flash.events.Event;
import flash.events.TextEvent;
import org.robotlegs.mvcs.Mediator;
/**
* ...
* @author Glenn Ko
*/

public class StageMediator extends Mediator
{

protected var stageContainer:DisplayObjectContainer;


[Inject]
public var hrefNavService:IHrefNavigationService;

[Inject]
public var gaia:IGaia;


public function StageMediator()
{

}

override public function setViewComponent(obj:Object):void {
super.setViewComponent(obj);

stageContainer = obj as DisplayObjectContainer;
if (stageContainer == null) throw new Error("Could not resolve to DisplayObjetContainer:" + obj);
}

override public function onRegister():void {
eventMap.mapListener(stageContainer, TextEvent.LINK, onTextLink);
}


private function onTextLink(e:TextEvent):void {
if ( !hrefNavService.navigateByHref(e.text) ) {
                            // Do something else with TextEvent.LINK if navigation service fails
                            //to resolve the hyperlink.
}

}

}

}

CGG's navigation site menu is populated by a SEOPageRenderer class I have in my code repository which I use with Gaia to populate copy content into existing registered stacked display renders (which are known as IDisplayRenders). The IDisplayRender interface provides references to display objects (through getRendered():DisplayObject and getRenderedById(id):DisplayObject). Many of these objects implement interface signatures such as IList  (or IText/ITextField) to allow them to be content-populated through xHTML markup. As a result, the MenuMediator I used doesn't need to populate the content with list items, since this is done by the SEOPageRenderer. The MenuMediator only needs to listen to the Gaia's onAfterGoto event to dispatch a selection notification on the targetted child item to trigger a selected state. Selected state stylings are done by GXML/CSS markup/style declarations without having to code them in Actionscript, which means the majority of such display items are simply skinned over through other means.

Here's the MenuMediator (I deployed using RobotLegs/CamoGaiaGXML manual mediation) which uses a service to listen on Gaia onAfterGoto's event to notify the view of selection changes.

Code:
package cgg.views
{
import cgg.services.GaiaNavMenuService;
import cgg.services.HrefNavigationService;
import flash.display.DisplayObjectContainer;
import flash.display.Sprite;
import org.robotlegs.mvcs.Mediator;
/**
* ...
* @author Glenn Ko
*/
public class MenuMediator extends Mediator
{
    

[Inject(name="view")]
public var view:DisplayObjectContainer;
           /* In CGG's manual mediation, you can mark variables as "view" to declare declare
           the variable(s) you wish to use for the view. This allows you to map a view component
           to multiple interface signatures (if so required), thus declaring the interface/class  
           dependencies you require from the view component itself. */

[Inject]
public var gaiaNavMenuService:GaiaNavMenuService;

public function MenuMediator()
{

}

override public function onRegister():void {
gaiaNavMenuService.init(view);
}

override public function onRemove():void {

gaiaNavMenuService.destroy();
}

}

}

The GaiaNavMenuService (which you can use standalone.)
Code:
package cgg.services
{

import com.gaiaframework.api.IGaia;
import com.gaiaframework.events.GaiaEvent;
import flash.display.DisplayObject;
import flash.display.DisplayObjectContainer;
import flash.events.Event;


/**
* Connects Gaia's onAfterGoto event with a navigation menu container.
* * @author Glenn Ko
*/
[Inject(name="")]
public class GaiaNavMenuService
{
protected var _menuContainer:DisplayObjectContainer;
protected var _gaia:IGaia;
protected var _routesList:XMLList;
protected var _currentIdCache:String;

/** Bubbling Event to listen to from menu to trigger selection state on target
*  @see sg.camo.notifications.GDisplayNotifications
* **/
public static const SELECT:String = "GDisplay.SELECT";  


public function GaiaNavMenuService(gaia:IGaia )
{
if (gaia == null) return;

_gaia = gaia;
_routesList = gaia.getSiteXML().route;
}

public function init(menuContainer:DisplayObjectContainer):void {
_menuContainer = menuContainer;
_menuContainer.addEventListener("addChild", onChildAdded, false, 0, true);
setupValidPage(_gaia.getCurrentBranch() );
_gaia.afterGoto(onAfterGoto);
}

/**
* Basically checks for any newly added children in the menu and check if it matches
* the current selected state id. If so, dispatches selection on item.
* @see camo.core.events.CamoChildEvent
* @param e   A CamoChildEvent of type "addChild"
*/
protected function onChildAdded(e:Event):void {
var untypedObj:Object = Object(e);
if ( untypedObj.hasOwnProperty("child") && untypedObj.child.name === _currentIdCache ) {
untypedObj.child.dispatchEvent( new Event(SELECT,true) );
}
}

protected function onAfterGoto(e:GaiaEvent):void {
setupValidPage(e.validBranch);

}

protected function setupValidPage(validBranch:String):void {
var findRoute:XMLList = _routesList.(@path == validBranch);
if (findRoute.length()) {
var xml:XML = findRoute[0];
var ider:String = xml.@id != undefined ? xml.@id : validBranch;
_currentIdCache = ider;
var disp:DisplayObject = _menuContainer.getChildByName( ider );
if (disp) {
disp.dispatchEvent( new Event(SELECT, true) );
}
}
}

public function destroy():void {
_gaia.removeAfterGoto(onAfterGoto);
if (_menuContainer) _menuContainer.removeEventListener("addChild", onChildAdded);
}


}

}

More on SEO content population:

In some cases, requesting directly from the "copy" property in the SEOAsset might come in useful rather than relying on a SEOPageRenderer service, and I was thinking this could be made as a dynamic value object which can be used as binding attributes in textfields. So, it can be possible to bind attributes to a copy stack of SEOAssets (CGG already has a stacking system that allow stacking of resource declarations such as CSS property styles/behaviours/definitions,etc.) when entering differnet levels of a Gaia site, so why not have a global lookup stack of SEOAssets that can stack copy content by their ids? So, when differnet copy ids overlap each other as a result of stacking SEOAssets' copies when entering nested/sibling page levels, their values are being updated which triggers value changes on the view directly through curly brace bindings in GXML. This allows SEO copy nodes within the site stricture to automatically update content through data binding, each copy id being used as a bindable property on the value object. Of course, the Flash developer must ensure such xHTML-based SEO content is being binded to Flash.

For example, visiting different parts of a Gaia site can automatically trigger value changes on the following markup-declared assets rendered through a BaseGXMLMediator.:
Code:
 <gxml>
      <Models>
           <local id="copy" class="cgg.services::SEOCopyVOStack " />
     <Models>
      <body>
          <divText class="headerText" text="{copy.title}" />
           <divText class="bodyText" text="{copy.body}" />
       </body>
   </gxml>

If I entered a new page with a new <p id="title"> declaration, the SEOCopyVOStack updates it's "title" value and dispatches a change event,  which causes the headerText to get updated automatically. But how do you handle transitions as a result of binding value changes? (so, it doesn't look like an ugly instant switch you see in most MXML apps when the data model changes). A TransitionBindingService can be used to transition out the header text, and it's detected to be complete, updates the value, and re-transition it back in. This can be done on all items you know have some sort on TransitionBehaviour applied on them, so that the transition module can be extracted out from those displays to perform a transition out phase.

One thing I'm also considering is how to transfer this out of GXML declarations, so data binding can occur on ANY textfield/textfield that appears on the stage. Technically, all TextFields could be mediated / auto-wired to have bindings based of the current text copy staged by designers which can be found to enclosed with curly braces. When it does, the textfield automatically gets auto-wired/auto-binded to the SEOCopyVOStack's property , so anytime it changes, the textfield automatically updates itself. This allows you to use the Flash IDE to create textfields that automatically get localised when running on Gaia.
« Last Edit: May 09, 2010, 09:28:10 AM by Glidias » Logged

My GitHub code repository:
http://github.com/Glidias
fixedmachine
Gaia User
**
Posts: 12


fixedmachine
« Reply #7 on: May 18, 2010, 07:59:40 AM »

Wow! It's exactly what I've looking for.

I'm working on flash site with MODx as an CMS and I was planning to make something very similar.

But your work is just a lightyears ahead of the stuff I've made.

You are my hero now Glidias. Thank you.
Logged
monsterwatt
Gaia Fan
***
Posts: 105


« Reply #8 on: May 18, 2010, 11:51:24 AM »

This all seemss very confusing,

who is it aimed at - can it be simplified to make more user friendly for clients

how would you add a gallery section where clients could upload their own photos etc.?

Logged
kingpinwebdesigns
Gaia Novice
*
Posts: 5


« Reply #9 on: December 04, 2010, 03:31:56 PM »

Hey there... I would agree that this seems very confusing, but I would really like to get something like this in order... is there any hope for some help setting that up?  I have of course set up this MOD X system, but it is just getting very difficult to understand.  Please??? Smiley Smiley
Logged
fixedmachine
Gaia User
**
Posts: 12


fixedmachine
« Reply #10 on: March 17, 2011, 07:05:46 AM »

http://www.annaland.pl/

Oh... I forgot to put link to my finished work. OK, so this is service created with MODx CMS and GAIA framework. There are 2 different sections, but the CMS is the same. Site language is Polish.
http://www.annaland.pl/turystyka/ - this is the flash site on GAIA

I've used slightly modified snippet from Glidias for site.xml generation. Flash site is fully SEO compatible.

I'll try to create an example/tutorial site to explain my workflow if some is interested.
Logged
Pages: [1]
  Print  
 
Jump to:  

TinyPortal v1.0 beta 4 © Bloc