[addon webloader] Extras/webloader

MartinitCZ
Člen | 580
+
0
-

@Honza Marek: To mě ještě taky ne. Bohužel jsem ani nenalezl řešení. :/

Jinak když se toto stane, tak apache errorlog zaspamovává tato chyba:

Parent: child process exited with status 255 -- Restarting.

V event viewer (eventvwr.msc → Protokol systému windows → Aplikace) je tento error:

Název chybující aplikace: httpd.exe, verze: 2.4.3.0, časové razítko: 0x502f70a3
Název chybujícího modulu: php5ts.dll, verze: 5.4.11.0, časové razítko: 0x50f71257
Kód výjimky: 0xc00000fd
Posun chyby: 0x0003b312
ID chybujícího procesu: 0x17d0
Čas spuštění chybující aplikace: 0x01cdfcb7c61db15f
Cesta k chybující aplikaci: C:\Wamp\Bin\Apache\bin\httpd.exe
Cesta k chybujícímu modulu: C:\Wamp\Bin\php\php5ts.dll
ID zprávy: 04ef0581-68ab-11e2-8151-083e8ea7eb86

Zkusil jsem vše přinstalovat, ale je to stále stejné. :/

Editoval martinit (27. 1. 2013 19:08)

enumag
Člen | 2118
+
0
-

Tohle je trochu long-shot, ale zkusils přidat složku s php5ts.dll do PATH?

Michalek
Člen | 210
+
0
-

Když vygooglím ten svůj error kód, najde to pár věcí.

Číslama to i odpovídá, dál jsem to neřešil, páč přes to moje pole to nedělá.

Note, however, that this can have some drawbacks if you are using a database with connection limits that are exceeded by persistent child connections. If your database has a limit of 16 simultaneous connections, and in the course of a busy server session, 17 child threads attempt to connect, one will not be able to. If there are bugs in your scripts which do not allow the connections to shut down (such as infinite loops), the database with only 16 connections may be rapidly swamped

Nezkoumal jsem, kde se to může stávat, jestli je to už na straně nette a přístup k souborům na serveru, přes safe://, nebo jestli to vzniká až někde ve webloaderu, nebo je to na straně xamppu nebo php…

Editoval Michalek (27. 1. 2013 19:34)

MartinitCZ
Člen | 580
+
0
-

@**enumag**: To mám :)

Řešením je, toto přidat do apache konfigurace, alespon mě to funguje.

<IfModule mpm_winnt_module>
  ThreadStackSize 8388608
</IfModule>
JakubJarabica
Gold Partner | 184
+
0
-

Nový Webloader je paráda, vďaka! Len ma štve Packagist, že sa tam ešte neprejavil ten začlenený pull request s možnosťou vypnutia kontroly aktualizácie času zdrojových súborov.

Každopádne CSSmin s Twitter Boostrapom nefunguje – problém mu robia media queries a @keyframes. Našiel som toto: http://www.catswhocode.com/…es-using-php a tam metódu The Reinhold Weber method, ktorá je primitívna a robí to čo má.

Jan Mikeš
Člen | 771
+
0
-

Libi se mi zpusob pouziti jaky je uvedeny na githubu pomoci extension: https://github.com/…ek/WebLoader

Nemuzu ale prijit na to, jak pouzit filtry pro less a minify pres config stejne jak je tam wlCssFilter, muzete nekdo poradit?

A dalsi otazka, co je lepsi/cistejsi zpusob? Vytvorit si compiler v configu a pak se na nej jen odkazat v tovarnicce na komponentu, nebo vse definovat v tovarnicce (viz 1. priklad na githubu)?

Predem diky za rady.

Honza Marek
Člen | 1664
+
0
-

Je potřeba vytvořit třídu s magickou metodou __invoke, pak jsou její objekty spustitelné jako funkce nebo callback a jdou zaregistrovat jako filtr.

class CssMinFilter
{

	public function __invoke($code)
	{
		return cssmin::minify($code, "remove-last-semicolon");
	}

}

Lepší je určitě vytvořit si compiler v configu.

Jan Mikeš
Člen | 771
+
0
-

Takze config by pak mohl vypadat takto?

services:
   wlCssFilter: WebLoader\Filter\CssUrlsFilter(%wwwDir%)
   cssMinFilter: CssMinFilter
   lessFilter: LessFilter

