O produktu | Technická podpora | Verze | Videoukázky | Manuály | Nabídka práce | Kontakt
Česky   menu-arrow-gray-horizontal.gif
Domů > Návody > Jak na to ? Postupy, návody, rady > Jak vytvořit vlastní komponentu
Další informace
Hledat


Video ukázky
Drag&drop v prostředí Visual PHP™

Nejnovější video ukázky:
Nabídka práce
Společnost
E-VISION International s.r.o.

příjme na dlouhodobou spolupráci PHP5 a JavaScript programátory
pro vývoj produktu Visual PHP™




Více informací ...
Napsali o Visual PHP™
Novinky na e-mail
Váš e-mail

Visual PHP™ Doporučuje!
Pro práci jak v developerském, tak v administrátorském rozhraní doporučujeme používat internetový prohlížeč Mozilla Firefox, na jehož základě je vzhledem ke stabilitě, dodržování standardů konzorcia W3C a ochranným prvkům prohlížeče celý software vyvíjen.

Jak vytvořit vlastní komponentu

Někdy nastane situace, kdy potřebujete vložit svou vlastní komponentu namísto výchozích vizuálních komponent (TEXT, TEXTAREA, COMBOBOX, CHECKBOX, HTMLAREA, LOOKUP, ...). Ukážeme si, jak to lze za pomocí událostí komponent zvládnout.

Každá komponenta má k dispozici tyto hlavní události, pomocí kterých lze vlastní komponenty implementovat:

onGetCode($recordValues)                              // zobrazuje HTML kód komponenty pro editaci obsahu
onGetDBValue($beforeRecordValues, $afterRecordValues) // vrací hodnotu, která bude uložena do databáze
onGetDisplayValue($recordValues)                      // zobrazuje hodnotu pro výstup na www
Představme si příklad, že potřebujeme vytvořit takovou komponentu, kde uživatel v administraci (aby to nemusel přepočítávat ručně) zadá pouze číselnou hodnotu hmotnosti a současně i vybere měrnou jednotku (g, kg, t) a systém sám převede hodnotu na kilogramy (v poli tabulky potřebujeme mít uloženou hodnotu ve stejných jednotkách) a uloží do databáze. Pro lidštější zobrazení obsahu na webu pak z této společné jednotky opět zobrazí hodnotu v gramech, kilogramech nebo tunách v závislosti na tom, jak velká je hodnota uložená v databázi.

Vytvoříme tedy nové pole weight s SQL typem DOUBLE a komponentou READONLY (tato komponenta obsahuje základní metody pro práci s daty a jejich zobrazování).

Kód pro editaci v administraci

Začneme zobrazením HTML kódu komponenty pro editaci obsahu pomocí metody onGetCode:
// prevedu jednotky z kg na g, kg, t
$value = $recordValues[$this->name];
if ($value < 1)
{
	$unit = "g";
	$value *= 1000;
}
else if ($value >= 1000)
{
	$unit = "t";
	$value /= 1000;
}

$html = "";
// zobrazím komponentu pro textové vstupní pole
$html .= "<input type='text' name='".$this->htmlName."[weight]' size='4' value='".$value."' />";

// zobrazím komponentu pro výběr měrné jednotky
$html .= "<select name='".$this->htmlName."[unit]' value='".$value."' >";
$html .= "<option value='g' ".($unit == "g" ? "selected='selected'" : "").">g</option>";
$html .= "<option value='kg' ".($unit == "kg" ? "selected='selected'" : "").">kg</option>";
$html .= "<option value='t' ".($unit == "t" ? "selected='selected'" : "").">t</option>";
$html .= "</select>";

return($html);
V kódu používáme $this->name a $this->htmlName, tedy výchozí proměnné komponenty, abychom nemuseli při změně jména pole upravovat všechny zdrojové kódy událostí. Po uložení této události se v administraci záznamu tabulky, kam jste tuto komponentu vložili, zobrazí následující komponenta:


Kód pro správné uložení hodnoty do databáze

