Saját mini cms-hez szeretnék modult, de nem boldogulok.
Iskolai feladat keretein belül saját mini cms-t csinálok és jól jönne némi segítség, akár privátban is a nagyobb hatékonyság érdekében.
Hol is kezdjem. Szóval van nekem egy dinamikus weboldalam localhoston és az egyik probléma a sok közül,hogy túl sok mindent akarok $_GET-tel elküldeni.
Az ide mutató adatbázis részlet:
menu tábla:
m_id
m_szulo (egy m_id az almenü szülőjének, ha van)
m_nev (nav-ban megjelenített név)
m_sorrend (nav-ban megjelenített sorrend)
m_cim (adott oldalhoz tartozó h1)
m_tartalom (adott oldalhoz tartozó tartalom)
m_plugin (egy másik php a plugin mappából include-olva)
m_statusz (aktív/passzív =látható/nem látható)
hírek tábla:
hir_id
hir_cim
hir_tartalom
hir_datum
hir_statusz
index.php tartalma:Ehhez szeretnék egy blog-szerű "hírek" kezdőoldalt, mint a Weblabor blog hogy az első, főoldalon lapozható cikkek legyenek rövid szöveggel és ha a címükre, vagy a tovább gombra kattintok,akkor jelenjen meg az adott cikk,meg egy vissza a hírekhez link.
Ehhez írtunk is még régebben egy php-t,ami külön működik is(kivéve az adott cikkre mutató linkkel), de a lapozó is get-tel adja át az értéket, az index.php is get-tel kapja a menüpont id-jét és a cikk megjelenítését sem tudom, hogy hogy kellene megoldani(hacsak nem egy harmadik php-vel, de megengedhető ez egy dinamikus oldalnál?). Olvasok megállás nélkül a témában,de nagyon kezdő vagyok még és sok mindent nem értek, a határidő meg közeledik.
A hirek.php:
■ Hol is kezdjem. Szóval van nekem egy dinamikus weboldalam localhoston és az egyik probléma a sok közül,hogy túl sok mindent akarok $_GET-tel elküldeni.
Az ide mutató adatbázis részlet:
menu tábla:
m_id
m_szulo (egy m_id az almenü szülőjének, ha van)
m_nev (nav-ban megjelenített név)
m_sorrend (nav-ban megjelenített sorrend)
m_cim (adott oldalhoz tartozó h1)
m_tartalom (adott oldalhoz tartozó tartalom)
m_plugin (egy másik php a plugin mappából include-olva)
m_statusz (aktív/passzív =látható/nem látható)
hírek tábla:
hir_id
hir_cim
hir_tartalom
hir_datum
hir_statusz
index.php tartalma:
<?php
require("mysql.php");
// Menü összeállítása
$sql = "SELECT m_id, m_nev
FROM menu
WHERE m_s_id = (SELECT s_id FROM statusz WHERE s_nev='aktiv')
ORDER BY m_sorrend ASC";
$eredmeny = mysql_query($sql);
$menu = "<ul>\n";
while ($sor = mysql_fetch_assoc($eredmeny)) {
$menu.= "<li><a href=\"?m_id={$sor['m_id']}\">{$sor['m_nev']}</a></li>";
}
$menu.= "</ul>\n";
// Tartalom összeállítása
$id = (isset($_GET['m_id'])) ? $_GET['m_id'] : 1;
$sql = "SELECT m_cim, m_tartalom, m_plugin
FROM menu
WHERE m_s_id = (SELECT s_id FROM statusz WHERE s_nev='aktiv')
AND m_id = ".$id;
$eredmeny = mysql_query($sql);
if (@mysql_num_rows($eredmeny) == 0) {
$tartalom = "<h1>Hiba!</h1>
<p><em>A keresett oldal nem található.</em></p>\n";
}
else {
$sor = mysql_fetch_assoc($eredmeny);
$tartalom = "<h1>{$sor['m_cim']}</h1>
{$sor['m_tartalom']}\n";
if(!empty($sor['m_plugin'])){
$tartalom.=include("./modul/{$sor['m_plugin']}");
}
}
?><!DOCTYPE html>
<html>
<head>
<meta charset="utf8" />
<title></title>
</head>
<body>
<div id="wrapper">
<header id="header">
<h1>Tartalomkezelő</h1>
</header>
<nav id="menu">
<?php print $menu; ?>
</nav>
<section id="content">
<?php print $tartalom; ?>
</section>
<footer id="footer">
<p>© 2014</p>
</footer>
</div>
</body>
</html>
Ehhez írtunk is még régebben egy php-t,ami külön működik is(kivéve az adott cikkre mutató linkkel), de a lapozó is get-tel adja át az értéket, az index.php is get-tel kapja a menüpont id-jét és a cikk megjelenítését sem tudom, hogy hogy kellene megoldani(hacsak nem egy harmadik php-vel, de megengedhető ez egy dinamikus oldalnál?). Olvasok megállás nélkül a témában,de nagyon kezdő vagyok még és sok mindent nem értek, a határidő meg közeledik.
A hirek.php:
<?php
// Találatok
$kieg=mysql_query("SELECT * FROM hirek");
$mennyit = 5;
$osszesen = mysql_num_rows($kieg);
$oldal = (isset($_GET['oldal'])) ? $_GET['oldal'] : 1;
$oldalak = ceil($osszesen/$mennyit);
$honnan = ($oldal-1)*$mennyit;
$sql = "SELECT hir_id, hir_cim, hir_tartalom, hir_ido
FROM hirek
WHERE hir_s_id=(SELECT s_id FROM statusz WHERE s_nev='aktiv')
ORDER BY hir_id DESC
LIMIT {$honnan}, {$mennyit}";
$eredmeny = mysql_query($sql);
$kimenet = "";
while ($sor = mysql_fetch_assoc($eredmeny)) {
$kimenet.= "<article class=\"hirek\">
<h3><a href=\"index.php?hir_id={$sor['hir_id']}\">{$sor['hir_cim']}</a></h3>
<span class=\"hido\">{$sor['hir_ido']}</span>
<p class=\"htart\">".substr(strip_tags($sor['hir_tartalom']),0,200)."</p>
<a href=\"index.php?hir_id={$sor['hir_id']}\">Tovább...</a>
</article>\n";
}
// Lapozó
$lapozo = "<p>";
$lapozo.= ($oldal <= 1) ? "Első | " : "<a href=\"?oldal=1\">Első</a> | ";
$lapozo.= ($oldal <= 1) ? "Előző | " : "<a href=\"?oldal=".($oldal-1)."\">Előző</a> | ";
for ($i=1; $i<=$oldalak; $i++) {
$lapozo.= ($oldal == $i) ? "{$i} | " : "<a href=\"?oldal={$i}\">{$i}</a> | ";
}
$lapozo.= ($oldal >= $oldalak) ? "Következő | " : "<a href=\"?oldal=".($oldal+1)."\">Következő</a> | ";
$lapozo.= ($oldal >= $oldalak) ? "Utolsó" : "<a href=\"?oldal={$oldalak}\">Utolsó</a>";
$lapozo.= "</p>\n";
return $lapozo.$kimenet.$lapozo;
?>
Nem a legszerencsésebb az adatbázis szerkezete.
Az adatbázishoz használd a PDO driver-t prepared statement-el. Ez nem választási lehetőség, hanem alapvető dolog. A driver, amit most használsz nagyon komoly biztonsági kockázatot jelent.
A többire nem igazán lehet válaszolni, mert nincs konkrét kérdés.
Az, hogy valamit GET-tel adsz át nem probléma. Ha egy kérés csak olvas valamit az adatbázisból, akkor annak GET-nek kell lennie. Ha ír is valamit az adatbázisba, pl beküld vagy módosít egy tartalmat, akkor már POST-nak kell lennie. Ennyi a különbség.
Az linkeknél nem muszáj GET-ben átadni pl a menüpont id-jét. Általában mindenki szép url-t használ a GET-es átadás helyett. Ennél a legjobb megoldás a front controller minta használata. Azt kb úgy kell elképzelni, hogy a webszerver minden kérésedet egyetlen php fájlhoz irányítja, az a php fájl pedig megnézi a kérés url-jét, és az alapján szétosztja a kéréseket a többi fájl között. Így az url-ben nem kell php fájl nevének szerepelnie. Ahhoz, hogy ezt megcsinálja egy apache szerver, kell egy .htaccess nevű fájlt csinálnod. Ebbe bele kell szórnod a következőt:
$url_adatok
-ban elérhető a menü id-je az index.php-ből. Próbálgasd, ha nem megy, akkor küldj kérdést ezzel kapcsolatban.Az sql kódodban jobb lenne, ha kitennéd az "aktiv" részt egy konstansba, mert ahogy nézem elég sokszor használod, könnyű elírni.
Írj, ha további kérdéseid vannak!