webloader:
    css:
        default:
            files:
                - style.css
                - {files: ["*.css", "*.less"], from: %appDir%/presenters} # Nette\Utils\Finder support
            filters:
                - @wlCssFilter
                - @cssMinFilter
                - @lessFilter

A webloader se postara sam o predani $code do filtru?

Edit: jeste me napada, neni zbytecne vytvaret service kdyz ten filtr nikde nez v CSS loaderu nepouziju? Neslo by to i takto?:

filters:
    - @wlCssFilter #nazev service
    - CssMinFilter #nazev tridy
    - LessFilter #nazev tridy

Edit 2: Tak uz mi to frci :) prvni ukazka v tomhle prispevku funguje, druha ne, protoze jsem prisel na to ze tridy se musi instancovat a ne volat staticky.

Editoval Lexi (8. 2. 2013 15:22)

Jan Mikeš
Člen | 771
+
0
-

Dale bych se rad zeptal, jestli se da nejakym zpusobem extension zaregistrovat i jako service, abych si jej pak mohl injectnout do basepresenteru a vyhnout se tim pouziti $this->context->webloader … nebo je to v tomto pripade v poradku?

Vsude je totiz momentalne vtloukano do hlavy vyhnout se contextu a vse injectovat :)

Honza Marek
Člen | 1664
+
0
-

Zajímavý dotaz. Určitě jednoduše použít inject nejde, protože webloader extension vytváří více služeb, které mají stejnou třídu. Takže nefunguje autowiring. Pokud jde do presenteru bez úpravy presenter factory procpat služba bez autowiringu, tak by se šlo obejít bez contextu, ale mám obavu že to nejde.

Jan Mikeš
Člen | 771
+
0
-

A obalit to do „jedne velke sluzby“ by neslo? Snazim se contextu porad nejak vyhnout, ale pokud to nejde smirim se s tim :).

Kazdopadne musim pochvalit za skvele odvedenou praci, hodne sikovny addon.

Ivorius
Nette Blogger | 119
+
0
-

Zkusil jsem nastavit webloader dle https://github.com/…ek/WebLoader#… do master verze nette. Bohužel při zavolání $this->context->webloader u továrničky createComponentCss mi nette vyhodí

Nette\DI\MissingServiceException
Service 'webloader' not found.

Přitom v systemcontaineru nějaké služby jsou:

webloader.cssAdminCompiler no WebLoader\Compiler
webloader.cssAdminFiles no WebLoader\FileCollection
webloader.cssFrontCompiler no WebLoader\Compiler
webloader.cssFrontFiles no WebLoader\FileCollection
webloader.cssNamingConvention no WebLoader\DefaultOutputNamingConvention
webloader.jsAdminCompiler no WebLoader\Compiler
webloader.jsAdminFiles no WebLoader\FileCollection
webloader.jsFrontCompiler no WebLoader\Compiler
webloader.jsFrontFiles no WebLoader\FileCollection
webloader.jsNamingConvention no WebLoader\DefaultOutputNamingConvention
wlCssFilter yes WebLoader\Filter\CssUrlsFilter

Jan Mikeš
Člen | 771
+
0
-

Nechybi ti v bootstrapu

$webloaderExtension = new \WebLoader\Nette\Extension();
$webloaderExtension->install($configurator);

?

Ivorius
Nette Blogger | 119
+
0
-

Nene, v bootstrapu to mám, tedy doufám že je to ve správném pořadí:

$configurator->addConfig(__DIR__ . '/config/config.neon');

$configurator->onCompile[] = function ($configurator, $compiler) {
			$compiler->addExtension('dibi', new DibiNetteExtension);
		};

//Webloader
$webloaderExtension = new \WebLoader\Nette\Extension();
$webloaderExtension->install($configurator);

$container = $configurator->createContainer();

Ono to i nějaké ty service vytvoří, ale nevím jestli bych to v tom basePresenteru neměl zapsat nějak jinak:

	protected function createComponentCss() {
		return new \WebLoader\Nette\CssLoader(
				$this->context->webloader->cssFrontCompiler, // service generated by extension
				$this->template->basePath . '/webtemp'
		);
	}

protože to zdechá na tom $this->context->webloader

Filip Procházka
Moderator | 4668
+
+1
-

V masteru byla zrušena podpora NetteAccessorů, musíš takto

	/**
	 * @return WebLoader\Nette\CssLoader
	 */
	public function createComponentCss()
	{
		$compiler = $this->context->getService('webloader.cssDefaultCompiler');
		/** @var \WebLoader\Compiler $compiler */
		return new \WebLoader\Nette\CssLoader($compiler, $this->template->basePath . '/webtemp');
	}



	/**
	 * @return WebLoader\Nette\JavaScriptLoader
	 */
	public function createComponentJs()
	{
		$compiler = $this->context->getService('webloader.jsDefaultCompiler');
		/** @var \WebLoader\Compiler $compiler */
		return new \WebLoader\Nette\JavaScriptLoader($compiler, $this->template->basePath . '/webtemp');
	}
Honza Marek
Člen | 1664
+
0
-

uf, zrušený accessory? proč zas?

Jack06
Člen | 168
+
0
-

No já nevím, ale když si vypíšu container, tak tam mám následující:

webloader => array(4) {
      jsDefaults => array(8) {
         sourceDir => "C:/Program Files (x86)/VertrigoServ/www/myps/www/js" (51)
         tempDir => "C:/Program Files (x86)/VertrigoServ/www/myps/www/webtemp" (56)
         tempPath => "webtemp" (7)
         files => array(0)
         remoteFiles => array(0)
         filters => array(0)
         fileFilters => array(0)
         namingConvention => "@webloader.jsNamingConvention" (29)
      }
      cssDefaults => array(8) {
         sourceDir => "C:/Program Files (x86)/VertrigoServ/www/myps/www/css" (52)
         tempDir => "C:/Program Files (x86)/VertrigoServ/www/myps/www/webtemp" (56)
         tempPath => "webtemp" (7)
         files => array(0)
         remoteFiles => array(0)
         filters => array(0)
         fileFilters => array(0)
         namingConvention => "@webloader.cssNamingConvention" (30)
      }
      js => array(0)
      css => array(0)
   }

a padá mi to stále na: Service ‚webloader.cssDefaultCompiler‘ not found. Registruji si to přímo v Configuratoru:

protected function createCompiler() {
    $this->compiler = parent::createCompiler();
    $this->compiler->addExtension('webloader', new \WebLoader\Nette\Extension);
    return $this->compiler;
}
jannemec
Člen | 78
+
0
-

media zadaná přes šablonu
Kdysi se tu objevila varianta s možností zápisu
{control css ‚web/screen.css‘=>‚screen,projection,tv‘, ‚web/print.css‘=>‚print‘}
Myslím, že to nebyl špatný nápad a docela by se to hodilo … už to je pasé, nebo je nějaká varianta podobného zápisu?

JN

stefi023
Člen | 71
+
0
-

Ahoj, chtel jsem se zeptat, zda, pripadne jak, mate vyresene nasledujici:

Pouzivam less filtr, v less souborech pouziju @import direktivu pro nacteni dalsiho souboru. Kdyz ale v takto importovanem souboru neco zmenim, Webloader to samozrejme nepozna, protoze kontroluje pouze zmeny na definovane kolekci souboru… CSS se tudiz v dev modu nezkompiluje znovu.

Da se to nejak rozumne vyresit bez velkeho zasahu do Webloaderu?

Diky

Honza Marek
Člen | 1664
+
0
-

Vyřešené to není. Dá se jedině buď po změně smazat vygenerované css soubory nebo místo lessového importu načítat více less souborů přímo webloaderem.

Co se týče případné úpravy WebLoaderu, nejjednodušší by bylo přidat volbu pro generování css souboru při každém requestu, která by mohla být na devu zaplá.

stefi023
Člen | 71
+
0
-

Diky za info.

Mazat se mi to rucne samozrejme nechce a rad bych vyuzil to vkladani primo lessem. Ale asi tam mozna narazim na problem s cestama v URL, ze? – budou asi potreba zadavat relativne k tomu hlavnimu souboru, nebo to ma sam osobe less vyresene? Jeste jsem to nezkousel, s lessem zacinam…

Az me to zacne vytacet a nebude jineho zbyti pripravim pull na tu konfiguracni volbu :)

Filip111
Člen | 244
+
0
-

Ahoj, potřeboval bych poradit, jak použít wl v kompoentě. Moje představa je taková, že mám komponentu v samostatném adresáři, v ní je adresář public a v něm js, css apod.

