ntellos Δημοσ. 28 Σεπτεμβρίου 2012 Δημοσ. 28 Σεπτεμβρίου 2012 Έστω ότι υπάρχουν τα εξείς αρχεία: > server_root_dir/index.php server_root_dir/menu/menu.php server_root_dir/menu/menu.css server_root_dir/menu/menu.js Με τα εξής περιεχόμενα: menu.php > <link rel="stylesheet" type="text/css" href="menu.css"> <script src="menu.js"></script> <div id="menu"> <ul> <li><a class="active" href="">Home</a></li> <li><a href="">News</a></li> <li><a href="">Contact</a></li> <li><a href="">About</a></li> </ul> </div> index.php > <?php include "menu/menu.php" ?> Το πρόβλημα προφανώς είναι όταν γίνεται το include στο index.php τα relative directories του menu.php (πχ. <link rel="stylesheet" type="text/css" href="menu.css">) δεν λειτουργούν καθώς ψάχνουν στο ίδιο folder με το index.php και όχι με το included file. Ποιά είναι η "σωστή τακτική για να γράφω σωστό κώδικα; Absolute paths or dunno; Αν δώσω absolute paths και μετά θέλω να επαναχρησιμοποιήσω τον κώδικα για κάποιο άλλον λόγο θα πρέπει να αλλάζω πάλι τα absolute paths; live example: 1) menu.php 2) index.php(ncluded menu.php)
mixalis8 Δημοσ. 28 Σεπτεμβρίου 2012 Δημοσ. 28 Σεπτεμβρίου 2012 base_url().'index.php base_url().'mitsos/index.php
kalogeros Δημοσ. 28 Σεπτεμβρίου 2012 Δημοσ. 28 Σεπτεμβρίου 2012 γιατί δεν βάζεις τα > <link rel="stylesheet" type="text/css" href="menu/menu.css"> <script src="menu/menu.js"></script> στο index.php;
defacer Δημοσ. 28 Σεπτεμβρίου 2012 Δημοσ. 28 Σεπτεμβρίου 2012 Εγώ θα έκανα μια παραλλαγή αυτού που λέει ο καλόγερος: φτιάχνεις την εφαρμογή με single point of entry το index.php, οπότε όλα τα paths μπορούν να μπουν relative του application root. Μόνο που θα ήταν πολύ καλύτερα να ορίσεις constants ούτως ώστε αν στο μέλλον (ή σε άλλο αντίγραφο) θέλεις να αλλάξεις κάτι να μην τραβάς τα μαλλιά σου. Κάτι σαν αυτό: >define('ASSETS_DIR_CSS', 'menu/'); define('ASSETS_DIR_JS', 'menu/'); <link rel="stylesheet" type="text/css" href="<?php echo ASSETS_DIR_CSS;?>menu.css"> <script src="<?php echo ASSETS_DIR_JS;?>menu.js"></script> Απο κει και πέρα ίσως να σε βολέψουν κατα περίπτωση και οι παρακάτω functions: >function absolute_url() { list($protocol) = explode("/", $_SERVER["SERVER_PROTOCOL"], 2); list($path) = explode("?", $_SERVER["REQUEST_URI"], 2); $s = empty($_SERVER["HTTPS"]) ? '' : ($_SERVER["HTTPS"] == "on") ? "s" : ""; $protocol = strtolower($protocol).$s; $port = ($_SERVER["SERVER_PORT"] == "80") ? "" : (":".$_SERVER["SERVER_PORT"]); return $protocol."://".$_SERVER['SERVER_NAME'].$port.$path; } function application_root() { $url = dirname(absolute_url()); $nestinglevel = substr_count(dirname($_SERVER['SCRIPT_FILENAME']), '/', strlen($_SERVER['DOCUMENT_ROOT'])); for ($i = 0; $i < $nestinglevel; ++$i) { $url = dirname($url); } return $url; } function relative_path_to_web_root() { $nestinglevel = substr_count(dirname($_SERVER['SCRIPT_FILENAME']), '/', strlen($_SERVER['DOCUMENT_ROOT'])); if ($nestinglevel == 0) { return './'; } else { return str_repeat('../', $nestinglevel); } }
ntellos Δημοσ. 28 Σεπτεμβρίου 2012 Μέλος Δημοσ. 28 Σεπτεμβρίου 2012 γιατί δεν βάζεις τα > <link rel="stylesheet" type="text/css" href="menu/menu.css"> <script src="menu/menu.js"></script> στο index.php; Προφανώς και τα δύο θα πάνε στο head section του index.php, απλά το θέμα έγινε για λόγους κατανόησης. Θα μπορούσε να ήταν ένα img tag που δεν θα μπορούσε να αλλάξει θέση. Ty guys. Σκεφτόμουν ένα config.php που γίνεται include στο index, αντί για constants να περιέχει έναν πίνακα της μορφής: > $dirs = array( "css" => "/css/", "js" => "/js/", );
defacer Δημοσ. 28 Σεπτεμβρίου 2012 Δημοσ. 28 Σεπτεμβρίου 2012 Και αυτό δεν είναι κακό, αλλά IMO δε βολεύει και πολύ στην πράξη γιατί α) έτσι κι αλλιώς θα έχει 2-3-4 στοιχεία, που είναι λίγα οπότε παίζουν και σε constant και β) δεν έχει βολική σύνταξη στο call site (θέλει να πληκτρολογείς matching αγκύλες και εισαγωγικά).
ntellos Δημοσ. 28 Σεπτεμβρίου 2012 Μέλος Δημοσ. 28 Σεπτεμβρίου 2012 Ωραία νομίζω ότι κατάλαβα. Ευχαριστώ! Για λόγους καθαρά να κάνω κάτι σωστά μήπως έχει κάποιος να προτείνει κάποιο guide/how to/book ώστε να πάω ένα βήμα παραπέρα τις γνώσεις μου; Περισσότερο θέματα οργάνωσης του κώδικα, πως να γράφεις σωστό κώδικα για να μην καταλήξει ο κώδικας μου όταν μεγαλώσει να είναι spaghetti code;
Προτεινόμενες αναρτήσεις
Δημιουργήστε ένα λογαριασμό ή συνδεθείτε για να σχολιάσετε
Πρέπει να είστε μέλος για να αφήσετε σχόλιο
Δημιουργία λογαριασμού
Εγγραφείτε με νέο λογαριασμό στην κοινότητα μας. Είναι πανεύκολο!
Δημιουργία νέου λογαριασμούΣύνδεση
Έχετε ήδη λογαριασμό; Συνδεθείτε εδώ.
Συνδεθείτε τώρα