Vydělávej až 160.000 Kč měsíčně! Akreditované rekvalifikační kurzy s garancí práce od 0 Kč. Více informací.
Hledáme nové posily do ITnetwork týmu. Podívej se na volné pozice a přidej se do nejagilnější firmy na trhu - Více informací.
Avatar
David Hartinger
Vlastník
Avatar
David Hartinger:16.12.2013 11:43

Ahoj programátoři, v tomto týdnu si v soutěži o placku a samolepky procvičíme programování na jednoduchém parseru BB kódu. BB kód všichni jistě znáte, je to soubor několika značek, které se používají k formátování textů v diskuzích založených na PhpBB. Vypadá asi takto:

[b]Tučný text[/b]
[img]http://nejakaadresa/nejakyobrazek.png[/img]
:)

Parser by měl ze vstupu výše vygenerovat asi takovýto kód:

<b>Tučný text</b><br />
<img src="http://nejakaadresa/nejakyobrazek.png" alt="" />
<img src="smajlici/usmevavy.png" alt="Úsměv" />

Docela dobrý popis BBkódu je na Wikipedii - http://en.wikipedia.org/wiki/BBCode Nemusíte ho implementovat celý, ale samozřejmě čím více, tím lépe. Na druhou stranu platí jako u všech soutěží, že hezčí kód, který toho umí méně, je hodnocen lépe, než ošklivý kód, který toho umí hodně. Svůj skript demonstrujte na jednoduché ukázce. Soutěž je omezena na jazyk PHP, je však možné získat i alternativní placky, jako např. Machr na OOP, pokud bude program hezky objektově navržený.

Čas si dejme jako vždy do neděle 22.12. do 18:00. Podrobná pravidla soutěží jsou zde: http://www.itnetwork.cz/…outezi-machr

Odpovědět
16.12.2013 11:43
You are the greatest project you will ever work on.
Avatar
Zdeněk Bauer
Tvůrce
Avatar
Zdeněk Bauer:16.12.2013 13:31

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

 
Nahoru Odpovědět
16.12.2013 13:31
Avatar
Milan Gallas
Tvůrce
Avatar
Odpovídá na David Hartinger
Milan Gallas:16.12.2013 18:30

Můžu si vymyslet vlastní značky?
například místo

[style size="15px"]Large Text[/style]

bych psal pouze

[large]Large Text[/large]
 
Nahoru Odpovědět
16.12.2013 18:30
Avatar
Uživatel sítě :16.12.2013 19:59

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?

Editováno 16.12.2013 20:00
Nahoru Odpovědět
16.12.2013 19:59
Chybami se člověk učí, běžte se učit jinam!
Avatar
Odpovídá na Uživatel sítě
Michal Žůrek - misaz:16.12.2013 20:05

hodnotí se určitě jako obvykle všechno.

 
Nahoru Odpovědět
16.12.2013 20:05
Avatar
Nahoru Odpovědět
16.12.2013 20:07
Chybami se člověk učí, běžte se učit jinam!
Avatar
David Hartinger
Vlastník
Avatar
Odpovídá na Milan Gallas
David Hartinger:16.12.2013 20:11

Ne, musí to být podle specifikace.

Nahoru Odpovědět
16.12.2013 20:11
You are the greatest project you will ever work on.
Avatar
Milan Gallas
Tvůrce
Avatar
Odpovídá na David Hartinger
Milan Gallas:16.12.2013 21:41

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.

 
Nahoru Odpovědět
16.12.2013 21:41
Avatar
mamiksik
Člen
Avatar
mamiksik:17.12.2013 17:28

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?…

Nahoru Odpovědět
17.12.2013 17:28
“The programmers of tomorrow are the wizards of the future” - Gabe Newell
Avatar
Odpovídá na mamiksik
Zdeněk Pavlátka:17.12.2013 17:33

Neukazuje se vygenerovaný text...

Nahoru Odpovědět
17.12.2013 17:33
Kolik jazyků umíš, tolikrát jsi programátor.
Avatar
mamiksik
Člen
Avatar
Odpovídá na Zdeněk Pavlátka
mamiksik:17.12.2013 17:36

dík za reakci :). nevím v čem to vězí na pc(xampp) to funguje. :(

Editováno 17.12.2013 17:36
Nahoru Odpovědět
17.12.2013 17:36
“The programmers of tomorrow are the wizards of the future” - Gabe Newell
Avatar
mamiksik
Člen
Avatar
Odpovídá na Zdeněk Pavlátka
mamiksik:17.12.2013 17:43

Mělo by to být opravené. :)

Nahoru Odpovědět
17.12.2013 17:43
“The programmers of tomorrow are the wizards of the future” - Gabe Newell
Avatar
Zdeněk Bauer
Tvůrce
Avatar
Zdeněk Bauer:17.12.2013 17:53

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ý.

 
Nahoru Odpovědět
17.12.2013 17:53
Avatar
Zdeněk Bauer
Tvůrce
Avatar
Odpovídá na mamiksik
Zdeněk Bauer:17.12.2013 17:56

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žší :D

 
Nahoru Odpovědět
17.12.2013 17:56
Avatar
Uživatel sítě :17.12.2013 18:52

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
Nahoru Odpovědět
17.12.2013 18:52
Chybami se člověk učí, běžte se učit jinam!
Avatar
Zdeněk Bauer
Tvůrce
Avatar
Odpovídá na Uživatel sítě
Zdeněk Bauer:17.12.2013 18:55

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.

