[addon webloader] Extras/webloader

před 10 lety

Honza Marek
Člen | 1674
+
0
-

Diskuse ke stránce addons/Webloader


Diskuzní stránka komponenty WebLoader.

(opravený odkaz na stránku s addonom)

Editoval kravčo (14. 7. 2011 10:10)

před 10 lety

Ondřej Mirtes
Člen | 1539
+
0
-

Nešlo by do toho hashovaného názvu temp souboru zahrnout i změny cest? Když mám jednu aplikaci na dvou různých adresách a v jiných adresářových úrovních, tak mi funguje správně jen jedna (ta druhá špatně načte obrázky).

před 10 lety

Honza Marek
Člen | 1674
+
0
-

asi by to šlo

před 10 lety

Oggy
Člen | 314
+
0
-

jak se dá nastavit obsah atributu media ?

před 10 lety

Honza Marek
Člen | 1674
+
0
-
$komponenta->media = "print";

Třeba v továrničce.

před 10 lety

Honza Kuchař
Backer | 1650
+
0
-

Tak jsem sehnal funkční JS minifikátor: JSMin. (ten původn nějak nefungoval – rozbil JavaScript)
+ jsem sehnal funkční CSS minifikátor, ale musel jsem ho upravit, tak aby jel pod PHP 5.2.x

http://projekty.mujserver.net/…e%20my%20JS/
http://projekty.mujserver.net/…r/CssPacker/

před 10 lety

Honza Marek
Člen | 1674
+
0
-

Ten původní JS minifikátor vyžaduje všude středníky. Já už jsem se ale naučil psát tak, aby to prošlo.

před 10 lety

Honza Kuchař
Backer | 1650
+
0
-

Ten novej taky.

//EDIT: Kdyby někdo chtěl k tomu souboru připojit původní název, tak stačí přepsat tuhle metodu:

/**
 * Filename of generated file
 * @param array $files
 * @return string
 */
public function getGeneratedFilename(array $files = null)
{
    if ($files === null) {
        $files = $this->files;
    }
    $name = $this->generatedFileNamePrefix . md5(implode("|", $files) . $this->getLastModified($files));
    if(count($files)===1) $name .= "-" . String::webalize($files[0]);
    return $name;
}

Editoval honzakuchar (3. 10. 2009 12:57)

před 10 lety

Honza Marek
Člen | 1674
+
0
-

Fičura bude k dispozici v příští verzi.

Editoval Honza M. (3. 10. 2009 14:43)

před 10 lety

Matúš Matula
Backer | 236
+
0
-

planuje sa pridat podpora aj pre absolutne cesty k suborom? dajme tomu, ze chcem mat css aj js subory nejakej komponenty v 1 adresari pod /app/controls/ .

$this->presenter['smartJs']->addFile(dirname(__FILE__) . '/rating.js');

před 10 lety

Ondřej Mirtes
Člen | 1539
+
0
-

Matúš Matula napsal(a):

planuje sa pridat podpora aj pre absolutne cesty k suborom? dajme tomu, ze chcem mat css aj js subory nejakej komponenty v 1 adresari pod /app/controls/ .

$this->presenter['smartJs']->addFile(dirname(__FILE__) . '/rating.js');

Takhle to mám, stačí si tak nastavit sourcePath (a sourceUri nastavit stejnou jako tempUri).

před 10 lety

Honza Marek
Člen | 1674
+
0
-

Matúš Matula napsal(a):

planuje sa pridat podpora aj pre absolutne cesty k suborom?

Asi jo. Ale je tam takový problém, jak se chovat u přepisu url adres na absolutní v CSS souborech. Předpokládat umístění jakoby v source rootu? Nebo adresy nepřepisovat? Vždycky může nastat situace, kdy ten samý soubor přidaný relativně a absolutně se bude chovat jinak. To je potřeba vymyslet.

před 10 lety

Honza Marek
Člen | 1674
+
0
-

honzakuchar napsal(a):

Tak jsem sehnal funkční JS minifikátor: JSMin. (ten původn nějak nefungoval – rozbil JavaScript)

