Diskuze: Konzultace - pole a OOP
V předchozím kvízu, Online test znalostí PHP, jsme si ověřili nabyté zkušenosti z kurzu.
Zobrazeno 3 zpráv z 3.
K personalizaci obsahu a reklam, poskytování funkcí sociálních médií a analýze naší návštěvnosti využíváme soubory cookie. Informace o tom, jak náš web používáte, sdílíme se svými partnery pro sociální média, inzerci a analýzy. Partneři tyto údaje mohou zkombinovat s dalšími informacemi, které jste jim poskytli nebo které získali v důsledku toho, že používáte jejich služby.
Používáme nezbytné cookies pro fungování webu a s tvým souhlasem také analytické a marketingové cookies.
Zajišťují základní funkce, bezpečnost a služby, které sis vyžádal. Nelze je vypnout.
| Služba | Poskytovatel | Účel | Cookies a úložiště | Doba uložení |
|---|---|---|---|---|
| ITnetwork | ITnetwork | Provoz webu, relace, přihlášení a uložení nastavení cookies. | PHPSESSID, auth_token, sid, itn_consent_impression, __Host-itn_consent | Relace až 1 rok |
| Google Tag Manager | Správa značek a načítání měřicích nástrojů webu. | Žádné | Neukládá se | |
| Google Fonts | Načítání typografie webu. | Úložiště řízené poskytovatelem | Dle podmínek poskytovatele | |
| Google Hosted Libraries | Načítání potřebných knihoven a stylů webu. | Úložiště řízené poskytovatelem | Dle podmínek poskytovatele | |
| Google reCAPTCHA | Ochrana formulářů a webu před zneužitím. | _GRECAPTCHA, rc::a, rc::b, rc::c, rc::f | Relace až 180 dní | |
| YouTube | Přehrávání vloženého video obsahu. | localStorage, IndexedDB; cookies after playback interaction | Relace až trvalé úložiště | |
| Vimeo | Vimeo | Přehrávání vloženého video obsahu. | __cf_bm, _cfuvid, vuid, localStorage, IndexedDB | Relace až 2 roky |
| Facebook Login | Meta | Přihlášení pomocí účtu třetí strany. | Úložiště řízené poskytovatelem | Relace až 1 rok |
| GoPay | GoPay | Zpracování uživatelem vyžádané platby. | Úložiště řízené poskytovatelem | Dle podmínek poskytovatele |
Pomáhají nám porozumět používání webu a zlepšovat ho.
| Služba | Poskytovatel | Účel | Cookies a úložiště | Doba uložení |
|---|---|---|---|---|
| Google Analytics 4 | Měření návštěvnosti a používání webu. | _ga, _ga_* | Až 2 roky | |
| Microsoft Clarity | Microsoft | Měření návštěvnosti a používání webu. | _clck, _clsk, _cltk | Relace až 1 rok |
Slouží k měření kampaní, personalizaci reklamy a marketingové komunikaci.
| Služba | Poskytovatel | Účel | Cookies a úložiště | Doba uložení |
|---|---|---|---|---|
| Google Ads | Měření kampaní, reklama a remarketing. | _gcl_au, _gcl_ls | Relace až 90 dní | |
| Meta Pixel | Meta | Měření kampaní, reklama a remarketing. | _fbp, _fbc, localStorage | Až 90 dní |
| Sklik | Seznam.cz | Měření kampaní, reklama a remarketing. | retargeting, sid, szn:* | Relace až trvalé úložiště |
| LinkedIn Insight | Měření kampaní, reklama a remarketing. | bcookie, li_gc, lidc, __cf_bm | Relace až 1 rok | |
| Ecomail | Ecomail.cz | Měření kampaní, reklama a remarketing. | ecmid, Úložiště řízené poskytovatelem | Dle podmínek poskytovatele |
| Atribuce kampaní ITnetwork | ITnetwork | Přiřazení návštěvy a objednávky ke kampani. | campaign_clid[*], user_session_context | Až 1 rok |
V předchozím kvízu, Online test znalostí PHP, jsme si ověřili nabyté zkušenosti z kurzu.


