Na Interval.cz kdysi dávno vyšel článek o použití directivy #include, která umožňuje skládání výsledného kódu z jednotlivých fragmentů. Dnes se dozvíte jak vkládat jednotlivé fragmenty HTML kódu dynamicky.

Pro lepší pochopení doporučujeme prostudovat předchozí článek.

<%
Stranka=request.querystring(„stranka“)
%>
<!–#include virtual=“ <%=stranka%>.asp“–>

Mnozí z vás se jistě hned zeptají: „proč tento kód nebude fungovat vždyť vypadá bezchyby ?“ Důvod je zcela prozaický. Server při analýze skriptu pozná, že kód obsahuje directivy #include a provede to, že nejprve „poskládá“ kód z jednotlivých fragmentů a teprve takto celistvý kód předá k provedení. Z toho vyplývá, že veškerá jména souborů pro includování je třeba znát již při psaní kódu.

Jak ale vyřešit potřebu dynamicky vkládat různé fragmenty kódu ? Pokud se bude jednat o „čistý“ HTML kód – tedy kód bez skriptů na straně serveru je tu možnost provádět dynamické vkládání textu pomocí Scripting.FileSystemObject.

<html><head>
<TITLE>dynamický include</TITLE>
</head><body>
<%
soubor=“soubor1.asp“
Call vlozsoubor(soubor)
response.write „<hr>“
soubor=“soubor2.asp“
Call vlozsoubor (soubor)
response.write „<hr>“
soubor=“/soubory/test/soubor.asp“
Call ReadDisplayFile(soubor)
response.write „<hr>“
%>
</body></html>
<%
SUB VlozSoubor(FileToRead)
   cesta=server.mappath(FileToRead)
   Set objFS = CreateObject(„Scripting.FileSystemObject“)
   Set objsoubor = fs.OpenTextFile(cesta, 1, False)
   strkvlozeni=objSoubor.readall
   response.write strkvlozeni
   objSoubor.Close
   set objSoubor=nothing
   set objFS=nothing
END SUB
%>

Myslím si, že k tento kód není nutno již dále rozebírat jelikož se jedná o standardní práci s textovými soubory, která byla popisována v článku Práce se soubory pomocí ASP II.

Co si ale počít pokud chceme takto dynamicky vkládat fragmenty kódu, který obsahuje kód, který se má provést na straně serveru? Pokud váš web běží na IIS4 a nižším mám špatnou správu. Nejde to nijak a na následujících řádcích si jen můžete přečíst o tom co budete moci používat pokud váš web poběží na IIS5.

Na IIS5 je k dispozici ASP 3.0 jehož objekt server má metodu Execute. Při vyvolání této metody je pozastaveno zpracování stránky a řízení je předáno stránce, která je uvedena v parametru metody. Aktuální prostředí klienta (session apod.) je přístupné i ve druhé stránce. Po dokončen interpretace druhé stránky je řízení předáno zpět a vykonávání pokračuje na následujícím řádku za místem kde byla metoda Execute volána.

Pro úplnost ještě syntaxi

Server.Execute(„URL“)

URL je adresa stránky, která se má vykonat. URL musí relativní vzhledem k ASP které volání provádí. Absolutní adresace není povolena.

Nakonec se vrátím k nesmyslnému kódu kterým jsem dnes vše začal a předvedu jak tento kód drobně upravit do funkčního tvaru. Úprava je jednoduchá stačí pouze místo directivy #include použít metodu Server.Execute.

<%
Stranka=request.querystring(„stranka“)
Server.Execute(„/“&stranka&“.asp“)
%gt;

Výše uvedený kód se Server.execute vám bude chodit pouze pokud provozujete web na IIS5. Pokud vám veb běží pod IIS4 ani se to nesnažte zkoušet.

V ASP 3.0 je spousta novinek, ktere usnadní práci a často umožní i to co dříve nebylo možné. ASP 3.0 je v Internet Information Serveru 5.0., který je distribuován jako součást Windows 2000. Bohužel IIS5 není k dispozici pro starší systémy.

Od dynamického inludování souborů je už jenom krůček k používání šablon nebo ke „cacheování“ stránek generovaných z databáze. Pokud bude zájem o články na téma šablony či „cacheování“ napište mi prosím do diskuze a nebo na můj email

Starší komentáře ke článku

Pokud máte zájem o starší komentáře k tomuto článku, naleznete je zde.

2 Příspěvků v diskuzi

  1. Co to ma znamenat? Mislel sem, ze tu bude neco co mi pomuze dat si na stranku soubor ke stazeni!! Muzete to sem prosim pridat!! :(

  2. Článek má znamenat Dynamické vkládání souborů a dat na straně serveru. Pokud jste narozdíl od nás všech ostatních co myslíme prováděl činnost, kterou nazýváte „mislel“ vůbec se nedivím, že jste zde nenašel to co jste hledal. Pokud by jste totiž myslel tak požadovanou informaci určitě na Interval.cz (a nejen zde) najdete.

Odpovědět