In addition to clarkphp's comment, if you have static files inside
directories, ie. views/pages/about/foo.ctp
Router::connect('/about', array('controller' => 'pages', 'action' =>
'display', 'about/index'));
Router::connect('/about/*', array('controller' => 'pages', 'action' =>
'display', 'about'));
On Fri, Jan 16, 2009 at 4:01 PM, clarkphp <[email protected]> wrote:
>
> Jesse,
> Are you wanting to access static pages without seeing the word "pages"
> in the URL?
> You could edit app/config/routes.php to have lines like this in it:
>
> Router::connect('/about', array('controller' => 'pages', 'action' =>
> 'display', 'about'));
> Router::connect('/join', array('controller' => 'pages', 'action' =>
> 'display', 'join'));
>
> Then if someone accesses your site with http://yoursite/about they see
> the page at app/views/pages/about.php
> An access using http://yoursite/join would display the join page at
> app/views/pages/join.php
>
> Are you using mod_rewrite in Apache? Or am I completely missing your
> intentions?
> - Clark
>
> On Jan 16, 10:19 am, Jesse <[email protected]> wrote:
>> I know this comes up a lot. I've always fixed this before (1.1) with a
>> core hack. I thought that as I moved my sites to 1.2 now I would come
>> up with a little better solution.
>>
>> I'm not sure if this is the best solution but it works for me. I want
>> others thoughts and opinions for this solution.
>>
>> THE BASICS:
>> Use a class within the routes config to pull all files from the "view/
>> pages" directory. Loop through this to account for directories and
>> such. Store these in array (do a little hygiene). Then, loop through
>> this array and create a custom route for each page.
>>
>> It works for me, but I am still thinking there is a better way of
>> integrating this into cake. I'll provide the code I'm using on my dev
>> box below. Any suggestions are welcome....
>>
>> /////Component that does all the work....... (should this not be a
>> component?)
>>
>> <?php
>>
>> class PagesRoutesConfigComponent extends Object {
>> var $default_dir;
>> var $pages;
>> var $dirs;
>> var $deleted_dirs;
>>
>> function __construct(){
>> $this->default_dir = '/users/jesseainskeep/sites/inskeep-
>> photography/app/views/pages/';
>> $this->pages = array();
>> $this->dirs = array();
>> $this->deleted_dirs = array();
>>
>> //run through default directory
>> $this->getPagesFromDir($this->default_dir);
>>
>> //funny way or writing this... this populates the pages array
>> and jumps through each directory it sees
>> $exit = true;
>> while ($exit){
>> //run through array...
>> foreach ($this->dirs as $key=>$value){
>> $value = $value . "/";
>> $this->getPagesFromDir($value);
>> $this->deleted_dirs[] = $value;
>> unset($this->dirs[$key]);
>> }
>>
>> if (empty($this->dirs)){
>> $exit = false;
>> }
>> }
>>
>> //kill the full path attached to each "page"
>> foreach ($this->pages as $key=>$value){
>> $this->pages[$key] = str_replace($this->default_dir, '',
>> $value);
>> }
>>
>> }
>>
>> function getPagesFromDir($sentDir){
>> $search = array('.ctp', '.thtml');
>> $replace = '';
>> if (is_dir($sentDir)) {
>> if ($dh = opendir($sentDir)) {
>> while (($file = readdir($dh)) !== false) {
>> if (is_file($sentDir . $file)){
>> $file = str_replace($search, $replace, $file);
>> $this->pages[] = $sentDir . $file;
>> }elseif(is_dir($sentDir . $file) && $file != "." &&
>> $file != ".." ){
>> $this->dirs[] = $sentDir . $file;
>> }
>> }
>> closedir($dh);
>> }else{
>> echo "Cannot open sent 'dir'!";
>> }
>> }else{
>> echo "Sent 'dir' not available!";
>>
>> }
>> }
>>
>> function printAll(){
>> echo "<h1>Pages</h1>";
>> print_r($this->pages);
>> echo "<br /><br />";
>>
>> echo "<h1>Directories</h1>";
>> print_r($this->dirs);
>> echo "<br /><br />";
>>
>> echo "<h1>Deleted Directories</h1>";
>> print_r($this->deleted_dirs);
>> echo "<br /><br />";
>> }
>>
>> }
>>
>> ?>
>>
>> ////Code in routes file...
>> //read all files in pages directory and create custom route for each
>> one
>> include_once('/users/jesseainskeep/sites/inskeep-photography/app/
>> controllers/components/pages_routes_config.php');
>> $worker = new PagesRoutesConfigComponent();
>> foreach ($worker->pages as $page){
>> Router::connect($page, array('controller' => 'pages', 'action'
>> => 'display', ltrim($page, '/')));
>>
>> }
>>
>> As I said, this is my first stab and there will for sure need to be
>> revisions (dynamically pulling Cake path, auto loading component vs.
>> doing include, ect).
>>
>> This works good on my machine, but I'm sure there are problems.
>> Suggestions welcome!
> >
>
--~--~---------~--~----~------------~-------~--~----~
You received this message because you are subscribed to the Google Groups
"CakePHP" group.
To post to this group, send email to [email protected]
To unsubscribe from this group, send email to
[email protected]
For more options, visit this group at
http://groups.google.com/group/cake-php?hl=en
-~----------~----~----~----~------~----~------~--~---