http://projekty.mujserver.net/…e%20my%20JS/

Ve čtimě.txt stačí instalace taková:

$js->filters[] = "JSMin::minify";
  • jsem sehnal funkční CSS minifikátor, ale musel jsem ho upravit, tak aby jel pod PHP 5.2.x

Tak teda ten CSSTidy mi rozbil celé CSS. To cssmin se chová mnohem slušněji!

před 10 lety

Honza Kuchař
Backer | 1650
+
0
-

zalezi na nastaveni. Mam to nastaveno a zadny problem.

před 10 lety

Honza Marek
Člen | 1674
+
0
-

Nastavil jsem to podle tvého čtimě.

před 10 lety

Honza Kuchař
Backer | 1650
+
0
-

aktualizoval jsem README

před 9 lety

hurvajs
Člen | 86
+
0
-

Zdravim, super věc, ale zajímalo by mě jestli je podporované pole jako parametr pro widget. V podstate nikdy nevím jaké CSS budu potřebovat načíst, takže bych mu předal jen pole se seznamem.

před 9 lety

Honza Marek
Člen | 1674
+
0
-

Vnitřně to jako pole funguje, takže by šlo určitě použít

{? $control["css"]->render($pole)}

místo

{control css $soubor1, $soubor2}

Nebo se to taky dá vyřešit postupným přidáváním souborů už v presenteru a do šablony dát jen

{control css}

před 9 lety

hurvajs
Člen | 86
+
0
-

Tohle funguje dekuji. Ale jeste mi to neparsuje sparvne jeden CSS soubor. Na metode absolutizeUrls mi to misto obsahu vraci null.

před 9 lety

hurvajs
Člen | 86
+
0
-

Tak vyreseno. Mel jsem chybu v CSS. Dekuji za pomoc :)

před 9 lety

Honza Kuchař
Backer | 1650
+
0
-

Ahoj, narazil jsem na takovou drobnost. V PHP 5.3 je deprecated ereg. tzn. prosím změnit řádek 27 v souboru CssLoader.php na

if (preg_match('/^([a-z]+:\/)?\//', $url)) return $url;

před 9 lety

mcmatak
Člen | 495
+
0
-

Myslíte, že neexistence stylu by měla shodit celou stránku?

před 9 lety

mcmatak
Člen | 495
+
0
-

viděl bych to spíš na tichou chybu zaslanou emailem, ale web jede dál

před 9 lety

pekelnik
Člen | 468
+
0
-

mcmatak napsal(a):

Myslíte, že neexistence stylu by měla shodit celou stránku?

co takhle podle prostředí:

V DEVELOPMENT prostředí shodit celou stránku
V PRODUCTION zapsat do logu a jet dál

:)

před 9 lety

Honza Kuchař
Backer | 1650
+
0
-

@pekelnik: souhlas, ale nedělal bych to natvrdo. Udělal bych to nějak takhle:

class WebLoader {
    /**
    * @type bool
    */
    var $throwExceptions;

    function __construct() {
        $this->throwExceptions = !Environment::isProduction();
    }
}

Editoval honzakuchar (25. 1. 2010 15:01)

před 9 lety

Honza Marek
Člen | 1674
+
0
-

pekelnik napsal(a):

mcmatak napsal(a):

Myslíte, že neexistence stylu by měla shodit celou stránku?

co takhle podle prostředí:

V DEVELOPMENT prostředí shodit celou stránku
V PRODUCTION zapsat do logu a jet dál

:)

Já tuhle skrytou závislost na prostředí nechci provozovat. Ale ve verzi z githubu už je možné nastavit, jestli se mají vyhazovat výjimky při nenalezení souboru.

// třeba takhle
$loader->throwExceptions = Environment::isProduction();

Možná by šla taková výjimka zachytit a prohnat přes Debug::processException, to musim zkusit. Potom by to ani nemuselo shodit celou stránku.

před 9 lety

