Oznámení

Provoz fóra byl ukončen

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