Navigatie

Status
Niet open voor verdere reacties.

RoboticPro

Gebruiker
Lid geworden
8 nov 2008
Berichten
568
Ik ben mijn site aan het herbouwen en vroeg me af wat een goede manier is om pagina's in te voeren ik doe het nu met :

Code:
<?php

function open_page(){
	$folder = "Pages/";
	
	if(isset($_GET['page'])){
		$page = $_GET['page'];
	}else{
		$page = "home";
	}

	$file = $folder.$page.".php";

	//print $file;
	
	if(file_exists($file)){
		include($file);
	}else{
		include($folder."error.php");
	}
	
}
?>

Maar ik zie ook websites waarvan de url was : http://site.nl/map/map/map/map/nr/

ik vroeg me af hoe ze dat doen.

Alvast bedankt,
Brian van der Horst
 
SVN uitcheken weet je of niet maar heb je eclipse of een progje voor nodig zie opensource net als gift en cvs.
http://code.google.com/p/autosite/
Let op zit iets complexer in elkaar maar je zal vast snel doorhebben hoe het in elkaar steekt
Wat gebeurt er
  • mappen worden ingelezen en naar een bestand weggeschreven
  • robot.txt maakt zich aan
  • alle mappen worden weergegeven
  • om veiligheid te behouden is eerste map weggelaten wat op zich niet nodig is maar zorgt dat deze snel kan verhuizen van plaats

Waarom plaats ik niet alle code hier tja meer of 50 files met objecten enz... en wordt cms genoemt niet alle functies zijn voorzien zoals users enz
 
@kenikavanbis: Versiebeheer staat hier volgens mij aardig los van.

Het gaat om de manier van site-structuur bouwen.
 
@kenikavanbis: Versiebeheer staat hier volgens mij aardig los van.

Het gaat om de manier van site-structuur bouwen.
Dat weet ik maar je moet wel als je één heel project wil laten downloaden die volledig doet wat hij verlangd
kan ik hier toch niet alle code zetten De mijne maakt er een asoiatieve array van dus onmiddelijk bruikbaar om verder te werken
 
Wie zegt dat hij al die code nodig heeft?

Als je gewoon zegt dat jij met een array zou werken en vervolgens de array zou doorlopen om de juiste bestanden te pakken is het toch ook opgelost?

PHP:
$pages = array(
  'home' => 'default.php',
  'contact' => 'contact.php'
);

if(in_array($_GET['page'], $pages)) {
  if(file_exists($pages[$_GET['page']])) {
    include $pages[$_GET['page']];
  }
}
 
Wie zegt dat hij al die code nodig heeft?

Als je gewoon zegt dat jij met een array zou werken en vervolgens de array zou doorlopen om de juiste bestanden te pakken is het toch ook opgelost?

PHP:
$pages = array(
  'home' => 'default.php',
  'contact' => 'contact.php'
);

if(in_array($_GET['page'], $pages)) {
  if(file_exists($pages[$_GET['page']])) {
    include $pages[$_GET['page']];
  }
}
OK We beginnen met een fillscanner class waar nadien een object instantie van wordt gemaakt
PHP:
<?php
	class FileScanner{
 /**
 * @author Lieven Roegiers
 * @copyright 2009 
 * @CMS autosite
 * opensource http://code.google.com/p/autosite/
 */
		private $dirs =array();
		private $files =array();
		private $inc_ext =array();
		private $exc_ext =array();
		private $isnotinc_ext = true;//!!!not!!!
		public function scandir($dir){
			$this->dirs =array();
			$this->files =array();
			if ($d = Dir($dir)){
				while (false !== ($entry = $d->read())) {
                	$pos = strpos($entry, ".");
                	if ($pos === false){
            	       array_push($this->dirs,$entry);	
		            }elseif(substr($entry, 0, 1) != "."){
            		   $name = substr($entry, 0, $pos);
            		   $ext = substr($entry, -4);
            		   //$this->test2($ext);
		               if (!in_array($ext,$this->exc_ext)){
							if ($this->isnotinc_ext||in_array($ext,$this->exc_ext)){
								array_push($this->files,$entry);
		               		}
		               }
           	        }
                }
			}
			$this->test();
		}
		private function is_incext(){
			return count($this->inc_ext,1)<1;
		}
		public function set_inc_extfilter($arrlist){
			$isnotinc_ext = false;//!!!not!!!
			$this->inc_ext=$arrlist;
		}
		public function set_exc_extfilter($arrlist){
			$this->exc_ext=$arrlist;
		}
		/**
    	* @param $array[inc]=array('.inc','.htm','.old'); 
    	* @param $array[exc]=array(".htaccess");
     	*/
     	public function setfilter($arr){
     		if (isset($arr['inc'])){
     			$this->inc_ext=$arr['inc'];
     		}
     		if (isset($arr['exc'])){
     			$this->inc_ext=$arr['exc'];
     		}
		}
		public function getdirs(){
			return $this->dirs;
		}
		public function getfils(){
			return $this->files;
		}
		private function test(){
			print "<br><br>print dirs<br>";
			print_r($this->dirs);
			print "<br><br>print files<br>";
			print_r($this->files);
		}
		private function test2($test){
			print property_exists($test ,$this->exc_ext);
			print($test);
			//print "<pre>";
			print_r($this->exc_ext);
			//print "</pre>";
		}
}
?>
verder maken we een menu met een instantie van de filescanner
PHP:
<?php
/**
 * @author Lieven Roegiers
 * @copyright 2009
 * @CMS autosite
 */
