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

Ερώτηση για Templating + Οργάνωση Πληροφοριών σε site


top-gear

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

Δημοσ.

Καλησπέρα σε όλους!

 

Προσπαθώντας να κατανοήσω κάποιες σημαντικές πληροφορίες για τη σωστή δομή μιας ιστοσελίδας, μου γεννήθηκαν κάποιες απορίες. O δρόμος που ακολουθώ ως τώρα είναι ο εξής:

 

 

1η προσέγγιση

δημιουργία css, σπάσιμο των συστατικών της σελίδας σε αρχεία (header, footer, etc), και κλήση της επιθυμητής υποσελίδας μέσω php get query. Μέσα στον κώδικα του php υπήρχαν τα ανάλογα includes των standard αρχείων που έφτιαξα παραπάνω, συν ένα switch που έκανε include την κατάλληλη υποσελίδα ανάλογα με τις παραμέτρους του get.

 

2η προσέγγιση

δημιουργία 1 html και 1 css, και φόρτωση μέσω jQuery/Ajax της επιθυμητής υποσελίδας σε κάποιο επιθυμητό div, για να αποφύγω και τα refresh της σελίδας.

 

 

Με την 1η προσέγγιση έχω το πρόβλημα ότι κάποιες παράμετροι όπως title που γίνονται γνωστοί ουσιαστικά όταν γίνεται include η συγκεκριμένη υποσελίδα, δεν γίνεται να επηρεάσουν το dom σε προηγούμενα σημεία. Επίσης βλέπω πως στον κώδικα παίζουν πολλά εμφωλευμένα switch/if κλπ χωρίς να είναι δυνατόν να μειωθούν βάση της αρχιτεκτονικής που έχω επιλέξει. Με τη 2η προσέγγιση έχω το πρόβλημα ότι κάποιος χρήστης δε μπορεί να κάνει link/like/κλπ μια συγκεκριμένη υποσελίδα του site, παρά μόνο την κεντρική. Επίσης, και με τις δύο προσεγγίσεις υπάρχει το πρόβλημα των μηχανών αναζήτησης. Όταν καταχωρώ το domain δεν καταγράφουν και τα περιεχόμενα των υποσελίδων, είτε γιατί φορτώνονται μέσω javascript, είτε γιατί φορτώνονται μέσω php get query.

 

Θα εκτιμούσα ιδιαίτερα συμβουλές σε σχέση με την ορθή δόμηση του σκελετού της σελίδας ώστε το template να είναι παραμετροποιήσιμο χωρίς να χρειάζεται να υπάρχει ο κώδικάς του σε κάθε υποσελίδα, όπως επίσης και τον τρόπο που γίνονται link οι υποσελίδες ώστε να καταχωρούνται σωστά από τις μηχανές αναζήτησης. Ψάχνω λιγάκι και το mod_rewrite όπως και το sitemap, αλλά προς το παρόν δεν έχω καταφέρει να τα χρησιμοποιήσω σωστά.

 

Ευχαριστώ πολύ εκ των προτέρων!

Δημοσ.

Εκτός εάν σου χρειάζεται αυτή η πληροφορία για εκπαιδευτικούς λόγους καλύτερα να χρησιμοποιήσεις

κάποιο cms. Τώρα για την σωστή δομή μιας εφαρμογής ιστοτόπου και όχι μιας "ιστοσελίδας" που χρησιμοποιεί php

θα πρέπει να ψάξεις για php directory structure conventions http://www.devshed.com/c/a/PHP/PHP-Application-Development-Part-One/1/

Δημοσ.

Ευχαριστώ πολύ, πολύ χρήσιμο link. Για εκπαιδευτικούς σκοπούς το ψάχνω, συν ότι τα cms μου φαίνονται αρκετά πολύπλοκα για τόσο μικρή λειτουργικότητα για την οποία τα εφαρμόζω και δεν θέλω να μπλέκω με security updates όλη την ώρα.

Δημοσ.

Πολύ ωραίο θέμα, κι εγώ θα 'θελα να μάθω πως οργανώνουν τα projects τους τα υπόλοιπα παιδιά εδώ.

 

Σε αυτό που φτιάχνω τώρα, έχω αποθηκεύσει τα paths και τους τίτλους όλων των σελίδων σε πίνακα στη ΒΔ (έχοντας διαβάσει και αυτό το θέμα) και κάνω Include το σωστό αρχείο ανάλογα με το pageid (και παίζω και λίγο με htaccess, ώστε να φαίνεται κάπως σαν mysite.gr/pages/product/page_title):

