Diskuze: Machr na PHP - Parser BB kódu
V předchozím kvízu, Online test znalostí PHP, jsme si ověřili nabyté zkušenosti z kurzu.

Vlastník

Zobrazeno 32 zpráv z 32.
//= Settings::TRACKING_CODE_B ?> //= Settings::TRACKING_CODE ?>
V předchozím kvízu, Online test znalostí PHP, jsme si ověřili nabyté zkušenosti z kurzu.
Tak jsem se k tomu dokopal
Ještě zkusím použít ty funkce pro BBCody které jsou přímo v PHP.
Výsledek: https://www.dropbox.com/…j/bbcode.zip
Můžu si vymyslet vlastní značky?
například místo
[style size="15px"]Large Text[/style]
bych psal pouze
[large]Large Text[/large]
Hodnotíš i určení tagů? Tedy když dám například:
<b>tučný</b>
za
[b]tučný[/b]
Který je zastaralý a používá se už místo něj 'strong'.
Či jde čistě pouze o ten script?
hodnotí se určitě jako obvykle všechno.
http://www.moreonfew.com/…e-or-bbcode/
platí i tohle?
Protože tato tabulka obsahuje i značku
[large]text[/large]
7 řádek od spodu.
Tak 1. verze je hotova .
Doufám že se bude líbit.
odkaz:
http://skola.zskaminky.cz/project/bbidea/
odkaz na stažení:
https://drive.google.com/…X3lQRVk/edit?…
dík za reakci . nevím v
čem to vězí na pc(xampp) to funguje.
Musel jsem si upravit <? na <?php a dopsat ti dva řádky kódu
$akce = $_GET['akce'];
$code = $_GET['code'];
a už to funguje
Pěkný.
Sakra, já si nikdy nevzpomenu na to tlačítko odpověděd
Pff, jsem to dělal zbytečně složitě, máš ten kód snažší
Bere se například kladně i když mi to vezme toto?
Text: [i]Lorem [b]ipsum [/i]dolor [/b] aa
Výpis: <i>Lorem <b>ipsum </i>dolor </b> aa
Jde mi o to, že ty tagy se derou přes sebe. Či se spíže bere to, že nějaký tag v tagu se nevezme?
Například:
Text: [b]Lorem [i]ipsum [/i]dolor [/b] aa
Výpis: <b>Lorem [i]ipsum [/i]dolor </b> aa
Určitě kladně, přece když budu chtít nějakou část textu kurzívou a mít ji ještě zvýrazněnou tak tam nebudu mít prasečinky jako
[b]Lorem [/b][i]ipsum [/i][b]dolor [/b] aa
//Edit: To nahoře neber vážně, to jsem napsal hovadinu. Ale prostě musí to jít, protože pak bych nemohl mít určitý text kurzívou a ještě zvýrazněnou.
Jo taky jsem to už předělal.(všude jsem dal GET).
Ahoj, přikládám výtvor za sebe:
http://sifler.php5.cz/bb_php/ - Živá ukázka
(zkoušení)
http://leteckaposta.cz/101654123 - Ke stažení
sifler_bb_php_page.zip - Zazipovaná 'zkoušecí'
stránka
sifler_bb_php_samostatne.zip - Samostatná funkce s
příkladem a smajlíky
Převede kódy: b, i, u, s, img, url, size a color.
Kódy typu:
[b=]Tučný text[/b]
by to nemělo pouštět, jedině jsem to tak zpřístupnil u url, jelikož má 2 typy kódů:
[url]http://example.org[/url]
[url=http://example.com]Example[/url]
Pokud bude chybět: 'http:' nebo 'https:', tak to doplní.
Velikost písma je v rozmezí od 1 - 99.
Myslím, že tyto základní kódy pro ukázku stačí, snad..
dobré ránko, pridávam sa
online: http://sklad.petrofcik.eu/parserbb/
zip na stiahnutie: http://sklad.petrofcik.eu/…parserbb.zip
letecka posta: http://leteckaposta.cz/407200308
mali by fungovať všetky možné tagy ktoré su na stránke http://en.wikipedia.org/wiki/BBCode okrem [hviezdička] pre [li], už sa mi fakt nechcelo premýšľať nad riešením
napísané to je neobjektovo, dosť som precvičoval angličtinu na www.php.net, blbuvzdorné to tiež
nie je, keď som bol v koncoch premýšľal som nad štýlom, hlavne že funguje
Tak jsem to stihl
Online: http://projekty.danvitek.cz/soutez-bbcode/
Download: http://projekty.danvitek.cz/…bcode/bb.zip
Pozn.: Dělal jsem to podle té Wikipedie, chybí mi tam akorát ten seznam
8 minut před deadline = správný programátor - začíná v zásadě pozdě.
Dospěl jsem k následujícímu hodnocení:
Dan - Jsem rád, že už se orientuješ v objektech. Samotné nahrazení jde napsat elegantněji, viz. zdenda204.
fuulll - Architektura je zajímavá, ale pro toto konkrétní použití mi to přijde spíše kontraproduktivní. Místo toho hrozného switche by stačilo implementovat autoloader.
mamiksik - Jednoduché řešení, které sice funguje, ale k
dokonalosti má ještě daleko
matusko - str_ireplace můžeš volat přímo s poly v argumentech, ten foreach a pole polí by šlo zapsat jednodušeji. To parsování těžkých kódů je šílenost, to se dělá reguláry. Styly a podobné věci určitě nepatří do souboru s příponou php.
sifler - Postup vypadá dobře, ale kód je opravdu nepřehledný, je to celé nacpané v jedné funkci. Kdybys k tomu přišel za rok, už bys nevěděl proč tam která část je.
zdenda204 - Dle mého soudu nejhezčí řešení a proto také i vítězné. V jednoduchosti je krása, jen ten, kdo umí psát jednoduchý kód, dokáže vyvíjet a udržovat velké aplikace se spoustou funkčnosti. K dokonalosti bys to ještě mohl hodit do objektu.
Placku tedy získává Zdeněk Bauer, prosím o publikaci výtvoru a napiš x adresu. Všem děkuji za účast a těším se příští týden.
Zdeněk Bauer, gratulace
V podstatě vyhrál ten co první poslal řešení, ostatní se museli
přizpůsobit..
Mě napadlo to samé avšak když jsem už viděl kód od zdendy tak jsem
musel vyrukovat s něčím jiným, co už.
Gratulace zdendovi..
autoload jsem použil, ale stejně tam ten switch je:
public function create($param){
switch ($param) {
case 'b':
$this->text = new BoldedText();
break;
case 'it':
$this->text = new ItalicizedText();
break;
case 'im':
$this->text = new ImageText();
break;
case 'u':
$this->text = new UnderlinedText();
break;
case 's':
$this->text = new StrikethroughText();
break;
case 'q':
$this->text = new QuotedText();
break;
case 'c':
$this->text = new ColorText();
break;
case 'l':
$this->text = new LargeText();
break;
default:
throw new InvalidArgumentException("Třída ".$param." neexistuje!");
break;
}
return $this->text;
}
Právě proto jsem vsadil na OOP a návrhové vzory, ale asi mi to moc
nepomohlo
Ten tvůj switch se přece dá napsat mnohem jednodušeji:
public function create($param){
switch ($param) {
case 'b': return new BoldedText();
case 'it': return new ItalicizedText();
case 'im': return new ImageText();
case 'u': return new UnderlinedText();
case 's': return new StrikethroughText();
case 'q': return new QuotedText();
case 'c': return new ColorText();
case 'l': return new LargeText();
}
throw new InvalidArgumentException("Třída ".$param." neexistuje!");
}
a to není poslední slovo. Také můžeš udělat
public function create($param){
$class = "Text_$param";
return new $class();
}
Gratulujem víťazovi! Zdeněk Bauer
David Hartinger: Táto súťaž mi dala pomerne dosť. Musel som vymýšľať
zdanlivo ťažký algoritmus len pomocou mojich momentálnych znalostí (+trochu
php.net), o regulároch sa dozvedám až teraz, taktiež o tom že nepotrebujem
foreach pre str_ireplace.
Prečo styly nepatria do php? Chcel som si precvičiť css bez zvýrazňovania
syntaxe, a nakonieco som to tak nechal všetko v jednom súbore. Ďakujem za
odpoveď.
Každopádne sa teším na ďaľšie súťaže a prajem Veselé Vianoce
tvůj druhý příklad nebude fungovat správně a to ze 2 důvodů:
ten první příklad je o něco kratší než ten můj, ale pořád tam ten switch je.
To je mi jasné, že to nebude fungovat, pokud se neudělají návaznosti:
- Ošetření výjimky se dá o vrstvu výš
- Třída BoldedText by se musela přejmenovat na Text_b apod.
Zobrazeno 32 zpráv z 32.