mcmatak
Člen | 495
+
0
-
<?php
    /**
     * Add file
     * @param string $file filename
     */
    public function addFile($file)
    {
        if (in_array($file, $this->files)) {
            return;
        }

        if (!file_exists($this->sourcePath . "/" . $file)) {
            if ($this->throwExceptions) {
                if (Environment::isProduction()) {
                    Debug::processException(new FileNotFoundException("File '$this->sourcePath/$file' does not exist."));
                    return;
                } else {
                    throw new FileNotFoundException("File '$this->sourcePath/$file' does not exist.");
                }
            }
        }

        $this->files[] = $file;
        return true;
    }
?>

hmmm koukám, že už tě to ale taky nepadlo

Editoval mcmatak (25. 1. 2010 15:41)

před 9 lety

Honza Kuchař
Backer | 1650
+
0
-

Mno fajn, jak se tak dívám, tak přesně jak jsem si to představoval, tak WebLoader funguje. :-D

před 9 lety

iguana007
Člen | 990
+
0
-

pekelnik napsal(a):

mcmatak napsal(a):

Myslíte, že neexistence stylu by měla shodit celou stránku?

co takhle podle prostředí:

V DEVELOPMENT prostředí shodit celou stránku
V PRODUCTION zapsat do logu a jet dál

:)

Určitě souhlas … v production je to nesmysl. Já osobně někde načítám externí zdroje z několika míst (z důvodu optimalizace webu) – vetšinou domén a při dočasném výpadku jedné domény tj. absence jednoho z nich by se mi neměl shodit celý web.

před 9 lety

mcmatak
Člen | 495
+
0
-

pro kompresi css mne ještě nikdy nezklamalo tohle

<?php
    public function minifyCss($content)
    {
        $content = preg_replace('!/\*[^*]*\*+([^/][^*]*\*+)*/!', '', $content);// remove comments
        $content = str_replace(array("\r\n", "\r", "\n", "\t", '  '), '', $content);// remove tabs, spaces, newlines, etc.
        $content = str_replace('{ ', '{', $content);// remove unnecessary spaces.
        $content = str_replace(' }', '}', $content);
        $content = str_replace('; ', ';', $content);
        $content = str_replace(', ', ',', $content);
        $content = str_replace(' {', '{', $content);
        $content = str_replace('} ', '}', $content);
        $content = str_replace(': ', ':', $content);
        $content = str_replace(' ,', ',', $content);
        $content = str_replace(' ;', ';', $content);
        return $content;

    }
?>

před 9 lety

iguana007
Člen | 990
+
0
-

Mě nejde ani o kompresi (tu taky používám), ale spíše o to, že se načítá obsah z více zdrojů najednou …
více zde: http://developer.yahoo.com/…e/rules.html

Co se týče třeba jQuery apod. knihoven, načítám je přímo přes google apis, příjde mi to rozumnější a jistou mírou to i přispěje k rychlejšímu načtení stránky – http://code.google.com/…cumentation/

Editoval iguana007 (26. 1. 2010 13:23)

před 9 lety

mcmatak
Člen | 495
+
0
-

no tak sem si ten webloader trochu přepsal, kod asi budete považovat za prasacky nicméně pokusím se popsat funkčnost

kdyb to někoho zajímalo
https://github.com/matak/WebLoader

  1. to jestli se bude javascript minifikovat se nenastavuje na tovarnicku, ale primo ke kazdemu souboru,
  2. stejně tak pro css jsem potřeboval nastavovat typ media přímo k danému souboru,
  3. jo a ještě jsem potřeboval přidat funkci pro javascriptové bloky, právě pro případ že potřebuji něco takovéhho nastavit v presenteru

použití pak vypadá nějak takto