V šabloně komponenty bych pak chtěl použít např {control js 'public/nejakyscript.js'}

Mám zprovozněný webloader jako extension, konstruktorem si ho předám do komponenty kde budu mít továrničku například.:

public function createComponentJs() {
	// return $this->webloader->
}

Netuším ale co by měla vrátit, případně jak teď v té továrničce přidám ještě vlastní js soubory.
Případně jak používáte wl v komponentách vy? Všude se tu píše jen o presenterech nebo jsem našel továrny, kde vytvoří JavaScriptLoader, ale nikde jsem neviděl použití v komponentě.

Díky.

Honza Marek
Člen | 1664
+
0
-

Kvůli ušetření počtu HTTP dotazů a kešování je většinou výhodné načítat pro celý web všechny styly najednou, i když se použijí třeba jen na některých podstránkách. Což je typický příklad komponent. Je tedy nutné zařídit, aby se styly komponent dostaly do spojeného CSS.

Pokud jsou všechny komponenty v jedné složce, tak by třeba šlo zkusit něco takového:

webloader:
    css:
        default:
            files:
                - styl1.css
                - {files: "*.css", from: %appDir%/controls} # načte všechny css soubory z controls a podadresářů
Filip111
Člen | 244
+
0
-

Asi bych to mohl použít jak popisuješ, ale spousta css a js se budou tahat naprosto zbytečně. Mám CMS se spoustou komponent a většina z nich má vlastní scripty, případně css.
Na webu, kde se CMS použije je ale použita třeba jen jedna z 30-ti komponent, tedy je naprosto zbytečné tahat ostatní soubory.
A nechci definovat u každého webu zvlášť css,js soubory, které má webloader zpracovávat. Přijde mi čistší nadefinovat továrničky komponent v neonu a o nějaké css,js se vůbec nestarat.

dada-amater
Bronze Partner | 52
+
0
-

Ahoj,

mam problem s CssUrlsFilter.php, haze mi chyby. Problem je, ze v Compiler.php se ve funkci

call_user_func($filter, $file_content, $this)

vola konstruktor a nepredava se mu treti parametr $file. Ten sice muze byt null, ale pak to rve ve funkci
\WebLoader\Path::normalize(…);

Upravil jsem tedy puvodni kod:

	public function getContent(array $files = null)
	{
		if ($files === null) {
			$files = $this->collection->getFiles();
		}

		// load content
		$content = '';
		foreach ($files as $file) {
			$content .= PHP_EOL . $this->loadFile($file);
		}

		// apply filters
		foreach ($this->filters as $filter) {
			$content = call_user_func($filter, $content, $this);
		}

		return $content;
	}

na

	public function getContent(array $files = null)
	{
		if ($files === null) {
			$files = $this->collection->getFiles();
		}

		// load content
		$content = '';
		foreach ($files as $file) {
			$file_content = PHP_EOL . $this->loadFile($file);
			// apply filters for each file
			foreach ($this->filters as $filter) {
				$file_content = call_user_func($filter, $file_content, $this, $file);
			}
			$content .= $file_content;
		}

		return $content;
	}

a vse uz funguje spravne. Filtr se zavola na kazdy soubor zvlast a ne na ten spojeny obsah. Dejte mi vedet, pokud jsem neco udelal spatne a kvuli tomu mi to nefungovalo.

Honza Marek
Člen | 1664
+
0
-

Ve WebLoaderu jsou dva typy filtrů – filters a fileFilters. FileFilters se volají na každý soubor zvlášť. CssUrlsFilter je tedy potřeba registrovat jako fileFilter.

dada-amater
Bronze Partner | 52
+
0
-

Diky Honzo. Pak je treba opravit navod na GITu . Diky za peknou komponentu.

Ondřej Altman
Člen | 17
+
0
-

Zdravím,

díky za supr komponentu. Teď jsem narazil na takový problém a nemůžu přijít na to jak to vyřešit.

Mám soubory:

app\FrontModule\less\first.less

@import "../../theme"

p {
	...
}

app\AdminModule\less\second.less

@import "../../theme"

h1 {
	...
}

app\theme.less

@import "../libs/twitter/bootstrap/less/bootsrap"

.hero-unit {
	...
}

libs\twitter\bootstrap\less\bootstrap.less

Co chci udělat je, že v theme.less naimportuju Bootstrap a přepíšu nějaké hodnoty. V souborech first.less a second.less pak chci importovat theme.less a používat proměnné z něj. Jenže narážím na problém. Pokud to takhle zapíšu a v configu dám, že chci kompilovat first.less a second.less, tak mi to zkompiluje bootstrap dvakrát. Což u takhle velké knihovny bolí.

Jak tohle řešíte vy?

Honza Marek
Člen | 1664
+
0
-

Doporučil bych v importovaných souborech používat pouze proměnné a bootstrap pak vložit zvlášť v configu, ne přes import.

mrtnzlml
Člen | 140
+
0
-

Ahoj,
zkoušel někdo tento dobře vypadající addon na dev Nette?
Podle composer.json vyžaduje stabilní verzi 2.0.* a to podle packagist i pro dev verzi webloaderu.
Případně plánujete podporu i pro Nette 2.1.*?

Honza Marek
Člen | 1664
+
0
-

Nastavil jsem v composeru verzi Nette na ~2.0. To by snad v budoucnu mělo fungovat s jakýmkoliv Nette menším než 3.0.

Jan Mikeš
Člen | 771
+
0
-

Zdravim, chtel bych pouzivat nezkompilovane .less soubory TB, tak abych v mem screen.less mohl pouzivat mixins a classy z bootstrapu, nejak takhle:

@import 'bootstrap/bootstrap.less';
.someObject {
	.pull-right;
	.text-center;
	.well;
}

Nejak se mi ale nedari. Jaky pro toto pouzivate postup vy? Mam kompilovat vsechny soubory less, nebo pouze screen.less?

Pouzivam adresarovou strukturu:

CSS/screen.less
CSS/bootstrap/bootstrap.less
CSS/bootstrap/xxx.less

Webloader mam v bootstrap.php zaregistrovany jako extension

	webloader:
		css:
			default:
				remoteFiles:
					- 'xxx'
				files:
					- {files: ["*.css", "*.less"], exclude: "*print*", from: %wwwDir%/css}
				filters:
					- @wlCssFilter
				fileFilters:
					- @lessFilter

Zkousel jsem u files menit „from“ na „in“ aby finder neprochazel rekurzivne vsechny slozky, ale pouze screen.less

Tovarnicka:

	// $this->webloader = $this->context->webloader;
	public function createComponentCss(){
		return new \WebLoader\Nette\CssLoader(
			$this->webloader->cssDefaultCompiler,
			$this->template->basePath . '/webtemp'
		);
	}

Predem diky za vase rady jak na to.

Editoval Lexi (15. 7. 2013 12:58)

sinner
Člen | 20
+
0
-

Ahoj,
v configu mám vytvořený service, v BasePresenteru mám vytvořenou kompomentu (nemá v sobě zatim žádné soubory) a všechny soubory mám v hlavní šabloně @layout.latte pomocí {control css „skript.css“}.

Chtěl bych se zeptat zdali je možné v presenteru dodatečně dodefinovat nějaké další soubory popřípadě nějak controlku oddědit např. v default.latte

Snažím se udělat pro každý presenter jinou sadu css/js souborů, abych je neměl všechny na jedné hromadě.
Děkuji.

Jan Mikeš
Člen | 771
+
0
-

Nikdo nevi jak na ten TB s less? :)

2bfree
Člen | 248
+
0
-

Zkusil jsem rozchodit webloader podle návodu z GITu přes extension a narazil jsem na zvlášnost.
Přes extension je možné nastavit parametr „tempPath“, ale v presenteru kde registruji komponentu musím uvést jako druhý parametr CssLoader::_construct() respektive předka Webloader::_construct(), čímž tuto direktivu přepíšu.

Zkusil jsem tedy v tomto místě vytáhnout nastavení z configu, ale nedostal jsem se k přehlednějšímu způsobu získání tohoto nastavení než:

	public function createComponentCss()
	{
		$webloader = $this->getContext()->webloader;
		$cssLoader = new \WebLoader\Nette\CssLoader(
				$webloader->cssDefaultCompiler, // service generated by extension
				(isset($webloader->parameters['css']['default']['tempPath']) ? $webloader->parameters['css']['default']['tempPath'] : $webloader->parameters['cssDefaults']['tempPath'])
		);
		return $cssLoader;
	}

Editoval 2bfree (9. 8. 2013 15:20)

Siam
Člen | 54
+
0
-

Dobrý den,
mohl bych se prosím vás zeptat, jestli je nějak možné používat filtry jenom pro určité soubory?

Honza Marek
Člen | 1664
+
0
-

Pokud je filtr nastaven jako fileFilter místo filter, tak dostane ve třetím parametru cestu k souboru. Podle toho se pak dá určit, jestli filtr má být aplikován nebo ne.

Siam
Člen | 54
+
0
-

Díky Honzo. Prosím tě, nemohl by jsi mi napsat přesněji, jak se používá ten fileFilter? Já vůbec netuším jaký třetí argument, když u normálního filtru používám jenom jeden. Zkoušel jsem to neúspěšně třeba takto:

public function createComponentCss()
{
	$files = new \WebLoader\FileCollection(__DIR__ . '/../../www/css');
	$files->addFiles(array(
		'bootstrap.min.css',
 		'lightview.css',
		'screen.css'
	));

	$compiler = \WebLoader\Compiler::createCssCompiler($files, __DIR__ . '/../../www/webtemp');

	$compiler->addFileFilter(array('lightview.css', 'screen.css'), function ($code) {
     		return cssmin::minify($code);
	});

	return new \WebLoader\Nette\CssLoader($compiler, $this->template->basePath . '/webtemp');
	$control->setMedia('screen');

	return $control;
}
Honza Marek
Člen | 1664
+
0
-
$compiler->addFileFilter(function ($code, $compiler, $path) {
	if (in_array(basename($path), array('lightview.css', 'screen.css'))) {
		return cssmin::minify($code);
	} else {
		return $code;
	}
});
Siam
Člen | 54
+
0
-

Díky moc, funguje bezvadně.

MartinitCZ
Člen | 580
+
0
-

Jak používáte NetteExtension? Jde mi o to, že je super nadefinovat si hlavní soubory v neonu, ale nějak se mi nelíbí šahání na $this->context viz:

return new WebLoader\Nette\CssLoader(
	$this->context->getService('webloader.cssDefaultCompiler'),
	$this->template->basePath . '/webtemp'
);
Jan Suchánek
Člen | 404
+
0
-

@martinit: Vyrobil jsem si model \Model\Webloader (nevím zda se neblížím moc nějakému Service Locatoru, ale spravuje mi Front i Back a mohu mu přidat i jiné srandy) a vytvářím ho pomocí továrniček a má předané z Neonu závislosti:

Neon:

	frontWebloader:
		implement: Model\IFrontWebloader
		setup:
			- setCssCompiler(@webloader.cssFrontCompiler)
			- setJsCompiler(@webloader.jsFrontCompiler)

	backWebloader:
		implement: Model\IBackWebloader
		setup:
			- setCssCompiler(@webloader.cssBackCompiler)
			- setJsCompiler(@webloader.jsBackCompiler)

Webloader:

<?php

namespace Model;

use WebLoader\Nette\CssLoader;
use WebLoader\Nette\JavaScriptLoader;

class Webloader extends \Nette\Object
{
    private $jsCompiler;
    private $cssCompiler;

    public function setJsCompiler($jsCompiler){
        $this->jsCompiler = $jsCompiler;
    }

    public function setCssCompiler($cssCompiler){
        $this->cssCompiler = $cssCompiler;
    }

    public function getCss($path)
    {
        return new CssLoader($this->cssCompiler, $path);
    }

    public function getJs($path)
    {
        return new JavaScriptLoader($this->jsCompiler, $path);
    }
}

interface IFrontWebloader
{
    /** @return \Model\Webloader */
    function create();
}

interface IBackWebloader
{
    /** @return \Model\Webloader */
    function create();
}

:)
Je to Good practice || Bad practice?

MartinitCZ
Člen | 580
+
0
-

@**jenicek**: Když to je moc psaní :) V jednom projektu mám 6 různých webloaderů (velmi rodílná css i js pro stránky/moduly) a to bych se upsal.
Já bych si to představoval nějak takto:

/** @var Webloader\Nette\Instances @inject */
public $wlInstances;

protected function createComponentCss()
{
	return new WebLoader\Nette\CssLoader(
		$this->wlInstaces->cssDefaultCompiler,
		$this->template->basePath . '/webtemp'
	);
}

Tzv. třída Webloader\Nette\Instances bude vracet object compilerů :)

Editoval martinit (14. 11. 2013 12:28)

Jan Suchánek
Člen | 404
+
0
-

@martinit:
Ach jo, ale já měl dojem, že to tak přesně mám. Mohu použít i 6 webloaderu nebo 10 a vše definuju jen v neonu a předávam přez jediný objekt, který si továrničkou vyrobím $webloader->create();.

Tohle mam jen v Presentru a dalo by se to definovat i podle modulu, tak aby se psaní ještě více zkrátilo.

Namespace by se mohl menovat /** @var Webloader\Nette\Instances */ ale injecotval by se pomoci Interface

Edit: toto je příklad jen pro Front to samé stačí použít i pro Backend či další stov… podobných, a možná si je pak můžeš i doplňovat, možná by stálo za úvahu vyhodit i ten self::WEBTEMP a přenechat ho objektu, který jsi pojmenoval Webloader\Nette\Instances a já ho pojmenovávám Model\Webloader

Front\DefaultPresenter:

	public function injectWebloader(\Model\IFrontWebloader $webloader)
	{
		$this->webloader = $webloader->create();
	}

	/**
	 * @return \WebLoader\Nette\CssLoader
	 */
	protected function createComponentCss()
	{
		return $this->webloader->getCss($this->template->basePath . '/' . self::WEBTEMP);
	}

	/**
	 * @return \WebLoader\Nette\JavaScriptLoader
	 */
	protected function createComponentJs()
	{
		return $this->webloader->getJs($this->template->basePath . '/' . self::WEBTEMP);
	}

a v neonu mam toto:

factories:
	frontWebloader:
		implement: Model\IFrontWebloader
		setup:
			- addCssCompiler(@webloader.cssFrontCompiler)
			- addJsCompiler(@webloader.jsFrontCompiler)

	backWebloader:
		implement: Model\IBackWebloader
		setup:
			- addCssCompiler(@webloader.cssBackCompiler)
			- addJsCompiler(@webloader.jsBackCompiler)

webloader:
	css:
		back:
			remoteFiles:
				- %assets.bootstrap-css%
				- %assets.jquery-ui-smoothness%
			files:
				- back.css
		front:
			remoteFiles:
				- %assets.bootstrap-css%
				- %assets.jquery-ui-smoothness%
			files:
				- front.css
	js:
		back:
			remoteFiles:
				- %assets.jquery%
				- %assets.jquery-ui%
				- %assets.bootstrap-js%
			files:
				- %assets.netteforms%
				- %wwwDir%/js/nette.ajax.js/nette.ajax.js
				- %wwwDir%/js/nette.ajax.js/working.ajax.js
				- %wwwDir%/js/nette.ajax.js/confirm.ajax.js
				- %wwwDir%/js/back.js
		front:
			remoteFiles:
				- %assets.jquery%
			files:
				- %assets.netteforms%

Editoval jenicek (14. 11. 2013 12:47)

romiix.org
Člen | 343
+
0
-

Nebolo by jednoduchšie použiť doplnok Header, nadefinovať si balíčky v neon konfigurácií a v šablóne iba zavolať makro pack napr. {pack "Front"}, {pack "Back"}, …?

Jan Suchánek
Člen | 404
+
0
-

romiix.org: Asi ano, jen je to skoro totéž ne? Stejně v layoutu napíšu {control css} {control js} a nic víc.

Edit: na ten doplněk Header mrknu vypadá dost zajímavě.

Editoval jenicek (14. 11. 2013 12:53)

romiix.org
Člen | 343
+
0
-

jenicek napsal(a):

Ja som nereagoval na tvoj príspevok, ale na tie vyššie:) Keď som začal ten príspevok písať, tvoj tu ešte nebol;)

Jan Suchánek
Člen | 404
+
0
-

romiix.org: Aha tak to pardón. :)

Jan Suchánek
Člen | 404
+
0
-

@martinit: Btw jak tam dostaneš ty compilery?

MartinitCZ
Člen | 580
+
0
-

@**jenicek**: No to já právě nevim :) Zas tak dobře na tom s php nejsu. Nechce se mi šahat na $this->context, ale zároven nehci psát pro každou instanci interface.