Editováno 17.12.2013 18:57
 
Nahoru Odpovědět
17.12.2013 18:55
Avatar
Odpovídá na Zdeněk Bauer
Uživatel sítě :17.12.2013 18:56

To je také vlastně pravda, děkuji..

Nahoru Odpovědět
17.12.2013 18:56
Chybami se člověk učí, běžte se učit jinam!
Avatar
mamiksik
Člen
Avatar
Odpovídá na Zdeněk Bauer
mamiksik:17.12.2013 19:28

Jo taky jsem to už předělal.(všude jsem dal GET). :)

Nahoru Odpovědět
17.12.2013 19:28
“The programmers of tomorrow are the wizards of the future” - Gabe Newell
Avatar
Uživatel sítě :18.12.2013 18:01

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.. :)

Nahoru Odpovědět
18.12.2013 18:01
Chybami se člověk učí, běžte se učit jinam!
Avatar
Matúš Petrofčík:22.12.2013 9:03

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 :D

Editováno 22.12.2013 9:04
Nahoru Odpovědět
22.12.2013 9:03
obsah kocky = r^2 ... a preto vlak drnká
Avatar
Neaktivní uživatel:22.12.2013 17:52

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 :(

Nahoru Odpovědět
22.12.2013 17:52
Neaktivní uživatelský účet
Avatar
Odpovídá na Neaktivní uživatel
Michal Žůrek - misaz:22.12.2013 19:22

8 minut před deadline = správný programátor - začíná v zásadě pozdě.

 
Nahoru Odpovědět
22.12.2013 19:22
Avatar
David Hartinger
Vlastník
Avatar
David Hartinger:22.12.2013 19:28

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.

Nahoru Odpovědět
22.12.2013 19:28
You are the greatest project you will ever work on.
Avatar
Neaktivní uživatel:22.12.2013 19:36

Zdeněk Bauer, gratulace ;)

Nahoru Odpovědět
22.12.2013 19:36
Neaktivní uživatelský účet
Avatar
Uživatel sítě :22.12.2013 20:08

V podstatě vyhrál ten co první poslal řešení, ostatní se museli přizpůsobit.. :D

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ž. 8-)

Gratulace zdendovi.. :)

Editováno 22.12.2013 20:09
Nahoru Odpovědět
22.12.2013 20:08
Chybami se člověk učí, běžte se učit jinam!
Avatar
Milan Gallas
Tvůrce
Avatar
Odpovídá na David Hartinger
Milan Gallas:22.12.2013 20:14

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;
}
Editováno 22.12.2013 20:15
 
Nahoru Odpovědět
22.12.2013 20:14
Avatar
Milan Gallas
Tvůrce
Avatar
Odpovídá na Uživatel sítě
Milan Gallas:22.12.2013 20:19

Právě proto jsem vsadil na OOP a návrhové vzory, ale asi mi to moc nepomohlo :(

 
Nahoru Odpovědět
22.12.2013 20:19
Avatar
Kit
Tvůrce
Avatar
Odpovídá na Milan Gallas
Kit:22.12.2013 20:33

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();
}
Nahoru Odpovědět
22.12.2013 20:33
Vlastnosti objektů by neměly být veřejné. A to ani prostřednictvím getterů/setterů.
Avatar
Odpovídá na David Hartinger
Matúš Petrofčík:22.12.2013 20:46

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 :)

Editováno 22.12.2013 20:47
Nahoru Odpovědět
22.12.2013 20:46
obsah kocky = r^2 ... a preto vlak drnká
Avatar
Milan Gallas
Tvůrce
Avatar
Odpovídá na Kit
Milan Gallas:22.12.2013 20:47

tvůj druhý příklad nebude fungovat správně a to ze 2 důvodů:

  1. nemáš ošetřenou vyjimku
  2. třída Text_b, nebo Text_u neexistuje

ten první příklad je o něco kratší než ten můj, ale pořád tam ten switch je.

 
Nahoru Odpovědět
22.12.2013 20:47
Avatar
Milan Gallas
Tvůrce
Avatar
Odpovídá na Kit
Milan Gallas:22.12.2013 20:54

Ale i tak je můj kód o dost kratší. Díky

 
Nahoru Odpovědět
22.12.2013 20:54
Avatar
Kit
Tvůrce
Avatar
Odpovídá na Milan Gallas
Kit:22.12.2013 20:56

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.

Nahoru Odpovědět
22.12.2013 20:56
Vlastnosti objektů by neměly být veřejné. A to ani prostřednictvím getterů/setterů.
Děláme co je v našich silách, aby byly zdejší diskuze co nejkvalitnější. Proto do nich také mohou přispívat pouze registrovaní členové. Pro zapojení do diskuze se přihlas. Pokud ještě nemáš účet, zaregistruj se, je to zdarma.

Zobrazeno 32 zpráv z 32.