include($autosite['functions']."data/FileScanner.inc");
class Menu{
	private $lang;
    private $path;//path van de menu
    private $filename;
    private $strmenu;
    private $entry;
    private $items =array();
    private $jsvarname = "Items";
    private $id=0;
    public function Menu($lang) {//./Layout is for security
    	$this->lang = $lang;
	    $this->filename = "Menu.".$lang.".dat";
	    print"<!-- menu -->";
	}
    /**
     * @menu Lieven Roegiers
     * @info write a variabele Items (path items)[key,value]
     * @param $Nfile filename of js varfile ,$path  path Te doorzoeken path
     */
	public function additems($arr,$tolocatie){
 		 foreach($arr as $key){
 		 	$this->additem($key,$tolocatie);
 		 }
 	}
 	public function addsubitems($attlabel,$arr,$tolocatie){
 		 foreach($arr as $key){
 		 	$this->addsubitem($attlabel,$key,$tolocatie);
 		 }
 	}
 	private function additem($label,$tolocatie){
 		$pos = strpos($label, ".");
	    $name = substr($label, 0, $pos);
 		$this->items[$name]=$tolocatie;
 	}
    private function addsubitem($attlabel,$label,$tolocatie){
    	$pos = strpos($label, ".");
	    $name = substr($label, 0, $pos);
 		$this->items[$attlabel][$name]=$tolocatie;
 	}
 	public function getif_menu_exist($has_clientjs=true){
 		if(!is_writable($this->filename)){
            return false;
        }elseif(!$has_clientjs){
        	$menu = file_get_contents($this->filename);
        	//Todo replays
        	//print '<ul>';
        	$menu = str_replace("'],['",'',$menu);//</li><li>
        	$menu = str_replace("','?",'?',$menu);
        	$menu = str_replace("-','",'--><a class="mnuitem out" href="',$menu);
        	$menu = str_replace("','-",'</a><!--',$menu);
        	$menu = str_replace("','",'">',$menu);
        	$menu = str_replace('[','<!--',$menu);//<li>
        	print str_replace(']','-->',$menu);//</li>
			print '';//</ul>
			return true;
        }else {
            print file_get_contents($this->filename);
            return true;
        }
 	}
	public function Generate_menu($has_clientjs=true){
            $this->path = $path;
        	foreach($this->items as $page => $to){	
			   if(is_array($to)){
			   		$this->save_Item(++$this->id,$page);
			   		foreach($to as $page2 => $to){
			   			$this->save_Item("^".$this->id,$to,"id=".$page."/".$page2."&amp;lang=".$this->lang,$page2);
			   			$this->save_robotitem($to,"id=".$page."/".$page2."&amp;lang=".$this->lang);
	  		 		}
	  		 	}else{
	  		 		$this->save_Item(++$this->id,$to,"id=".$page."&amp;lang=".$this->lang,$page);	
	  		 	}
		 	}
		  return $this->getif_menu_exist($has_clientjs);
    }
    /**
    * @info write a variabele Items (path items)[key,value]
    * @param $dir to search dir
    * @param $tolocation the link to go
    * @param $array[inc]=array(".inc",".htm",".old")[exc]=array(".htaccess")
    */
    public function createMNUitemsfrom_filesystem($dir,$tovieuwport,$filter){
    	//print "<br><br>menu start<br>";
    	$FileScanner = new FileScanner();
    	$FileScanner->setfilter($filter);
    	$FileScanner->scandir($dir);
    	$this->additems($FileScanner->getdirs(),"");
    	$this->additems($FileScanner->getfils(),$tovieuwport);
    	$submenus = $FileScanner->getdirs();
        foreach($submenus as $key){
        	$FileScanner->scandir($dir."/".$key);
        	$this->addsubitems($key,$FileScanner->getfils(),$tovieuwport);
        }
    }
    private function sethomeatfirst(){
    }
    private function test(){
    	  print "<br><br>print start<pre>";
		  print_r($this->items);
		  print "</pre><br>print start<br>";
    }
    private function save_Item($id,$to,$attributen=null,$label){
    	$toloc=(isset($to))?",'".$to."'":"";
		$this->save_line($this->filename,"['".$id."-'".$toloc.",'".$attributen."','".$label."','-'],");
 	}
 	private function save_robotitem($to,$attributen){
    	$this->save_line("robots.txt", "Allow: /".$to.$attributen."\n");
 	}
    private function save_line($Fname, $data) {
        //print "printdata '".$data."'naar $Fname";
        if (!$file = fopen($Fname, 'a+')) {
            return false;
            exit ;
        }
        if (!fwrite($file, $data)) {
            return false;
            exit ;
        }
        return true;
    }
    function Menu_bakup() {
        if (is_file($this->filename) && (filesize($this->filename) > 0)) {
            rename($this->filename, $this->filename.".bak");
        }
    }
    function Menu_refrech() {
        if (unlink($file3)) {
            $this->menu_write();
        }
    }
}
?>
verder maken we dan een pagina die dat weergeef waar ik nie alle include hierboven ga zetten maar moet je maar uitchekken
PHP:
<?php
include("generalvars.php");//security no include_once
if(!session_start()){
	print "session error";
}
include_once($autosite['layout']."head.inc");
/**
 * @author Lieven Roegiers
 * @copyright 2007
 * @phpvieuwport
 * @CMS autosite
 */
