Převod normální Nette verze na verzi prefixovanou

Upozornění: Tohle vlákno je hodně staré a informace nemusí být platné pro současné Nette.
pave.kucera
Člen | 122
+
0
-

Existuje na převod normální verze Nette do prefixované podoby nějaký nástroj? Snažím se použít DataGrid na mém webu, který ale jede na prefixovaném Nette, takže to samozřejmě nefunguje a kdyby šlo upravit zdroják DataGridu automaticky, bylo by to mnohem jednodušší, než přidávat k Nette třídám ,,N" :-).

Tomik
Nette Evangelist | 485
+
0
-

Pokud se nemýlím, tak tento DataGrid nepoužívá prefixed verzi – alespoň ta verze ze SVN – http://code.google.com/…te-datagrid/ (https://componette.org/search/?…).

pave.kucera
Člen | 122
+
0
-

Právě, nepoužívá a tam je zakopaný pes. Potřeboval bych ho upravit pro použití s prefixed verzí a ruční úpravy kódu se docela bojím.

Tomik
Nette Evangelist | 485
+
0
-

Takže abych tomu rozuměl: máš aplikaci napsanou v prefixed verzi a chceš v použít DG, který není prefixed? Tak to se obávám, že se opravdu budeš muset projít zdrojákama.

pave.kucera
Člen | 122
+
0
-

Takže žádný nástroj, který by zvládl přepsat názvy Nette tříd na prefixovanou verzi, neexistuje? :( Tak hurá do práce…

romansklenar
Člen | 655
+
0
-

Spíš bych zvolil druhou cestu (pokud to půjde):

compatibility.php

class Component extends NConponent {}
class Html extends NHtml {}
class Form extends NForm {}

// a tak dále ...
pave.kucera
Člen | 122
+
0
-

To není vůbec špatný nápad, díky! :-)

Ondřej Mirtes
Člen | 1536
+
0
-

romansklenar napsal(a):

Spíš bych zvolil druhou cestu (pokud to půjde):

compatibility.php

class Component extends NConponent {}
class Html extends NHtml {}
class Form extends NForm {}

// a tak dále ...

Dobrý nápad, ale vůbec to nebere v úvahu, proč prefixed verze Nette vznikla. Vždyť u třídy, jejíž název v daném prostředí už existuje (a není z Nette) to zařve, že ji nelze deklarovat znova.

Nebo jak jsi to myslel?

romansklenar
Člen | 655
+
0
-

To je právě to, co si musí ošéfovat (proto to „pokud to půjde“). Pokud je důvod proč používá prefixed verzi jen tento, tak to imho bez problémů půjde.

Honza Marek
Člen | 1664
+
0
-

Taky by bylo fajn, aby kolega nepotkal final třídu.

Ondřej Mirtes
Člen | 1536
+
0
-

Ty jo, ale bylo by to potřeba v PHP 5.2, v PHP 5.3 už můžu použít namespaces :o)

Honza Kuchař
Člen | 1662
+
0
-

Z komentářů na php.net :) (pro PHP 5.2)

<?php
if (!function_exists('class_alias')) {
    function class_alias($original, $alias) {
        eval('abstract class ' . $alias . ' extends ' . $original . ' {}');
    }
}
?>
Ondřej Mirtes
Člen | 1536
+
0
-

Komentář jsem přečetl a něco takového dělám ručně, ale nemůže to fungovat právě pro ty final třídy :)

David Grudl
Nette Core | 8228
+
0
-

Je fakt, že existence tří verzí je nepříjemnost komplikující život, hodilo by se šikovné řešení, ale žádné jiné než funkci class_alias neznám. Pokud použijete tento trik:

class Component extends NComponent {}
class Form extends NForm {}

Tak to může vést k těžko odhalitelným chybám:

$form = new Form; // formulář je komponenta, nicméně

echo $form instanceof Component // -> vrací FALSE!