Oznámení
Klonování objektu
před 12 lety
- Podhy
- Člen | 5
Zdravím,
nevím proč ale nefunguje mi klonování objektu Texy.
chtěl bych udělat něco ve stylu
$texy = new Texy();
$klon = clone $texy;
$klon->safeMode();
$klon->process('nejakej text');
ale to nefunguje
Editoval Podhy (20. 4. 2007 16:15)
před 12 lety
- David Grudl
- Nette Core | 6806
Objekt $texy má pod sebou další podobjekty (např. moduly), tedy vytváří složitější strukturu. Takhle jednoduše se proto klonovat nedá.
před 12 lety
- Podhy
- Člen | 5
vím vím taky jsem si toho všiml…předpokládám že bych musel takhle všechny třídy rozšířit o metodu __clone() viď? a nebo leda že by si tam tu funkčnost doplnil ty :)
jen doplním proč to potřebuju:
vytvářím ve stránce(řekně někdo v hlavním souboru) jeden objekt Texy()
no a v dalších souborech tý stránky potřebuju mít několik instancí
s několika různýma nastaveníma vůči hlavnímu nastavení Texy a nenapadá
mě nic lehčího než použít clone
před 12 lety
- Gringo
- Člen | 32
A co takhle udělat si funkci, které by se předhodilo sexy-texy a ona by doplnila ono hlavní nastavení, a pak by se udělaly jenom ty změny nastavení rozdílné oproti hlavnímu?
před 12 lety
- Podhy
- Člen | 5
to mi přijde jak dost šílený přehýbání :) ale díky za nápad…zatím to řeším jen vytvořením novýho objektu a novým nastavením(což je malinko otravný ale přežít se to dá)
možná spíš podědím třídu texy a tu rozšířím o základní nastavení rovnou a bude po ptákách
před 12 lety
- David Grudl
- Nette Core | 6806
ad gringo:
Ano, to je dobrý postup. Přesně tak fungují dva předpřipravené konfigurátory $texy->safeMode a $texy->trustMode. Jejich úkolem taky není nic jiného, než upravit konfiguraci konkrétního objektu $texy podle určitých požadavků.
před 12 lety
- Podhy
- Člen | 5
já jsem pochopil že má namysli udělat globální funkci který jako parametr předám texy a tam si udělám vždycky nový nastavení
safeMode a trustMode fungujou ovšem jinak :)(teda de o úhel pohledu)
já ovšem potřebuju mít víc instancí se stejným základním nastavení(to nastavuju pomocí safeMode) ale pak si ještě každou instanci potřebuju upravit trochu jinak třeba pro komentáře pro běžný uživatele zakázat téměř všechno ale třeba pro mě jako pro admina povolit všechno atd.
Editoval Podhy (26. 4. 2007 9:03)
před 12 lety
- David Grudl
- Nette Core | 6806
Ano, bavíme se stále o tomtéž. Safemode() vypadá takto:
function safeMode($texy)
{
$texy->allowedClasses = Texy::NONE;
$texy->allowedStyles = Texy::NONE;
$texy->allowedTags = array(
'a' => array('href', 'title'),
'acronym' => array('title'),
'b' => array(),
'br' => array(),
'cite' => array(),
'code' => array(),
'em' => array(),
'i' => array(),
'strong' => array(),
'sub' => array(),
'sup' => array(),
'q' => array(),
'small' => array(),
);
$texy->urlSchemeFilters['a'] = '#https?:|ftp:|mailto:#A';
$texy->urlSchemeFilters['i'] = '#https?:#A';
$texy->urlSchemeFilters['c'] = '#http:#A';
$texy->allowed['image'] = FALSE;
$texy->allowed['link/definition'] = FALSE;
$texy->allowed['html/comment'] = FALSE;
$texy->allowed['section'] = FALSE;
$texy->linkModule->forceNoFollow = TRUE;
}
Jen jen (kvůli pohodlí) součást třídy Texy, takže místo
$texy
používá $this
. Z hlediska čistoty kódu by
tam ale neměla být. A tak mě napadá, že ji možná i vyšoupnu, když tak
o tom přemýšlím…
před 12 lety
- David Grudl
- Nette Core | 6806
No, tak jsem tu změnu udělal. SafeMode je vyšoupnuto mimo třídu Texy.
Namísto $texy->safeMode()
nyní používejte
TexyConfigurator::safeMode($texy)
.
A ke klonování: jelikož klonovat $texy je skutečně problém, vyskočí při pokusu o klonování chybová hláška.
před 12 lety
- Podhy
- Člen | 5
s tím klonováním si zkusím pohrát a když na to nějak inteligentně přijdu tak tady nastíním jak jinak to oddělení safeMode() do konfigurátoru je skvělý :) není nad čistčí kód