$id = (isset ($_GET['id']))?addslashes($_GET['id']):'home';
$id = (isset ($_POST['id']))?addslashes($_POST['id']):$id;
$autosite['lang'] = (isset( $_GET['lang'] ) ) ? $_GET['lang'] : 'NL';
//<<<<<<<<<<<<<<<<<<<<<<<<<<<<MENU>>>>>>>>>>>>>>>>
		include_once("./preparts/Amenu.inc");
//<<<<<<<<<<<<<<<<<<<<<<<<<<<<TOOLBAR sidebar>>>>>>>>>>>>>>>>
		include_once($autosite['layout']."toolbar.inc");
		include_once($autosite['layout']."aditudes.inc");
//<<<<<<<<<<<<<<<<<<<<<<<<<<<<Container>>>>>>>>>>>>>>>>
		$selectincfile =$autosite['optiepath'].$autositelang[$autosite['lang']].$id.".inc";//prefunctiefile
		$selectdatfile =$autositelang[$autosite['lang']].$id.".dat";//datafile
		print'<div id="container" class="clearfix">';
		if (isset($id)) {
		    if (is_file($selectincfile) && is_file($selectdatfile)) {
		        //<<<<<<<<<<<<<<<<<<<<<<<page with a function>>>>>>>>>>>>>>>>>>>>>>>>>
		        include_once($selectdatfile);
		        include_once($selectincfile);
		    } elseif (is_file($selectdatfile)) {
		        //<<<<<<<<<<<<<<<<<<<<<<<page with not a function>>>>>>>>>>>>>>>>>>>>>>>>>
		        include_once($selectdatfile);
		    } else {
		    	//<<<<<<<<<<<<<<<<<<<<<<<ERROR PAGE NOT FOUND >>>>>>>>>>>>>>>>>>>>>>>>>
				 include_once($autosite['error']."pagenotfound.inc");
			}
		}else {//this is the no way to go ==always error
		    print("");
		}
		print'</div>';
//<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<Toolbar by login>>>>>>>>>>>>>>>>>>>
//<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<end >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
	include_once($autosite['layout']."foot.inc");
?>
<!-- @OVERRIDE STYLE -->
<link rel='stylesheet' href='<?php print $autosite['layout'] ?>css/style.css' type='text/css'>
<!-- @AUTHOR Lieven Roegiers @CMS autosite V2.5 automaticsite -->
<?php $autosite = null; ?>
 
Laatst bewerkt:
RoboticPro, vergeet alsjeblieft die code van kenikavanbis, want met alle respect: die code zit niet echt bijzonder goed in elkaar en is complete overkill voor wat je wilt, als het al is wat je zoekt.

Zoek op Google eens naar 'url rewrite php .htaccess' om te zien hoe je dit kunt oppakken. :)
 
@SvU Dank u wel ik heb het gelijk gezocht en heb nu na 2 dagen het 1e probleem opgelost dat mijn Css verdween.

Ik heb ondertussen de oplossing hier mijn code voor volgende gebruikers met de problemen :

Code:
#Starten
RewriteEngine On

#Bestaande mappen niet aanpassen!!
RewriteCond %{REQUEST_FILENAME} -d [OR]
RewriteCond %{REQUEST_FILENAME} -f
RewriteCond %{REQUEST_FILENAME} !-f 
RewriteRule .                   - [L]


#1e Variable indeling : /Language/
RewriteRule ^([A-Za-z0-9]+)$ /$1/ [R]
RewriteRule ^([A-Za-z0-9]+)/$ /index.php?lang=$1

#2e Variable indeling : /Language/Catagory/
RewriteRule ^([A-Za-z0-9]+)/([A-Za-z0-9]+)$ /$1/$2/ [R]
RewriteRule ^([A-Za-z0-9]+)/([A-Za-z0-9]+)/$ /index.php?lang=$1&cat=$2

#3e Variable indeling : /Language/Catagory/Page/
RewriteRule ^([A-Za-z0-9]+)/([A-Za-z0-9]+)/([A-Za-z0-9]+)$ /$1/$2/$3/ [R]
RewriteRule ^([A-Za-z0-9]+)/([A-Za-z0-9]+)/([A-Za-z0-9]+)/$ /index.php?lang=$1&cat=$2&page=$3


Allemaal bedankt en als je mijn site wilt volgen : Helpmij Topic!

Brian
 
Laatst bewerkt:
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan