.htaccess - PHP URL Routing - Using Database Entries in Class -


orginal query - updated query below

in process of building custom application in php. know there have been many questions asked routing etc. on here , have spent many of hours reading them all. how got routing elements work in first place. 1 thing cant fit project peoples suggestions on how route urls based on database entry.

the application working fine , have url routing in place works how want it. issue have when add new products database have trigger generates seo friendly url , stores in field in database.

all product urls structured in same way.

/north/productdetails/productname
/south/productdetails/productname
/northeast/productdetails/productname

etc.

looking not have manually write new url route routes.php file every time product added.

this .htaccess

rewriteengine on rewritebase / rewritecond %{request_filename} !-f rewritecond %{request_filename} !-d rewriterule ^(.+)$ index.php?uri=$1 [qsa,l] 

and index.php file contains:

<?php header("cache-control: no-cache"); include 'system/config/route.php'; include 'system/config/settings.php'; connect();  $route = new route();  include 'system/config/routeurl.php';  $route->add('/', 'home'); $route->add('/results', 'results'); $route->add('/special', 'special'); $route->gogo();  ?> 

i need go in , catch every url passed it. needs check url , send relevant information page.

$route->add('/results/northeast/productdetails/<whateveryisstoredindatabse>', 'producturls'); 

the class file use @ min check this:

class producturls {  function item($itemid) {     $host = $_server['server_name'] . $_server['request_uri'];     $itemid = '0';     if($host == host +<urlstored in database>) {         $itemid = <what ever id in database>;     } else {     $itemid = '0';      $_post['showproductdetails'] = $itemid; }  public function __construct() {      producturls::item($itemid);      include 'pages/productdetails.php'; } } 

the class wrote above use deter current urls onsite, have modified identify need on.

this route controller:

class route {  private $_uri = array(); private $_method = array();  /**  * builds collection of internal url's  * @param type $uri  */  public function add($uri, $method = null)  {      $this->_uri[] = '/' . trim($uri, '/');       if ($method != null) {          $this->_method[] = $method;      }  }   /**   * triggers start page   */  public function gogo()  {     $urigetparam = isset($_get['uri']) ? '/' . $_get['uri'] : '/';      foreach ($this->_uri $key => $value)     {         if (preg_match("#^$value$#", $urigetparam))         {             $usemethod = $this->_method[$key];             new $usemethod();         }     }  }  } 

does have suggestions in can have? or require complete rewrite of routing?

regards

updated

i have left original query in one. landing on page have been able obtain data database , use generate route in routing controller dynamically. how did it.

my index.php file looks this:

<?php header("cache-control: no-cache"); include 'system/config/route.php'; include 'system/config/settings.php'; connect();  $route = new route(); include 'system/config/routeurl.php'; $q="select  `itemid`,`seofriendlyurl`  `products`"; $r=mysql_query($q);  $numrows = mysql_num_rows($r); if($numrows==0)  {  // nothing database empty - not needed in case } // dynamic routing elements while($row = mysql_fetch_array($r)) { $route->add("/results" . $row['seofriendlyurl'] ."", 'producturls'); } //static routing elements $route->add('/', 'home'); $route->add('/results', 'results'); $route->add('/special', 'special'); $route->gogo();  ?> 

this has worked perfectly, when ever 1 of these urls called diverts right page. thing i'm having issues passing relevant id's via $_post

this ended not working.

class producturls {  function clubs($itemid) {     $q="select  `itemid`,`seofriendlyurl`  `products`";     $r=mysql_query($q);      $numrows = mysql_num_rows($r);     if($numrows==0)      {      $itemid = '0';     }      while($row = mysql_fetch_array($r))     {     $host = $_server['request_uri'];     $clubid = '0';     if($host == "/newtest/results" . $row['seofriendlyurl'] ."") {         $clubid = "'" . $row['itemid'] ."'";     } else {     $itemid = '0';     }     }     $_post['showclubdetails'] = $itemid;     }      public function __construct()     {      producturls::clubs($itemid);      include 'pages/productdetails.php';     }     } 

however doesn't work. because query etc. in index page needed again here? , better query store id in variable , use in function instead?

regards

i have managed working. here did. may of use else.

index.php

include 'system/config/routeurl.php'; $q="select  `itemid`,`seofriendlyurl`  `products`"; $r=mysql_query($q);  $numrows = mysql_num_rows($r); if($numrows==0)  {  echo "there's nothing here!"; }  // add's seofriendly url's in table route file (dynamic) while($row = mysql_fetch_array($r)) { $route->add("/results" . $row['seofriendlyurl'] ."", 'producturls'); } 

routeurl.php

class producturls {   public function __construct()   {      $host = $_server['request_uri'];     $host = ltrim ($host, '/results');     $host = "/$host";     $q="select `itemid`,`seofriendlyurl`  `products` `seofriendlyurl` = '$host'";     $r=mysql_query($q);      if($r) {     $row = mysql_fetch_assoc($r);     $itemid = $row['itemid'];     } else {         $itemid = '0';     }     $_post['showclubdetails'] = $itemid;     //echo "whole query: $itemid"; // make sure productid being passed.     include 'pages/productdetails.php';     } } 

Comments

Popular posts from this blog

Payment information shows nothing in one page checkout page magento -

tcpdump - How to check if server received packet (acknowledged) -