Rasťo Turek / 04. 11. 2003, 00:00
Je pomaly až neuveriteľné, že sa rútime do štvrtého dielu nášho seriálu. Dnes si povieme niečo o tom, ako si naformátovať text do vašej stránky podľa vami zadanej normy, trebárs 40 znakov na riadok. Tento programček nám však nebude dávať pomlčky, ak slovo nevôjde na riadok, ale nechá nám celé slovo na riadku, poprípade podľa podmienky ho presunie na ďalší riadok.
Celé sa to bude skladať len z jednej funkcie, ktorá nám bude logicky rozdeľovať text podľa našej požiadavky. To znamená, že jej musíme udať aj nejaké parametre. No najskôr si ukážme script a potom si ho vysvetlíme. Nazvime si script napríklad rozklad_textu.php.
<?php
function rozdel_text($text, $pocet, $break="<br>")
{
$len = strlen($text);
if ($len > $pocet)
{
$h ='';
$poslednyBiely = 0;
$poslednyZnak = 0;
$poslednyBreak = 0;
while ($poslednyZnak < $len)
{
$znak = substr($text, $poslednyZnak, 1);
if (($poslednyZnak - $poslednyBreak > $pocet) && ($poslednyBiely > $poslednyBreak))
{
$h .= substr($text, $poslednyBreak, ($poslednyBiely - $poslednyBreak)) . $break;
$poslednyZnak = $poslednyBiely + 1;
$poslednyBreak = $poslednyZnak;
}
if ($znak == ' ' || $znak == chr(13) || $znak == chr(10))
{
$poslednyBiely = $poslednyZnak;
}
$poslednyZnak = $poslednyZnak + 1;
}
$h .= substr($text, $poslednyBreak);
}
else
{
$h = $text;
}
return $h;
}
?>
Najskôr si opíšeme samotnú funkciu rozdel_text(), do ktorej si zadáme tri parametre. Prvým parametrom je $text, ktorý nám určí samotný text pre rozdelenie. Druhým parametrom je $pocet a tento parameter nám určuje, po koľkých znakoch sa nám text rozdelí. Nakoniec máme tretí parameter $break a pri tomto parametri sa na chvíľu pozastavíme. Do tohto parametru budeme totiž udávať všetky možné oddeľovače, ako napríklad <br> pre nový riadok, \n pre zobrazenie nového riadku, \t pre tabulátor a ďalšie formátovacie značky. Takto jednoducho si môžete určiť, ako bude váš text vyzerať po formátovaní. Teda formátovanie závisí len od vás a udáte ho spôsobom $break=“\n\t\r“. Takže, keď sme si vysvetlili základy, poďme sa pozrieť na celú funkciu pekne poporiadku.
Najskôr si určíme dĺžku zadávaného textu pomocou funkcie strlen(). Táto funkcia vracia dĺžku textu. Ďalej si určíme podmienku, že ak je vložený text väčší ako nami zadaná hodnota pre rozdelenie, tak budeme rozdelenie prevádzať a ak nie je, tak vrátime priamo vložený text. Určíme si 4 pomocné parametre $h pre náš text. Ak doplníte do tohto parametru nejaký text, tak sa bude zobrazovať na začiatku pred vloženým textom $poslednyBiely určuje, akú dĺžku bude mať prvá časť vety, ale len ak je hodnota parametru $poslednyZnak väčšia ako $pocet. Tento parameter však odstráni aj prvé písmeno v počiatočnej vete. Ďalej tu máme parameter $poslednyZnak, ktorý, ak je väčší ako $pocet, nám vždy zobrazí prvú vetu v takejto dĺžke. No a nakoniec máme štvrtý pomocný parameter a tým je $poslednyBreak. Ten nám určuje, koľko znakov odstránime z vkladaného textu, teda od začiatku. Už poznáme všetky pomocné parametre a môžeme sa pozrieť hlbšie do našej funkcie.
Vytvoríme si cyklus, ktorý sa bude prevádzať, ak je dĺžka vkladaného textu väčšia ako veľkosť prvej vety. V opačnom prípade by to význam nemalo. Tu si určíme parameter $znak, pomocou funkcie substr(), ktorá nám určuje čítanie textu podľa určitých kritérií. Vytvoríme si podmienku pre kontrolu logiky reťazca a naformátujeme výstup. Ďalej si vytvoríme podmienku pre nahradenie bieleho miesta v texte pomocou funkcie chr() a zadáme si hodnotu parametra $poslednyBiely = $poslednyZnak. Uzavrieme si podmienku a ešte do cyklu pridáme určenie parametru $poslednyZnak = $poslednyZnak + 1, aby sme zaručili, že dĺžka bude vždy plus jedna, teda aby sme zaručili, že sa text nebude deliť v slove. Nakoniec prvej podmienky vložíme do parametra $h odstránenie x znakov od začiatku textu pomocou parametru $poslednyBreak. No a v poslednom rade urobíme výstup z funkcie a teda navrátime hodnotu $h, ktorá predstavuje náš text.
Táto funkcia vám ponúka mnoho druhov formátovania s textom a v neposlednom rade aj mnoho pokročilejších nastavení pre výstup vami vkladaného textu. Čo je podľa môjho názoru dobrá vec a prečo som sa rozhodol napísať takýto script je to, že vám text neroztrhá, nedáva vám žiadne pomlčky, jednoducho buď ponechá celé slovo (čo síce môže prekročiť zadané delenie textu aj o niekoľko znakov), alebo nám slovo dá o riadok nižšie. Takto síce nedostaneme úplne rovné zarovnanie textu, ale aspoň si nemusíte trhať vlasy, že tam a tam vám script nedal pomlčku a hlavne formátovanie je rovnaké vo všetkých prehliadačoch, čo je dosť dôležitá podmienka.
Keďže už poznáme celú funkciu, poďme si do toho istého scriptu spraviť aj výstup. Spravíme si výstup pomocou cyklu for(), ktorý nám umožní pozrieť si výstupy od nami zadaného formátovania riadku až po najmenšiu čiastku. Teda my budeme klesať po desiatkach, je však možné klesať, či stúpať po akýchkoľvek jednotkách. Tu je celý výstup, dole si ho vysvetlíme.
<HTML>
<HEAD>
<TITLE>Rozklad textu</TITLE>
</HEAD>
<BODY>
<?php
$test = "Toto je príklad, ako správne deliť veľmi dlhý text. Samozrejme dajú sa využiť asi tri druhy spôsobu delenia, dokonca sa dá docieliť aj formátovanie pomocou \\n či odsadenie pomocou \\t. A nikdy nám to tie slová neroztrhá.";
echo("$test<BR><BR>");
for ($r = 80; $r > 0; $r = $r - 10)
{
$rozdel = rozdel_text($test, $r);
echo "$r<BR>$rozdel<BR><BR>";
}
?>
</BODY>
</HTML>
$test = "Toto je príklad, ako správne deliť veľmi dlhý text. Samozrejme dajú sa využiť asi tri druhy spôsobu delenia, dokonca sa dá docieliť aj formátovanie pomocou \\n či odsadenie pomocou \\t. A nikdy nám to tie slová neroztrhá.";
Keď sa pozriete na výstup do html, tak zistíte nasledovné. V prvom rade si určíme vstupný text, ktorý bude obsiahnutý v parametre $test. Tento text si vypíšeme, aby sme mali prehľad o formátovaní. Ďalej si dáme do cyklu podmienku, že $r je parameter pre delenie, takže si doň určíme, po koľkých znakoch sa nám majú deliť vety. Potom tu máme podmienku, že parameter $r musí byť vždy väčší od nuly. No a nakoniec si budeme prevádzať cyklus vždy spôsobom parameter $r mínus desať, teda sa nám bude text formátovať vždy o desať znakov menej na jeden riadok. Nakoniec pristúpime k samostatnému formátovaniu. Zavoláme si funkciu rozdel_text() a zadáme jej parametre. No a konečne si urobíme výstup formou, počet znakov v jednom riadku – riadok – delený text v x riadkoch – riadok – riadok.
Použitie:
Tento script môžete použiť do akejkoľvek stránky, kde potrebujete mať určitú dĺžku textu, napríklad v tabuľkách či pre potrebu grafickej úpravy. Prípadne použitie som už videl aj v guestbookoch alebo napríklad aj v takýchto internetových denníkoch ako je inet.sk.
Vylepšenia:
Neviem, ako by sa to dalo vylepšiť, ale vždy sa nájde nejaké to riešenie. Dúfam, že mi prípadné vylepšenia či pripomienky budete písať na email, nech som aj ja trošička skúsenejší. :-)
Upozornenia:
Pozor na tento spôsob vypísania. Máte dve možnosti, ako si vypisovať len jeden text, aby sa vám to stále nezmenšovalo. Každú vám ukážem už priamo na scripte. Prvou je používať podmienku if().
<?php
$test = "Toto je príklad, ako správne deliť veľmi dlhý text. Samozrejme dajú sa využiť asi tri druhy spôsobu delenia, dokonca sa dá docieliť aj formátovanie pomocou \\n či odsadenie pomocou \\t. A nikdy nám to tie slová neroztrhá.";
echo("$test<BR><BR>");
if($r=80)
{
$rozdel = rozdel_text($test, $r);
echo "$r<BR>$rozdel<BR><BR>";
}
?>
a tou druhou je určiť si parameter $r niekde do stránky
<?php
$test = "Toto je príklad, ako správne deliť veľmi dlhý text. Samozrejme dajú sa využiť asi tri druhy spôsobu delenia, dokonca sa dá docieliť aj formátovanie pomocou \\n či odsadenie pomocou \\t. A nikdy nám to tie slová neroztrhá.";
echo("$test<BR><BR>");
$r=80;
$rozdel = rozdel_text($test, $r);
echo "$r<BR>$rozdel<BR><BR>";
?>
Tak a máme dokončený ďalší z našich dielov. Ďakujem za vaše názory a pripomienky, ktoré ste mi zaslali a dúfam, že v tomto trende budete naďalej pokračovať. Aj naďalej mi píšte, akú tému by ste chceli vidieť v našom mini seriále. Dúfam, že budú tieto témy pre vás užitočné a že vám pomôžu vo vašom programátorskom raste. Ako vždy si môžete stiahnuť tieto scripty kliknutím na tento odkaz.
Nabudúce sa pozrieme na päť malých scriptov, ktoré vám pomôžu a skrášlia vaše stránky. Všetkým želám krásny a príjemný týždeň.
Rastislav Turek // break.sk
Copyright © 2002 - 2013 inet.sk, s. r. o. | Všetky práva vyhradené | Neprešlo jazykovou úpravou | ISSN 1336-1899
Využívame kvalitný webhosting za rozumnú cenu od Inet.sk