><?
require_once "cons.php";
require_once "functions.php";

$start = "OK";

session_start();

header('Content-type: text/html; charset=iso-8859-7');
header("Cache-Control: no-cache, must-revalidate"); // HTTP/1.1
header("Expires: Mon, 26 Jul 1997 05:00:00 GMT"); // Date in the past
//If in debug mode, show all php error messages and warnings
if ($debug_mode)
{
ini_set('display_errors', 1);
error_reporting(E_ALL);
}
else
error_reporting(0);

//Use ssl if in options
if ($use_https)
{
if ($_SERVER['SERVER_PORT'] != '443')
{
   	header('Location: https://' . $_SERVER['HTTP_HOST'] . $_SERVER['REQUEST_URI']);
   	exit();
}
}

//Connect to mysql database
$db = new Database();
$db->ConnectToDb($dbhost, $dbuser, $dbpass, $dbname);

//Check if user is connected
$isuser=CheckIsUSer();

//Load page from id
$page_id = (ISSET($_GET['pageid'])) ? ClearString($_GET['pageid'], 0) : 0;
$sql = "SELECT path, title, pass_protected FROM $pagestable WHERE id = $page_id";
$res = mysql_fetch_row(mysql_query($sql));
if ($res)
{
$page['exists'] = 1;
$page['path'] = $res[0];
$page['title'] = $res[1];
$page['prot'] = $res[2];
}
else
$page['exists'] = 0;
?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
   	<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-7" />
   	<title><?php echo $page['title']; ?></title>
   	<link rel="stylesheet" type="text/css" href="<?php echo $document_root; ?>/styles/style.css" />
   	<script type="text/javascript" src="<?php echo $document_root; ?>/scripts.js"></script>

</head>

<body>
   	<div id="header"><!-- Header contents here --></div>
   	<div id="left_col"><!-- Left col contents here --></div>
   	<div id="main_col"><!-- Main page here -->
       	<?php
       	if ($isuser)
       	{
           	if ($page['exists'])
           	{
               	if (file_exists($page['path'] . ".php"))
                   	PageShow($page['path'] . ".php");
               	else
                   	PageNotExist();
           	}
           	else
               	PageNotExist();
       	}
       	else
       	{
           	if ($page['exists'])
           	{
               	if ($page['prot'])
                   	PageNeedLogin();
               	else
               	{
                   	if (file_exists($page['path'] . ".php"))
                       	PageShow($page['path'] . ".php");
                   	else
                       	PageNotExist();
               	}
           	}
           	else
               	PageNotExist();
       	}
       	?>
   	</div>
</body>
</html>

Δημοσ.

Πολύ ενδιαφέρουσα προσέγγιση. Και το mod_rewrite από htaccess πρέπει να βελτιώνει αισθητά την εμπειρία του χρήστη και των μηχανών αναζήτησης. Σε μερικά project που έχω αναλάβει κατά καιρούς δεν είχαν καθόλου βάση δεδομένων από πίσω. Συμφέρει λες να κάνω κάτι αντίστοιχο με τις κεφαλίδες και να τα τραβάει από αρχείο; Μου φαίνεται κάπως αργό όταν υπάρχουν πολλές σελίδες θα αργεί αρκετά.

Δημοσ.

Δεν υπάρχει κανένας απολύτως λόγος να βάλεις στη μέση μια βάση, μόνο και μόνο για να φορτώνεις τις σελίδες. Μπορείς κάλλιστα να τις φτιάξεις ως εξής:

><?php
$pagetitle="title";
include "page_top.php"; //Περιέχει όλο το head (κάνεις και ένα echo τον τίτλο της σελίδας), το navigation menu και τέλος πάντων τα κοινά στοιχεία των σελίδων
//To κύριο μέρος της σελίδας
include "page_bottom.php";
?>  

Δημοσ.

Αν σου πω ότι δεν είχα σκεφτεί τα vars προτού κάνω include τα υπόλοιπα...! Μια φορά είχα δοκιμάσει κάτι παρόμοιο, και εμφάνιζε ένα σφάλμα ότι τα headers έχουν ήδη σταλεί. Προφανώς δεν το έκανα όπως στο παράδειγμά σου όμως. Πολύ χρήσιμο, σε ευχαριστώ πολύ!

Αρχειοθετημένο

Αυτό το θέμα έχει αρχειοθετηθεί και είναι κλειστό για περαιτέρω απαντήσεις.

  • Δημιουργία νέου...