<?php

    /**
     * Add files
     *
     * Three ways how to set css files.
     *
     * 1. Media is not set, this type of files will be packed/minimized to file with media = screen,
     *
     *  {assign css=>
     *      array(
     *          'web/screen.css',
     *          'web/menu.css',
     *      )
     *  }
     *
     * 2. Media is set, files will be separated by media, there will be to much packs as much is types of media (every pack will be minimized),
     *
     *  {assign css=>
     *      array(
     *          'web/screen.css'=>'screen,projection,tv',
     *          'web/print.css'=>'print',
     *      )
     *  }
     *
     * 3. You can combine ways.
     *  {assign css=>
     *      array(
     *          'web/screen.css',
     *          'web/print.css'=>'print',
     *      )
     *  }
     *
     *      {$control['css']->addFiles($css)}
     *
     * At the end you can render all saved files with widget
     *
     *  {control css}
     *
     * Alternatively you can render files directly, the same result like the lines above is:
     *
     *  {control css 'web/screen.css'}
     *  {control css 'web/screen.css', 'web/menu.css'}
     *  {control css 'web/screen.css', 'web/print.css'=>'print'}
     *  {control css 'web/screen.css'=>'screen,projection,tv', 'web/print.css'=>'print'}
     *
     * But in this case you render files set only in render, not the before saved files from presenter etc.
     *
     * Adding of javascript files is similar, but if there is not set type of processing, there is automaticaly set default type COMPACT, actually it means compact without minimizing.
     *
     *  {assign js=>
     *      array(
     *          'datagrid.js',
     *          'mootools.nette.js',
     *      )
     *  }
     *
     *  {assign js=>
     *      array(
     *          'datagrid.js',
     *          'mootools.nette.js'=>JavaScriptLoader::MINIFY,
     *      )
     *  }
     *
     *  {$control['js']->addFiles($js)}
     *
     *  {control js}
     *
     *  {control js 'datagrid.js'}
     *  {control js 'datagrid.js', 'jquery.nette.js'}
     *  {control js 'datagrid.js', 'mootools.nette.js'=>JavaScriptLoader::MINIFY}
     *
     * @param array $files list of files
     */

?>

kritiku na to jak je to prasácky napsaný nebo to nepotřebujete a je to blbost stačí jednou větou, zbytečně rozšiřovat flame, já to tak používám už hodně dlouho akorát jsem to teď přepsal do webloader (takže asi jsem měl v minulosti k tomu důvod)

před 9 lety

romansklenar
Člen | 657
+
0
-

Nebylo by lepší udělat fork a až do něj zanést změny? Lépe by se to udržovalo a změny by byly patrné.

před 9 lety

Ondřej Mirtes
Člen | 1539
+
0
-

Souhlas, určitě na GitHubu udělat fork, ať je patrná vazba na původní WebLoader.

před 9 lety

mcmatak
Člen | 495
+
0
-

ok, souhlas, a jak to teď udělám? s gitem se moc nebavíme

před 9 lety

Honza Marek
Člen | 1674
+
0
-

Klikneš u mého webloaderu na githubu na tlačítko fork a je to. Předtím asi ale budeš muset smazat ten svuj repozitář, jmenuje se moc stejně.

před 9 lety

Ondřej Mirtes
Člen | 1539
+
0
-

Přejdeš na repozitář WebLoaderu a nahoře (na řádku janmarek / WebLoader) vpravo budeš mít tlačítko Fork.

před 9 lety

mcmatak
Člen | 495
+
0
-

tak snad je to tam

před 9 lety

Cifro
Člen | 245
+
0
-

Chcem upozorniť, že ak používate PHP 5.3 a namespace tak nezabudnite pridať namespace aj tu:

return preg_replace_callback(
    $regexp,
    create_function(
        '$matches',
        'return "url(\'" . \Projekt\Components\WebLoader\CssLoader::absolutizeUrl($matches[2], $matches[1], "' .
        addslashes($file) . '", "' . addslashes($this->sourceUri) .
        '") . "\')";'
    ),
    $s
);

Editoval Cifro (2. 3. 2010 14:30)

před 9 lety

Majkl578
Moderator | 1379
+
0
-

Jestli používáte 5.3, použijte raději Closure:

$uri = $this->sourceUri;
return preg_replace_callback(
        $regexp,
        function ($matches) use ($file, $uri) {
            return "url('" . \Projekt\Components\WebLoader\CssLoader::absolutizeUrl($matches[2], $matches[1], addslashes($file), addslashes($uri)) . "')";
        }, $s);

Intuitivně jsem to přepsal, ale nezkoušel.

Editoval Majkl578 (2. 3. 2010 14:51)