Vkládané hodnoty jsou z formuláře zasílány najednou jako pole s klíči weight a unit, a proto potřebujeme událost onGetDBValue, která nám tyto hodnoty rozdělí, správně přepočítá na společnou jednotku kg a vrátí hodnotu, která má být následně uložena do databáze:
$value = $beforeRecordValues[$this->name];

if (is_array($value)) // jde o pole, tedy odesláno z administrace
{
	$unit = $value["unit"];
	$weight = $value["weight"];

	if ($unit == "g")
		$weight /= 1000;
	else if ($unit == "t")
		$weight *= 1000;
		
	return($weight);
}
else // nejde o pole, ale hodnotu nechceme ztratit - typicky jde o volání metod insertRecord, updateRecord objektu Table a jiné situace
{
        return($value);
}

Zobrazení hodnoty v přehledu administrace a na www

Poslední nám zbývá už jen samotné zobrazení na webu pomocí šablony. Pokud do šablony vložíte [weight], volá se právě metoda onGetDisplayValue. Protože jsme použili komponentu READONLY, zobrazí se nám nyní hodnota uložená v databázi, tedy hodnota v kilogramech bez uvedení jednotky - tedy pouze desetinné číslo. Abychom mohli zobrazit hodnotu v g, kg a t i s těmito jednotkami, použijeme událost onGetDisplayValue:
// prevedu jednotky z kg na g, kg, t
$value = $recordValues[$this->name];
if ($value < 1)
{
	$unit = "g";
	$value *= 1000;
}
else if ($value >= 1000)
{
	$unit = "t";
	$value /= 1000;
}
else
{
	$unit = "kg";
}

return($value." ".$unit);

Po zadání různých hodnot (400g, 2.6kg, 3t) se pak pomocí této události zobrazí v přehledu následující:



Související články



UPOZORNĚNÍ

Některé vlastnosti publikované v tomto článku mohou být funkční pouze s nejnovější verzí jádra. Pokud máte starší verzi jádra, doporučujeme provést aktualizaci na nejnovější verzi.

Přihlášení
Vyzkoušejte zdarma

na dobu 30 dní
Aktuální verze jádra
Single Developer 1.7.9.680
20.leden 2012

Professional 1.7.9.680
20.leden 2012

Enterprise 1.7.9.680
20.leden 2012


Příručka pro vývojáře
Developer Guide 1.0.5
10.červenec 2009 09:36:42

Příručka pro administrátory
Administrator Guide 1.0.24
27.srpen 2010 11:58:08

Instalační skript
install.php 1.9.22
12.duben 2012 18:02:40

Novinky v příští verzi
nová událost onGetFilterSQL() pro pole tabulky umožňující nastavit vlastní SQL filtrace
Více ...

rss.gif
Podpora

Fotogalerie 10.5.2012
Sekce: Tvorba prezentací
Chyba v hromadné korespondenci, nelze odeslat příloha (nová verze 6.4.2012
Sekce: Bug reporty
AntiSpam obrázek 6.4.2012
Sekce: Programování
Chyba při opravách textů 4.4.2012
Sekce: Bug reporty
Admin může smazat Developera, je to ok? 27.3.2012
Sekce: Bug reporty
Mapa webu 19.3.2012
Sekce: Tvorba prezentací


rss.gif
Aktuality

Update komponenty Weather
18.listopad 2011
Server weather.com se rozhodl ukončit poskytování informací o počasí zdarma a přešel na placenou variantu (cca 60$ měsíčně). Z tohoto důvodu jsme byli nuceni upravit komponentu Weather tak, aby stahovala informace o počasí z jiného zdroje dat a to konkrétně ze serveru www.worldweatheronline.com. Tento server také poskytuje informace o počasí z celého světa, nicméně množství informací je oproti původnímu zdroji menší.

Ke správné funkčnosti komponenty počasí aktualizujte jádro na verzi 1.7.9.638.
Přidány nové návody
4.říjen 2011
Byl přidán nový návod "Použití jiného HTML editoru"
Powered by Visual PHP ™
© 2008 - 2010 E-VISION International, s.r.o.
O produktu | Technická podpora | Verze | Videoukázky | Manuály | Nabídka práce | Kontakt