de juiste content ophalen.

Overzicht Reageren

Sponsored by: Vacatures door Monsterboard

Reshad F

Reshad F

11/05/2012 23:30:09
Quote Anchor link
ik ben bezig de routing van een nieuw klein website op te zetten. dit doe ik dmv ini file.
deze ziet er zo uit:
[navigation]
home.php = "Home"
about.php = "About"
simple-code.php = "Simple codes"

[content]
home.php = "/content/home"
about.php = "/content/about"
simple-code.php = "/content/simple-code"

zo haal ik de links op en output ik ze..
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
<?php
        if (file_exists("index.ini") && is_array($content = parse_ini_file("index.ini", true)))
        {

            if (array_key_exists("navigation", $content))
            {

                foreach ($content["navigation"] as $basename => $title)
                {

                    if (array_key_exists($basename, $content["content"]))
                    {

                        echo "<li><a " . ($basename == basename(parse_url($_SERVER["REQUEST_URI"], PHP_URL_PATH)) ? "class=\"current\"" : false) . " href=\"/" . $basename . "\">" . $title . "</a></li>";
                    }
                }
            }
        }

        ?>


en dit gaat goed maar alleen wanneer ik dan de juiste content op wil halen door op de link te klikken krijg ik niet het relatieve pad maar krijg ik

localhost/home.php
ipv localhost/content/home/home.php

mijn switch om te bepalen wat ik op moet halen ziet er zo uit.

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
<?php
if (!isset($_GET['page'])) {
  $_GET['page'] = 'home';    
}

switch($_GET['page']){
  case
'home':
    $file = '/content/home/home.html';
    break;
   case
'about':
    $file = '/content/about/about.html';
    break;
  case
'simple-script':
    $file = '/content/simple-code/simple-script.html';
    break;
  case
'sitemap':
    $file = '/content/sitemap/sitemap.php';
    break;
  default:

    $file = '404.html';
    break;
}

include_once $file;
?>


maar ik ben de draad even kwijt. weet iemand wat ik fout doe en wat ik anders moet doen?
Gewijzigd op 11/05/2012 23:31:14 door Reshad F
 
PHP hulp

PHP hulp

28/03/2024 20:50:36
 
Wouter J

Wouter J

12/05/2012 00:01:54
Quote Anchor link
Volgens mij mogen punten in INI values niet, omdat ze dan voor array worden aangezien.

Maak er zo'n route file van:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
11
[home]
  url = home.php
  content = /content/home/home.html

[about]
  url = about.php
  content = /content/about/about.html

[simple_code]
  url = simple-code.php
  content = /content/simple-code/simple-script.html

Vervolgens maak je en het menu en de switch dynamisch (wat zo heeft een dynamische ini natuurlijk helemaal geen nut).
 
Reshad F

Reshad F

12/05/2012 00:16:27
Quote Anchor link
hmm het worden inderdaad array's maar dat zou niet uit moeten maken toch?

en ik weet niet hoe ik zo een twee die 2 dingen dynamisch kan maken.. enig tip of opstapje?
 
Wouter J

Wouter J

12/05/2012 10:00:04
Quote Anchor link
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
Navigatie
=========
<?php
$routes
= parse_ini_file('routing.ini', true);

foreach ($routes as $name => $data) : ?>

    <li><a href="<?php echo $data['url'] ?>"><?php echo $name ?></a></li>
<?php endforeach; ?>

Content
=======
<?php
if (isset($routes[$_GET['page']])) {
    $page = $routes[$_GET['page'];

    include $page['content'];
}

?>
Gewijzigd op 12/05/2012 10:13:22 door Wouter J
 
Bart V B

Bart V B

12/05/2012 10:18:50
Quote Anchor link
nog even een kleine tip, zet het .ini bestand buiten de doc_root. ;)
Hij is nu zo te lezen, en daarmee kun je hele nare dingen doen...
Gewijzigd op 12/05/2012 10:20:38 door Bart V B
 
Wouter J

Wouter J

12/05/2012 10:26:25
Quote Anchor link
Bart, je kan hem toch alleen maar lezen? Dus opzich kan je er niks raars mee doen. Wel is het zo dat je er nu geen gevoelige informatie in kunt zetten.

Even nog een tip voor reshadd. Bij dit soort gevallen moet je gewoon even de array die je terug krijgt van de parse_ini_file var_dumpen. Dan zie je wat er allemaal in zit en op welke manier. Je komt er dan als het goed is wel uit hoe je een pagina/link zou moeten opvragen.
 
Bart V B

Bart V B

12/05/2012 10:31:45
Quote Anchor link
Quote:
Bart, je kan hem toch alleen maar lezen? Dus opzich kan je er niks raars mee doen.


Op zich niet nee, maar wel als hij niet de juiste chmod waardes heeft.
En afgezien wat er allemaal wel of niet mee kan gebeuren, je ini files behoren gewoon niet in in de document_root te staan he. ;)
 
Reshad F

Reshad F

13/05/2012 12:18:48
Quote Anchor link
wouter bedankt voor het opzetje! ik heb het een en ander geprobeerd. maar het was toch niet wat ik zocht. wat ik precies wil is gewoon mijn routing in de ini file en simpel die pagina includen. ik dacht eerst misschien dan de content uit het mapje content halen maar dit werkt niet zoals ik verwachtte. dus ik denk dat gewoon een dynamische include van een array menu wel volstaat.

dus een ini file zoals ik al had.

en dan wanneer ik klik op de link dat ik dan de path krijg geinclude. maar het probleem is dat mijn link er nu zo uitziet en ik dus op de verkeerde pagina kom.

/home, /about, /scripts

wat het eigenlijk moet zijn is /websitenaam(localhost)/home.html alleen zie ik niet wat er fout aan is dit is de output

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
<?php
foreach ($content["navigation"] as $basename => $title)
                {
  
                        echo "<li><a " . ($basename == basename(parse_url($_SERVER["REQUEST_URI"], PHP_URL_PATH)) ? "class=\"current\"" : false) . " href=\"/" . $basename . "\">" . $title . "</a></li>";
                }


?>


overigens moet dit geinlcude worden dus een switch er achter zetten. denk ik nu verkeerd of doe ik gewoon iets fout?

edit: ik heb even gekeken wat voor array ik krijg met print_r en heb op basis hiervan dus een switch in elkaar gezet. weet alleen niet of dit de juiste manier is. ik denk het ook niet omdat ik localhost/about.html krijg ipv dat deze geinclude wordt.
Gewijzigd op 13/05/2012 12:27:35 door Reshad F
 



Overzicht Reageren

 
 

Om de gebruiksvriendelijkheid van onze website en diensten te optimaliseren maken wij gebruik van cookies. Deze cookies gebruiken wij voor functionaliteiten, analytische gegevens en marketing doeleinden. U vindt meer informatie in onze privacy statement.