Προς το περιεχόμενο

Προτεινόμενες αναρτήσεις

Δημοσ.

Έστω ότι υπάρχουν τα εξείς αρχεία:

>
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)

Δημοσ.

Εγώ θα έκανα μια παραλλαγή αυτού που λέει ο καλόγερος: φτιάχνεις την εφαρμογή με 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);
}
}

Δημοσ.

γιατί δεν βάζεις τα

>
<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/",
);

Δημοσ.

Και αυτό δεν είναι κακό, αλλά IMO δε βολεύει και πολύ στην πράξη γιατί α) έτσι κι αλλιώς θα έχει 2-3-4 στοιχεία, που είναι λίγα οπότε παίζουν και σε constant και β) δεν έχει βολική σύνταξη στο call site (θέλει να πληκτρολογείς matching αγκύλες και εισαγωγικά).

Δημοσ.

Ωραία νομίζω ότι κατάλαβα. Ευχαριστώ! Για λόγους καθαρά να κάνω κάτι σωστά μήπως έχει κάποιος να προτείνει κάποιο guide/how to/book ώστε να πάω ένα βήμα παραπέρα τις γνώσεις μου; Περισσότερο θέματα οργάνωσης του κώδικα, πως να γράφεις σωστό κώδικα για να μην καταλήξει ο κώδικας μου όταν μεγαλώσει να είναι spaghetti code;

Δημιουργήστε ένα λογαριασμό ή συνδεθείτε για να σχολιάσετε

Πρέπει να είστε μέλος για να αφήσετε σχόλιο

Δημιουργία λογαριασμού

Εγγραφείτε με νέο λογαριασμό στην κοινότητα μας. Είναι πανεύκολο!

Δημιουργία νέου λογαριασμού

Σύνδεση

Έχετε ήδη λογαριασμό; Συνδεθείτε εδώ.

Συνδεθείτε τώρα
  • Δημιουργία νέου...