IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Langage PHP Discussion :

Chemin en PHP (avec include et/ou template)


Sujet :

Langage PHP

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Nouveau membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Janvier 2018
    Messages
    5
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 30
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Janvier 2018
    Messages : 5
    Par défaut Chemin en PHP (avec include et/ou template)
    Bonjour,

    J'ai récemment décidé de refaire un de mes exercices de cours car tous les fichiers étaient à la racine donc j'ai modifié la structure. Mais j'ai 2 problèmes qui persitent :

    •Layout.phtml ne veut pas récupérer mes fichiers CSS alors qu'il s'agit du même chemin que sur l'exercice de base, même si la structure des dossiers a été modifiée cela reste le même chemin que l'exercice de base.

    •Mon second problème concerne le chemin de l'URL : quand je clique et que j'arrivre sur une autre page type page admin, utilisateur ou autre, puis que je clique sur le menu géré par le Layout, l'URL ajoute le chemin de base de la page, comme par exemple :
    localhost/blog/application/php/show_post.php?id=2 et ensuite cela passe à localhost/blog/application/blog/application/php/admin.php lorsque je clique sur le bouton admin . Le problème vient forcément de mon include et/ou mon template.

    Voilà le include et le template dans mon index.php :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    $template = 'application/views/index';
     include = 'application/views/layout.phtml';
    Voilà le include et le template dans mon admin.php :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    $template = '../views/admin/admin';
     include = '../views/layout.phtml';
    Merci d'avance pour vos réponses.

  2. #2
    Expert confirmé
    Avatar de mathieu
    Profil pro
    Inscrit en
    Juin 2003
    Messages
    10 667
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 10 667
    Par défaut
    montrez nous le code que vous utilisez même s'il ne fonctionne pas.

  3. #3
    Nouveau membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Janvier 2018
    Messages
    5
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 30
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Janvier 2018
    Messages : 5
    Par défaut
    Voilà une partie de mon code.

    layout.phtml :


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    <!DOCTYPE html>
    <html lang="fr">
    <head>
        <meta charset="utf-8">
        <title>Encore un Blog ?! #nonMaisAllo</title>
     
        <!-- Feuilles de style externes -->
        <link rel="stylesheet" href="css/normalize-3.0.3.min.css">
        <link rel="stylesheet" href="css/font-awesome.min.css">
        <link rel="stylesheet" href="http://fonts.googleapis.com/css?family=Open+Sans">
     
        <!-- Feuilles de style de l'application -->
        <link rel="stylesheet" href="css/blog-main.css">
        <link rel="stylesheet" href="css/blog-theme.css">
        <link rel="stylesheet" href="css/ui-button.css">
        <link rel="stylesheet" href="css/ui-form.css">
    </head>
    <body>
        <!-- En-tête commune de l'application -->
        <header class="blog-header">
            <h1><a href="../blog_modif/index.php"><i class="fa fa-microphone"></i> Encore un Blog ?! #nonMaisAllo</a></h1>
            <nav>
                <a href="../blog_modif/application/php/admin.php"><i class="fa fa-cogs"></i> Administration</a>
            </nav>
        </header>
     
        <main>
            <!-- Chargement du template PHTML spécifié par le programme PHP -->
            <?php include $template.'.phtml' ?>
        </main>
     
        <!-- Pied de page commun de l'application -->
        <footer class="blog-footer">
            <small>Le blog des élèves de la 3W Academy</small>
        </footer>
    </body>
    </html>

    index.php :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    <?php
     
        include 'application/config/database.php';
     
        // Récupération de tous les articles du blog classés par ordre antéchronologique.
        $query =
        '
            SELECT
                Post.Id,
                Title,
                Contents,
                CreationTimestamp,
                FirstName,
                LastName
            FROM
                Post
            INNER JOIN
                Author
            ON
                Post.Author_Id = Author.Id
            ORDER BY
                CreationTimestamp DESC
        ';
        $resultSet = $pdo->query($query);
        $posts = $resultSet->fetchAll();
     
        // Sélection et affichage du template PHTML.
        $template = 'application/views/index';
        include 'application/views/layout.phtml';
    index.phtml :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    <!-- Page d'accueil -->
    <h2><i class="fa fa-home"></i> Accueil</h2>
     
    <!-- Liste des articles du blog -->
    <ul class="post-list">
        <?php foreach($posts as $post): ?>
            <li class="post">
                <h3>
                    <i class="fa fa-hand-o-right"></i>&nbsp;
                    <!-- Lien vers article de blog détaillé avec les commentaires -->
                    <a href="../blog_modif/application/php/show_post.php?id=<?= intval($post['Id']) ?>" title="Consulter l'article">
                        <?= htmlspecialchars($post['Title']) ?>
                    </a>
                </h3>
                <!-- Seul un extrait de l'article du blog est affiché -->
                <article><?= substr(htmlspecialchars($post['Contents']), 0, 100) ?>&nbsp;[...]</article>
                <small>
                    Rédigé par <?= htmlspecialchars($post['FirstName']) ?> <?= htmlspecialchars($post['LastName']) ?>
                    le <?= htmlspecialchars($post['CreationTimestamp']) ?>
                </small>
            </li>
        <?php endforeach; ?>
    </ul>
    admin.php :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    <?php
     
        include '../config/database.php';
     
     
        // Récupération de tous les articles du blog classés par ordre antéchronologique.
        $query =
        '
            SELECT
                Post.Id,
                Title,
                Contents,
                CreationTimestamp,
                FirstName,
                LastName,
                Category.Name AS Category_Name
            FROM
                Post
            INNER JOIN
                Author
            ON
                Post.Author_Id = Author.Id
            INNER JOIN
                Category
            ON
                Post.Category_Id = Category.Id
            ORDER BY
                CreationTimestamp DESC
        ';
        $resultSet = $pdo->query($query);
        $posts = $resultSet->fetchAll();
     
        // Sélection et affichage du template PHTML.
        $template = '../views/admin/admin';
        include '../views/layout.phtml';
    admin.phtml :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    <h2><i class="fa fa-cogs"></i> Panneau d'administration</h2>
     
    <nav>
        <a href="../php/add_post.php">Rédiger un nouvel article</a>
    </nav>
     
    <table>
        <caption>Liste des articles</caption>
        <thead>
            <tr>
                <th>Titre</th>
                <th>Article</th>
                <th>Auteur</th>
                <th>Catégorie</th>
                <th></th>
            </tr>
        </thead>
        <tbody>
            <?php foreach($posts as $post): ?>
                <tr>
                    <td><a href="../php/show_post.php?id=<?= intval($post['Id']) ?>" target="_blank"><?= htmlspecialchars($post['Title']) ?></a></td>
                    <td><?= substr(htmlspecialchars($post['Contents']), 0, 200) ?></td>
                    <td><?= htmlspecialchars($post['FirstName']) ?> <?= htmlspecialchars($post['LastName']) ?></td>
                    <td><?= htmlspecialchars($post['Category_Name']) ?></td>
                    <td>
                        <a class="edit" href="../php/edit_post.php?id=<?= intval($post['Id']) ?>"><i class="fa fa-pencil"></i></a>
                        <a class="remove" href="../php/delete_post.php?id=<?= intval($post['Id']) ?>"><i class="fa fa-remove"></i></a>
                    </td>
                </tr>
            <?php endforeach ?>
        </tbody>
    </table>

  4. #4
    Nouveau membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Janvier 2018
    Messages
    5
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 30
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Janvier 2018
    Messages : 5
    Par défaut
    Voici l'architecture de mon site :
    Images attachées Images attachées  

  5. #5
    Expert confirmé
    Avatar de mathieu
    Profil pro
    Inscrit en
    Juin 2003
    Messages
    10 667
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 10 667
    Par défaut
    dans le contenu HTML qui est généré et envoyé au navigateur, les URL sont relatives à l'URL de la page en cours.
    si par exemple la page d'index est à l'adresse http://localhost/blog_modif/ et que la feuille de style est définie par "href=css/blog-theme.css" alors ce fichier sera cherché à l'adresse http://localhost/blog_modif/css/blog-theme.css

    et pareil pour le 2e point avec les liens vers les autres pages. si vous êtes sur la page http://localhost/blog_modif/applicat..._post.php?id=2, le lien relatif pour aller sur la page d'administration est juste "admin.php" puisqu'il est dans le même répertoire que "show_post.php".

    une autre solution serait de fixer la base des adresses avec cette balise : <base>

    et une autre possibilité serait d'enregistrer la racine "localhost/blog_modif/" dans une constante et l'utiliser pour construire tous les URL.

  6. #6
    Nouveau membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Janvier 2018
    Messages
    5
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 30
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Janvier 2018
    Messages : 5
    Par défaut
    Pour le 1er problème, ma page layout.phtml qui est dans le dossier "views" gère le css en récupérant les informations dans les dossiers "css" et "images" qui sont à sa racine mais cela ne marche pas alors que le schéma est le même que dans l'exercice de base. La page layout gère également le contenu php et j'ai déjà eu un autre exercice différent de celui que je tente de modifier, où la structure n'était pas à la racine mais plus comme ce que j'essaye de faire et layout.phtml récupérait bien les informations du css donc je ne comprends pourquoi le problème serait relatif à l'URL de la page en cours sinon cela veut dire que mes 2 problèmes ne font qu'un.
    Je viens de modifier mes liens css en "href=../views/css/exemple" maintenant cela marche sur tout sauf évidemment sur la page index.php. J'ai également testé en déplaçant le fichier "css" (mais je veux que celui-ci reste à sa place) dans "application" et mis href="../css/exemple" pareil tout marche sauf index.php bien sûr.

    Pour le 2e problème, quand j'arrive à la page admin je peux accéder aux autres liens sauf le lien du header (admin et index) qui vient se rajouter. Ce qui fait que l'on passe de "localhost/blog_modif/application/php/admin.php" à "localhost/blog_modif/application/blog_modif/application/php/admin.php".
    J'ai modifié comme vous me l'avez dit en href="admin.php" mais cela ne marche pas. Alors j'obtiens "localhost/blog_modif/application/blog_modif/admin.php" mais si je fais href="../php/admin.php" alors cela marche sur les autres pages mais pas sur ma page index.php.

    J'ai testé avec la balise <base> mais cela ne change pas mon problème et concernant la deuxième solution, je comprends ce que vous voulez dire mais je ne vois pas comment le faire. Auriez-vous un exemple ?

    Je vous remercie pour les conseils.

Discussions similaires

  1. [PHP 5.4] Problème pour inclure un script php avec include
    Par georgeschris dans le forum Langage
    Réponses: 25
    Dernier message: 03/11/2012, 17h32
  2. [PHP-JS] Problème avec include
    Par trotters213 dans le forum Langage
    Réponses: 18
    Dernier message: 27/09/2006, 19h37
  3. Réponses: 22
    Dernier message: 27/06/2006, 16h42
  4. Prb d'installation d'un scipr PHP avec include
    Par ddubois dans le forum EDI, CMS, Outils, Scripts et API
    Réponses: 3
    Dernier message: 17/03/2006, 19h58

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo