Autor Zpráva
lionel messi
Profil
Zdravím,

učím sa pracovať s PHP a chcel by som vložiť súbor do stránky. Problém však je, že by som potreboval vložiť iba časť súboru (napr. bez doctype a hlavičky). Príkaz include mi samozrejme vloží celú stránku. Existuje nejaká funkcia alebo alternatíva k include, ktorá by mi umožnila vložiť len vybranú časť súboru alebo je nutné vytvoriť verziu súboru bez doctype a hlavičky a tú includovať? Ďakujem veľmi pekne za odpoveď.
Manny
Profil
Include ti vloží nalinkovaný soubor. Co v tom souboru bude, či část stránky nebo celá, je jen na tobě.
nemeja
Profil
S tím ti pomůže Output Buffering, funguje to tak, že si zapneš buffer, includneš si soubor a až to bude všechno, kde chceš něco odmazat, tak si vlastně to co by se ti normálně vložilo na obrazovku schováš do proměnné, tu projedeš funkcí preg/str_replace, odstraníš co potřebuješ a potom to celé pomocí echo vypíšeš na obrazovku.
Př.
ob_start(); // zapneme bufferování
include( "stranka1.html" ); // načteme stránku, všechny funkce se provedou, ale místo na obrazovku se nám to zatím jenom uloží do paměti
$stranka = ob_get_contents(); // uložíme buffer do proměnné
ob_clean(); // vyčistíme buffer

include( "hlavicka.html"); // sestavíme stránku, atd.

str_replace( "<!doctype html>", "", $stranka ); // odstranime doctype
echo $stranka; // vypíšeme stránku

include( "paticka.html"); // můžeme klidně pokračovat v skládání
Alphard
Profil
nemeja [#3]:
To je přece hloupost. Mrhání výkonem, zbytečné zesložiťování kódu a zanášení wtf prvků :-) Parsery mají smysl, když je potřeba něco vytáhnout z cizí stránky, běžně určitě ne.
Když už by musel být celý kód v jednom souboru, není problém dát tam podmínku, normálně se vykoná. Ale správné řešení je rozdělit celou stránku na menší kousky a skládat, jak je potřeba.
nemeja
Profil
Alphard:
když si budu sám vytvářet template system, tak samozřejmě budu dodržovat určitou konvenci, aby se mi to nekřížilo. Každopádně je dobré znát i tento způsob pro případ, že by stránky odněkud stahoval, nebo je nechce přepisovat ručně.
lionel messi
Profil
Manny:
Include ti vloží nalinkovaný soubor. Co v tom souboru bude, či část stránky nebo celá, je jen na tobě.
To samozrejme viem, ale nechcem tento súbor "sekať" na dva.

Alphard:
Když už by musel být celý kód v jednom souboru, není problém dát tam podmínku, normálně se vykoná.
Trochu som nad tým rozmýšľal, nenapadol ma žiadny spôsob, ako podmienkou odstrániť doctype. Inak, tá podmienka by mala byť v includovanom súbore alebo v cieľovom? Ako schodnejšie mi príde riešenie od [#3] nemeja.

Ale správné řešení je rozdělit celou stránku na menší kousky a skládat, jak je potřeba.
Na to som už prišiel, čo už, učíme sa na vlastných chybách :-)
polonium
Profil
Kdyz tedy pouzivas include toho templatu a nechces ho rozsekat na vice casti, skus toto:

index.php
$chciDocType = true;
include "templates/stranka.phtml";

stranka.phtml
<?php if ($chciDocType) { ?>
<DOCTYPE html>
<?php } ?>



Jinak rozdělit či nerozdělit ten soubor na víc částí je otázka. Obě možnosti jsou schůdné, jde jen o to jak se k tomu postavíš. Podle mě dobrý způsob je ten co psal [#3] nemeja skombinovat s [#7]. Je v tom všechno, můžeš plnit stránku nějakým obsahem a zároveň máš kontrolu nad tím kdy ten výstup pošleš ven. Jen bych nerozděloval hlavičku a patičku. Prostě bych to nechal v souboru layout.phtml.

Vaše odpověď


Prosím používejte diakritiku a interpunkci.

Ochrana proti spamu. Napište prosím číslo dvě-sta čtyřicet-sedm: