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 :

Conception d'un page-builder, comment faire ?


Sujet :

Langage PHP

  1. #1
    Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Décembre 2012
    Messages
    15
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Dordogne (Aquitaine)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Décembre 2012
    Messages : 15
    Points : 4
    Points
    4
    Par défaut Conception d'un page-builder, comment faire ?
    Bonjour,

    Je suis en train de réaliser un site web entièrement OO (du moins le plus possible). Un des modules que je veux absolument implémenter afin que mon site soit le plus évolutif possible est ce que j'appelle un constructeur de pages. Pour cela j'ai créé une classe Page. En gros le principe est le suivant :

    - Sur une page donnée, je charge ma classe Page et les fonctions pour l'hydrater correctement.
    - Je crée un nouvel objet Page.
    - J'appelle la méthode build, qui pioche dans le contenu de chacun de mes attributs afin de construire la page par morceaux.
    Voici l'organisation de mon code :

    La classe Page

    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
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    <?php
     
    require_once('/php/functions/arrayForClasses.php');
     
    class Page
    {
    	private $url;
    	private $header;
    	private $title;
    	private $post_title;
    	private $headband;
    	private $logo;
    	private $menu;
    	private $before_body;
    	private $body;
    	private $post_body;
    	private $footer;
     
    	public function __construct(array $datas)
    	{
    		$this->hydrate($datas);
    	}
     
    	public function hydrate(array $datas)
    	{
    		// On récupère le nom de chaque setter correspondant à l'attribut.
     
    		foreach($datas as $key => $value)
    		{
    			$method = 'set'.ucfirst($key);
     
    			/* Si la méthode existe, on l'appelle. On donne ainsi comme valeur au setter correspondant
    			la valeur de la clé. */
     
    			if(method_exists($this, $method))
    			{
    				$this->$method($value);
    			}
    		}	
    	}
     
    	/* Méthodes */
     
    	public function build(array $pageSnippets)
    	{
    		$pageContents = '';
    		foreach($pageSnippets as $key => $value)
    		{
    			if($key != 'url')
    				$pageContents .= $pageSnippets[$key];
    		}
     
    		file_put_contents(''.$this->url, $pageContents);
    	}
     
            // Getters et setters
     
    ?>
    Les fonctions pour récupérer le contenu de chaque fichier qui va s'insérer dans les attributs de ma classe Page

    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
    <?php
     
    function createPageSnippetsWithoutUrl()
    {
    	$pageSnippets = array('require_classes' => NULL, 'header' => NULL, 'title' => NULL, 'post_title' => NULL, 'headband' => NULL, 'logo' => NULL, 'menu' => NULL, 'before_body' => NULL, 'body' => NULL, 'post_body' => NULL, 'footer' => NULL);
    	foreach($pageSnippets as $key => $value)
    	{
    		$pageSnippets[$key] = file_get_contents('./php/page_snippets/'.$key.'.php');
    	}
     
    	return $pageSnippets;
    }
     
    function createPageSnippets()
    {
    	$pageSnippets = createPageSnippetsWithoutUrl();
     
    	$pageSnippets['url'] = $_SERVER['PHP_SELF'];
    	return $pageSnippets;
    }
     
    ?>
    Et enfin un exemple de page qui va être généré :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    <?php
     
    require_once('/php/functions/loadClass.php');
    require_once('/php/functions/arrayForClasses.php');
    spl_autoload_register('loadClass');
     
    $pageSnippets = createPageSnippets();
    $page = new Page($pageSnippets);
    $page->build($pageSnippets);
     
    ?>
    Cependant j'ai 2 warnings :

    Warning: file_get_contents(./php/page_snippets/require_classes.php) [function.file-get-contents]: failed to open stream: No such file or directory in C:\wamp\www\mjs_aquitaine\php\functions\arrayForClasses.php on line 8

    Warning: file_put_contents(/mjs_aquitaine/index.php) [function.file-put-contents]: failed to open stream: No such file or directory in C:\wamp\www\mjs_aquitaine\php\class\Page.class.php on line 53

    Du coup je me posais plusieurs questions. Dans la façon de penser OO est-ce que c'est un bon découpage ? Après la création de ma page via l'instance de Page, se générera-t-elle sans erreurs ? Je suis un peu dans le flou, comme je débute en POO.

  2. #2
    Membre émérite
    Avatar de gene69
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    1 769
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Janvier 2006
    Messages : 1 769
    Points : 2 446
    Points
    2 446
    Par défaut
    c'est surtout un pb de chemin relatif/absolu. Objectif ambitieux mais encore des ptits défaut de débutant.

    c'est ton autolad qui ne fonctionne pas. en php 5.3 c'est le require utilise le fichier courant (celui dans lequel il est écrit) comme répertoire de base pour compléter le chemin du fichier... sauf si je me trompe.
    PHP fait nativement la validation d'adresse électronique .
    Celui qui a inventé mysql_connect(...) or die() est déjà mort plusieurs fois.

    Utilisez le bouton résolu!

  3. #3
    Membre émérite
    Avatar de gene69
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    1 769
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Janvier 2006
    Messages : 1 769
    Points : 2 446
    Points
    2 446
    Par défaut
    au temps pour moi.

    ton fichier que tu essaies d'écrire est sur un chemin absolu... dans un style unix alors que tu es sous windows ... vérifie en plus si ton php à les droits d'écritures.

    Edit: __DIR__ peut t'aider.
    PHP fait nativement la validation d'adresse électronique .
    Celui qui a inventé mysql_connect(...) or die() est déjà mort plusieurs fois.

    Utilisez le bouton résolu!

  4. #4
    Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Décembre 2012
    Messages
    15
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Dordogne (Aquitaine)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Décembre 2012
    Messages : 15
    Points : 4
    Points
    4
    Par défaut
    Je suis encore bloqué avec mon get_file_contents... autant pour trouver avec le __DIR__ c'était facile, là pour reconstituer le chemin complet, je ne vois pas trop comment procéder.

    J'ai essayé de faire comme ça :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    function createPageSnippetsWithoutUrl()
    {
    	$pageSnippets = array('require_classes' => NULL, 'header' => NULL, 'title' => NULL, 'post_title' => NULL, 'headband' => NULL, 'logo' => NULL, 'menu' => NULL, 'before_body' => NULL, 'body' => NULL, 'post_body' => NULL, 'footer' => NULL);
    	foreach($pageSnippets as $key => $value)
    	{
    		$pageSnippets[$key] = file_get_contents('\\..\\..\\php\\page_snippets\\'.$key.'.php');
    	}
     
    	return $pageSnippets;
    }

  5. #5
    Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Décembre 2012
    Messages
    15
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Dordogne (Aquitaine)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Décembre 2012
    Messages : 15
    Points : 4
    Points
    4
    Par défaut
    J'ai comme droits 33206, qu'est-ce que cela signifie ?

  6. #6
    Modératrice
    Avatar de Celira
    Femme Profil pro
    Développeuse PHP/Java
    Inscrit en
    Avril 2007
    Messages
    8 633
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 39
    Localisation : France

    Informations professionnelles :
    Activité : Développeuse PHP/Java
    Secteur : Industrie

    Informations forums :
    Inscription : Avril 2007
    Messages : 8 633
    Points : 16 372
    Points
    16 372
    Par défaut
    j'aimerai savoir comment tu as trouvé ça. A ma connaissance, le max c'est 777
    Modératrice PHP
    Aucun navigateur ne propose d'extension boule-de-cristal : postez votre code et vos messages d'erreurs. (Rappel : "ça ne marche pas" n'est pas un message d'erreur)
    Cherchez un peu avant poser votre question : Cours et Tutoriels PHP - FAQ PHP - PDO une soupe et au lit !.

    Affichez votre code en couleurs : [CODE=php][/CODE] (bouton # de l'éditeur) et [C=php][/C]

Discussions similaires

  1. [Débutant] Application Vb interagit avec une page HTML Comment Faire ?
    Par x2FuUk dans le forum VB.NET
    Réponses: 5
    Dernier message: 02/09/2014, 21h57
  2. page dynamique comment faire
    Par db48752b dans le forum ASP
    Réponses: 9
    Dernier message: 06/01/2009, 18h04
  3. builder, comment faire?
    Par piotrr dans le forum VB 6 et antérieur
    Réponses: 4
    Dernier message: 03/08/2007, 16h14
  4. [Conception] Images: Téléchargement, affichage, suppression - Comment Faire ?
    Par mathieu7497 dans le forum PHP & Base de données
    Réponses: 3
    Dernier message: 10/12/2006, 11h27
  5. [Preferences] Comment faire un page d'option
    Par Yan83 dans le forum Eclipse Platform
    Réponses: 2
    Dernier message: 22/04/2004, 13h47

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