před 9 lety

pekelnik
Člen | 468
+
0
-

Zajímalo by mě jak je řešená změna URL v CSS souborech.

Pokud mám styl v adresáři %web%/css/foo.css a v něm odkaz na obrázek ‚img/foo.png‘,

po zpracování(a spojení) souborů mám soubor %webDir%/cache/generatedxxxxxxxxxxxxxxxxxxxxx.css odkaz na obrázek je mimo mísu.

Jak se tohle řeší?

Napadlo mě do adresáře %webDir%/cache umístit soubor .htaccess a přesměrovat obrázky na původní umístění ve %webDir%/css. Ale systémovější by mi přišlo kdyby došlo k přepsání URL obrázků v css souborech.

Vzhledem k tomu že veškerá URL, URI a cesty jsem nastavil při vytváření komponenty – čekal jsem, že něco takového proběhne.

před 9 lety

Honza Kuchař
Backer | 1650
+
0
-

To si web loader řeší sám.

před 9 lety

Ondřej Mirtes
Člen | 1539
+
0
-

Osobně to řeším tak, že do CSS uvádím takové cesty, které jsou shodné jak pro složku css, tak pro složku cache. Tedy prostě hledám adresář „img“ nebo podobný o složku výš – url('../img/obrazek.png');

před 9 lety

Honza Marek
Člen | 1674
+
0
-

Ondřej Mirtes, pekelnik: vám se nezabsolutizovávají cesty? Jakto? Nemáte nějakou předpotopní verzi?

před 9 lety

pekelnik
Člen | 468
+
0
-

Kde se dá sehnat nejnovější verze? Já jsem stáhl archiv. Pokud je git budu rád :)

před 9 lety

Honza Marek
Člen | 1674
+
0
-

https://github.com/…ek/WebLoader

A nejnovější verze se mi válí samozřejmě ještě na disku :)

Nicméně zabsolutizování adres v css by mělo fungovat i na verzi, která byla ke stažení v addons.

Editoval Honza Marek (16. 3. 2010 11:36)

před 9 lety

pekelnik
Člen | 468
+
0
-

děkuju :)

stáhnul jsem si nejnovější verzi a absolutizování URL funguje bezvadně.

pro ostatní uvedu příklad nastavení, pokud máte takouvouhle strukturu adresářů:

/app
/web
  /cache
    // ... zde budou generované soubory
  /css
    /images
      /logo.png
    /style.css
  /js
    /jquery
      /ui
        /css
          /images
            /ui-icon-foo.png
          /jquery-ui.css
$css->sourcePath = Environment::expand('%webDir%');
$css->sourceUri  = Environment::expand('%baseUri%../');
$css->tempPath   = Environment::expand('%webDir%/cache');
$css->tempUri    = Environment::expand('%baseUri%cache');

pro java script loader je to to samý…

před 9 lety

Ondřej Mirtes
Člen | 1539
+
0
-

Koukám, že mi to cesty taky absolutizuje:

background: white url('/temp/../g/ajax-loader.gif') no-repeat 50% 50%;

Každopádně nevím, jak to funguje a proč je to vůbec potřeba, protože když odtrhnu ten začátek, který to přidalo (/temp/), tak se obrázek stále nalinkuje správně :) A neumím si představit, v jakým případě je to přidání „absolutního“ začátku potřeba :)

před 9 lety

Honza Marek
Člen | 1674
+
0
-

Neni to potřeba, ale má to jednodušší implementaci než předělání relativní cesty na jinou složku ;-) Každopádně by mě zajímalo, proč tam máš to ../, to se tam vůbec nemá objevit.

před 9 lety

Ondřej Mirtes
Člen | 1539
+
0
-

To ../ je moje, v originálním CSS souboru, aby se ten obrázek našel i bez nějaký absolutizace cesty.

Takhle vypadá moje složková struktura:

- document_root
  - g
  - images
  - temp //tady jsou generované soubory z WebLoaderu
  - css //tady bych měl moje CSS soubory, kdybych je neměl někde pod app/templates ;)
Stránky: 1 2 3 … 7 Next RSS tématu