Ahoj,
určitě by bylo hodně možných návrhu k řešení, nicméně když bych to řešil puntíčkářsky:
Ta třída TiskKodu je spíš jen taková šablona pro tu stránku, podle toho názvu bych spíš očekával, že ta třída reálně něco tiskne. Tedy bych ji trochu přejmenoval, třeba PdfSablona.
Samotné HTML bych pak generoval až v jedné metodě, která by to generování měla na starost. Takhle tam máš dvě metody, které dělají vlastně to samé (přidávají nějaký HTML kód). Tedy bych upravil metody pridejStitek() a tisk() tak, aby:
private $stitky = array();
public function pridejStitek($kod, $pocetSloupcu, $opakovani)
{
$this->stitky[] = array("kod" => $kod, "pocetSloupcu" => $pocetSloupcu, "opakovani" => $opakovani);
}
a v podstatě to, co generuješ v té metodě, vygeneruješ až v té metodě tisk().
public function tisk()
{
$html = "nějaký začátek"; // to samé, co je aktuálně v té metodě jako $this->tisk = "..."
foreach ($this->stitky as $stitek) {
// zde bude to generování, co aktuálně máš v metodě pridejStitek()
}
$html .= "nějaký konec";
return $html;
}
Metodu __toString() pak upravíš jednoduše tak, že si v ní vygeneruješ to HTML a vypíšeš
public function __toString()
{
$html = $this->tisk();
return $html;
}
Ten konstruktor se mi takto zdá zbytečný, jelikož dle kódu bys tam leda
tak dával rovnou nějaké HTML, což nechceš. Do třídy si předávej data a
HTML si nech generovat. Tedy když bys chtěl, můžeš si tam pro příklad
zadat třeba nějaké nastavení pro tu šablonu (třeba barvu textu atd.,).
Když už jsme u toho nastavení, mohlo by tam být i třeba nastavení
kódování, které ručně nastavuješ mimo tu třídu řádkem
$tisk = mb_convert_encoding($tiskkodu, 'UTF-8', 'UTF-8');
To bys klidně mohl mít řešené už v té třídě, které předáš "UTF-8" jako parametr.
Pokud bych chtěl jít ještě do větších detailů, tak by sis mohl pro ty štítky udělat vlastní objekt, protože dle mého návrhu vidíš, že do pole $stitky přidávám další pole, které má nějaké konkrétní prvky, což pomalu zavání nějakou strukturou. Tedy bys klidně mohl zjednodušeně mít
class Stitek
{
private $kod;
private $opakovani;
private $pocetSloupcu;
public function __construct($kod, $opakovani, $pocetSloupcu)
{
// přirazení do atributů
}
}
a v PdfSablona (TiskKodu) bys jednoduše měl
public function pridejStitek($kod, $opakovani, $pocetSloupcu)
{
$this->stitky[] = new Stitek($kod, $opakovani, $pocetSloupcu);
}
ve třídě Stitek by sis pak přidal nějaké gettery, abys mohl ty atributy $kod, $opakovani a $pocetSloupcu nějak použít.
Když budu ještě víc důsledný, tak coding standards v PHP říkají, že názvy funkcí a proměnných by měly být notací camelCase, tedy např. $pocetSloupcu, ne $pocet_sloupcu.
Tedy pro příklad by ten příklad mohl vypadat třeba takto: https://pastebin.com/nUwhjT4L
Určitě bude řada jiných možných návrhů, jiných možných detailů
atd., třeba někdo napíše svůj názor 
Funguje to, děkuji za učesání, určitě si to vezmu k srdci 
Jen tne mb_convert_encoding musím dát až do volání metody WriteHTML, jinak to nejede a mpdf hlásí chybu kódování.
Zobrazeno 3 zpráv z 3.