Elxis CMS Forum

Ελληνικό Forum => Γενικά Θέματα για το Elxis CMS => Topic started by: thanasis on August 23, 2013, 14:02:46

Title: Διευκρίνηση για το Minifier
Post by: thanasis on August 23, 2013, 14:02:46
Καλησπέρα,
Η λειτουργία του minifier δεν αφορά και το css του επιλεγμένου template;

ΧΩΡΙΣ MINIFIER:
<link rel="stylesheet" href="http://www.my-domain.com/templates/system/css/standard.css" type="text/css" media="all"  />
<link rel="stylesheet" href="http://www.my-domain.com/includes/js/jquery/colorbox/colorbox.css" type="text/css" />
<link rel="stylesheet" href="http://www.my-domain.com/modules/mod_nivoslide/css/nivo-slider.css" type="text/css" />
<link rel="stylesheet" href="http://www.my-domain.com/modules/mod_nivoslide/css/default/default.css" type="text/css" />
<link rel="stylesheet" href="http://www.my-domain.com/modules/mod_rssatomsocnet/includes/mod_rssatomsocnet.css" type="text/css" />
<script ......
<link rel="stylesheet" href="http://www.my-domain.com/templates/ΜYTEMPLATE/css/template.css" type="text/css" />


ME MINIFIER:
<link rel="stylesheet" href="http://www.my-domain.com/inner.php/minify/2787f2cb2025b2bc7c94e85b75819225.css" type="text/css" media="all" />
<script type="text/javascript" src="http://www.my-domain.com/inner.php/minify/ef23683cebcca00e9013fdbf85064a73.js"></script>
<script ......
<link rel="stylesheet" href="http://www.my-domain.com/templates/MYTEMPLATE/css/template.css" type="text/css" />
Title: Re: Διευκρίνηση για το Minifier
Post by: datahell on August 23, 2013, 20:45:45
Ο minifier αφορά ΟΤΙΔΗΠΟΤΕ φορτώνεται στο head με τις μεθόδους της βιβλιοθήκης elxisDocument (https://www.elxis.net/docs/el/developers/libraries/elxisdocument.html) και συγκεκριμένα:

για το css: $eDoc->addStyleLink($link);

για την javascript: $eDoc->addScriptLink($link); και $eDoc->addJQuery(); $eDoc->addLibrary($name, $link, $version);

Στο Elxis ΤΑ ΠΑΝΤΑ φορτώνονται με τις παραπάνω μεθόδους ΕΚΤΟΣ ΑΠΟ ΤΟ CSS ΤΟΥ TEMPLATE.

Αν δεις τα index.php των template θα δεις το css του template δεν φορτώνεται με το addStyleLink αλλά προστίθεται χειροκίνητα στο τέλος του head της html. Αυτό γιατί θέλουμε να εμφανιστεί τελευταίο ώστε να υπερκαλύπτει οτιδήποτε φορτώσανε οι επεκτάσεις και οι διάφορες βιβλιοθήκες κατά την δημιουργία της σελίδας. Αν θες να το αλλάξεις αυτό τότε απλά φόρτωσε το css του template με την addStyleLink αλλά σε προειδοποιώ ότι σε αρκετές περιπτώσεις το css των επεκτάσεων θα καλύπτει αυτό του template σου (γιατί δεν θα φορτώνεται πλέον τελευταίο) με αποτέλεσμα να βλέπεις διαφορετική εμφάνιση στο site από αυτή που θα περίμενες να δεις λόγω του template.

Οπότε λόγω αυτής της ιδιαίτερης φόρτωσης του css του template αυτό δεν συμπεριλαμβάνεται στον minifier. Μπορείς βέβαια να το συμπιέσεις με τις κλασσικές μεθόδους (πχ αφαίρεση κενών) ή ακόμα και να προσθέσεις λειτουργικότητα με συμπίεση gzip στην λογική του template.

Τέλος να πω ότι αν ενεργοποιήσεις συμπίεση gzip στις ρυθμίσεις του elxis (απενεργοποίησε το gzip στον minifier σε αυτή την περίπτωση) τότε ΟΤΙΔΗΠΟΤΕ στο site συμπιέζεται με gunzip και συνεπώς και το css του template.
Title: Re: Διευκρίνηση για το Minifier
Post by: thanasis on August 24, 2013, 14:12:17
Οκ, κατάλαβα πως λειτουργεί, ευχαριστώ.

Δε θα μπορούσε όμως -με κάποιο τρόπο- στο css αρχείο που δημιουργεί ο minifier, να "διαβάζει" και να τοποθετητεί τελευταίο το περιεχόμενο του css του template, ώστε να είναι αυτό που θα υπερκαλύπτει όλα τα άλλα;

Ο λόγος που το ψάχνω δεν είναι η συμπίεση, αλλά η ύπαρξη ενός και μόνο css στο head.



Με την ευκαιρία... όσον αφορά στη Συμπίεση όταν έχω:

ΡΥΘΜΙΣΕΙΣ EXLIS
Συμπίεση GZip: ΝΑΙ
Ελαχιστοποιητής CSS/Javascript
   CSS: NAI
   Javascript: NAI

Από τα εργαλεία του Google Webmaster πέρνω αυτό:
Compressing resources with gzip or deflate can reduce the number of bytes sent over the network.

    Enable compression for the following resources to reduce their transfer size by 163.6KiB (73% reduction).
        Compressing http://[www].My-domain/inner.php/minify/ef23683cebcca00e9013fdbf85064a73.js could save 111.1KiB (70% reduction).
        Compressing http://[www].My-domain/templates/delta/css/template.css could save 30.5KiB (81% reduction).
        Compressing http://[www].My-domain/inner.php/minify/2787f2cb2025b2bc7c94e85b75819225.css could save 22KiB (79% reduction).

   

Ενώ όταν ρυθμίζω:   
ΡΥΘΜΙΣΕΙΣ EXLIS      
Συμπίεση GZip: ΝΑΙ
Ελαχιστοποιητής CSS/Javascript
   CSS: NAI+Συμπίεση Gzip
   Javascript: NAI+Συμπίεση Gzip

Από τα εργαλεία του Google Webmaster πέρνω αυτό:   
Compressing resources with gzip or deflate can reduce the number of bytes sent over the network.

    Enable compression for the following resources to reduce their transfer size by 30.5KiB (81% reduction).
        Compressing http://[www].My-domain/templates/delta/css/template.css could save 30.5KiB (81% reduction).


Γιατί δε βλέπει το ριμάδι τη συμπίεση; Κάνω κάτι λάθος;
Title: Re: Διευκρίνηση για το Minifier
Post by: datahell on August 24, 2013, 14:42:23
Μα εξεπιτιδες δεν το βαζουμε στον minifier, αν θες να το βαλεις σου ειπα πως να το κανεις. Η βιβλιοθηκη elxisDocument ειναι αρκετα εξυπνη και κανει καποιες διορθωσεις, σαν αυτη που λες, αυτόματα.
Title: Re: Διευκρίνηση για το Minifier
Post by: thanasis on August 24, 2013, 14:47:23
Ok, θα το δοκιμάσω. Σε ευχαριστώ.
Μα εξεπιτιδες δεν το βαζουμε στον minifier, αν θες να το βαλεις σου ειπα πως να το κανεις. Η βιβλιοθηκη elxisDocument ειναι αρκετα εξυπνη και κανει καποιες διορθωσεις σαν αυτη που λες αυτυματα.
Title: Re: Διευκρίνηση για το Minifier
Post by: thanasis on August 24, 2013, 19:47:31
Το δοκίμασα με addStyleLink.

Με απενεργοποιημένο τον Minifier η σειρά των css είναι:
standard css
template css
modules css κ.λπ.

Όταν ενεργοποιείται ο Minifier τα αρχεία τα τοποθετεί στο ενοποιημένο css ακριβώς με την ίδια σειρά.

Στη συγκεκριμένη εγκατάσταση που το δοκίμασα, ευτυχώς, δεν εμφανίζει περιπτώσεις υπερκάλυψης.
Αν προστεθούν στη πορεία όμως κάποια νέα module ενδεχομένως να υπάρξουν τέτοια προβλήματα. Έχεις δίκιο, θέλει προσοχή!
Καλό είναι όποιος αποφασίσει να εφαρμόσει αυτό το τρόπο να το κάνει από την αρχή δημιουργίας του template, και αφού έχει αποφασίσει ποιά πρόσθετα θα χρησιμοποιήσει, ώστε να μπορεί να διορθώνει υπερκαλύψεις.

Αν γινόταν να τροποποιηθεί η σειρά που διαβάζει ο minifier τα css, θα ήταν τέλειο.
Title: Φόρτωση τελευταίου του template.css στον minifier
Post by: datahell on August 24, 2013, 20:40:07
Ο minifier, αλλά και η elxisDocument, τα διαβάζει με τη σειρά που τα φορτώνεις αλλά το css του template το φορτώνεις πριν φορτώσεις τα module και plugin με αποτέλεσμα το css από τα module/plugin να υπερκαλύψουν το template.

Θα σου πω ένα κόλπο πως θα κάνεις να φορτώνεται τελευταίο το css του template στον minifier.
Κάνε τα παρακάτω.

Άνοιξε το αρχείο includes/libraries/elxis/document.class.php
Πήγαινε στη γραμμή 417:
Code: [Select]
foreach ($this->stylesheets as $href => $arr) { $links[] = $href; }
Και άλλαξέ την στο παρακάτω:
Code: [Select]
$tpl_css = '';
foreach ($this->stylesheets as $href => $arr) {
if (!preg_match('#(template.css)$#', $href)) {
$links[] = $href;
} else {
$tpl_css = $href;
}
}
if ($tpl_css != '') { $links[] = $tpl_css; }

Θα σου δουλέψει περίφημα (δοκίμασέ το, δεν το δοκίμασα) εφόσον το όνομα του css αρχείου του template λέγεται template.css. Αν όχι άλλαξε τον παραπάνω κώδικα κατάλληλα.
Title: Re: Διευκρίνηση για το Minifier
Post by: thanasis on August 24, 2013, 21:23:39
ΕΓΡΑΨΕΣ...........!!!!

Το δοκίμασα και από όσο είδα λειτουργεί μια χαρά... διαβάζει το template css τελευταίο!

Ευχαριστώ!
Title: Re: Διευκρίνηση για το Minifier
Post by: thanasis on August 26, 2013, 14:54:23
Σε περίπτωση όμως που για κάποιο λόγο θέλουμε να απενεργοποιήσουμε τον minifier, είναι λογικό ότι, τα template θα διαβαστούν με την κανονική σειρά, δηλ:
   standard css
   template css
   ....
   module css κ.λπ

Έτσι, σε συνδυασμό με το κόλπο στο document.class.php, δοκίμασα τον παρακάτω τρόπο για να φορτώνεται το template:

<?php $eDoc->showHead();?>
<?php
      if ($elxis->getConfig('MINICSS') > 0) {
         $link = eFactory::getElxis()->secureBase().'/templates/MyTemplate/css/template.css';
         $eDoc->addStyleLink($link);
      } else {
         $href = eFactory::getElxis()->secureBase().'/templates/MyTemplate/css/template.css';
         $content = '<link rel="stylesheet" href="'.$href.'" type="text/css" media="all"/>';
         $eDoc->addCustom($content);
      }
?>

Μου δείχνει ότι λειτουργεί μιά χαρά και σε κάθε περίπτωση το template css διαβάζεται τελευταίο.
Title: Re: Διευκρίνηση για το Minifier
Post by: datahell on August 26, 2013, 14:58:24
Σωστός, γιατί τα custom tags φορτώνονται στο τέλος. Μπράβο, ωραίο τρυκ ;)