Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [PHP]Usuwanie stylesheet ze zmiennej
Forum PHP.pl > Forum > Przedszkole
Johnas
Witam, mam kod headera
  1. <!DOCTYPE html>
  2.  
  3. <html lang="pl">
  4. <meta charset="UTF-8">
  5. <meta name="viewport" content="width=device-width, initial-scale=1.0">
  6. <title>{$engine->sitename} - {$engine->title}</title>
  7. <meta name="description" content=""/>
  8.  
  9.  
  10. <link rel="stylesheet" type="text/css" media="all" href="{$template}/css/style.css"/>
  11.  
  12. <link rel="stylesheet" type="text/css" media="all" href="{$template}/css/forum.min.css"/>
  13.  
  14. <script src="//code.jquery.com/jquery-1.11.3.min.js"></script>
  15. <script src="//code.jquery.com/jquery-migrate-1.2.1.min.js"></script>
  16. <meta name="generator" content="Net4Engine 1.0 Alfa"/>
  17. <link rel='canonical' href='{$engine->domain}'/>
  18. <link rel='shortlink' href='{$engine->domain}'/>
  19.  
  20. <link rel="stylesheet" type="text/css" media="all" href="{$template}/css/camera.css"/>
  21. <link rel='stylesheet' id='flexslider-css' href='{$template}/css/flexslider.min.css?ver=2.2.0' type='text/css' media='all'/>
  22. <link rel='stylesheet' id='owl-carousel-css' href='{$template}/css/owl.carousel.css?ver=1.24' type='text/css' media='all'/>
  23. <link rel='stylesheet' id='owl-theme-css' href='{$template}/css/owl.theme.css?ver=1.24' type='text/css' media='all'/>
  24. <link rel='stylesheet' id='font-awesome-css' href='{$template}/css/font-awesome.min.css?ver=3.2.1' type='text/css' media='all'/>
  25. <link rel='stylesheet' id='cherry-plugin-css' href='{$template}/css/cherry-plugin.min.css?ver=1.2.6' type='text/css' media='all'/>
  26. <link rel='stylesheet' id='contact-form-7-css' href='{$template}/css/styles.css?ver=4.1' type='text/css' media='all'/>
  27. <link rel='stylesheet' id='theme52906-css' href='{$template}/css/main-style.min.css' type='text/css' media='all'/>
  28. <link rel='stylesheet' id='magnific-popup-css' href='{$template}/css/magnific-popup.css?ver=0.9.3' type='text/css' media='all'/>
  29. <link rel='stylesheet' id='options_typography_Open+Sans-css' href='//fonts.googleapis.com/css?family=Open+Sans&subset=latin' type='text/css' media='all'/>
  30.  
  31.  
  32. {literal}<!--[if lt IE 8]>
  33. <div id="ie7-alert" style="width: 100%; text-align:center;">
  34. <img src="http://tmbhtest.com/images/ie7.jpg" alt="Upgrade IE 7" width="640" height="344" border="0" usemap="#Map" />
  35. <map name="Map" id="Map"><area shape="rect" coords="496,201,604,329" href="http://www.microsoft.com/windows/internet-explorer/default.aspx" target="_blank" alt="Download Interent Explorer" /><area shape="rect" coords="380,201,488,329" href="http://www.apple.com/safari/download/" target="_blank" alt="Download Apple Safari" /><area shape="rect" coords="268,202,376,330" href="http://www.opera.com/download/" target="_blank" alt="Download Opera" /><area shape="rect" coords="155,202,263,330" href="http://www.mozilla.com/" target="_blank" alt="Download Firefox" /><area shape="rect" coords="35,201,143,329" href="http://www.google.com/chrome" target="_blank" alt="Download Google Chrome" />
  36. </map>
  37. </div>
  38. <![endif]-->
  39.  
  40. <!--[if gte IE 9]>
  41. <script type="text/javascript">
  42. jQuery(function(){
  43. jQuery('.sf-menu').mobileMenu({defaultText: "Nawiguj do..."});
  44. });
  45. </script>
  46. <!--<![endif]-->
  47. {/literal}
  48. </head>
  49. <body class="home page page-id-203 page-template page-template-page-home page-template-page-home-php">
  50.  
  51. {include file="menu.tpl"}


i próbuję dodać linki do zmiennej co działa znakomicie. Chcę aby po dodaniu linka do zmiennej usuwał z headera link type="stylesheet" co powoduje mi już błąd. nie usuwa mi tego... a oto kod:
  1. $header = $this->smarty->fetch('header.tpl');
  2. $links = explode("<link", $header);
  3. $x = $y = 0;
  4.  
  5.  
  6. foreach ($links as $code) {
  7.  
  8. if (strpos($code, "stylesheet") > 0) {
  9. $x++;
  10. $code = str_replace("'", '"', $code);
  11.  
  12. $delete = explode(">",$code);
  13. $delete = $delete[0];
  14.  
  15. $url = explode('href="', $code);
  16. $output = explode(">", $url[1]);
  17. $url = explode('"', $url[1]);
  18.  
  19. $url = $url[0];
  20.  
  21. echo $delete;
  22. $header .= str_replace($delete, "", $links[$y]);
  23. if ($x == 1)
  24. $link = $url;
  25. else
  26. $link .= ",".$url;
  27. }
  28. $y++;
  29. }


nie mam pojęcia co robię nie tak...
nospor
1) Mozesz napisac po co to robisz?
2) pomijajac juz fakt po co to robisz, to powinienes uzyc poprostu preg_match, ktory zwrocilby ci liste twoich HREF z tych LINK czy cokolowiek bys tam chial sobie zwrocic
Johnas
1. chcę z szablonu pobrać listę szablonów i przez skrypt minifikować go... nie chcę zmieniać struktury szablonu, a po prostu sprawić aby sam skrytp to robił
nospor
Chyba nie nadazam. Szablony przeciez wiesz gdzie trzymasz, jest to konkretny katalog przeciez. Czemu wiec poprostu nie zrobisz co masz zrobic na plikach z tego katalogu tylko sie bawisz w sprawdzanie jakie szablony zostaly uzyte? Jakos dziwnie to wyglada co teraz kombinujesz
Johnas
chcę zrobić to automatycznie, wiem że tak jest prościej, ale ja jakoś lubię komplikować sobie życie... mam to zrobione, ale nie wiem dlaczego mi nie zamienia tego w kodzie tongue.gif
nospor
To uzyj preg_match . Ulatwi ci zycie nie twprzenie takich "potworkow" jak teraz wink.gif
Johnas
nie wiem za bardzo jak używać tam parametrów. Ogólnie udało mi się to zrobić, ale chciał bym się nauczyć tego preg_match. Na chłopski rozum zrobiłbym to tak:
  1. preg_match('/(?P<link rel="stylesheet"\w+): (?P\d+)/', $str, $matches);
, ale raczej wątpię żeby tak miałoby to działać... Chodzi mi też o to że nieraz w skrypcie link jest podany:

  1. <link rel='stylesheet' id='theme' href='{$template}/css/main-style.min.css' type='text/css' media='all'/>
  2.  
  3. a nieraz tak:
  4. <link href="{$template}/lib/owlcarousel/assets/owl.carousel.min.css?modified=20012009" rel="stylesheet">


rel zmienia pozycje
aras785
użyj tego: https://symfony.com/doc/current/components/dom_crawler.html z dodatkiem tego: https://symfony.com/doc/current/components/css_selector.html

a następnie zwykły kod:

  1. $crawler = new Crawler($html);
  2. $crawler->filter('link')->each(function (Crawler $node, $i) {
  3. echo $node->attr('href');
  4. });


swoją drogą minifikowanie plików powinno być robione podczas deplyomentu (gulp, webpack) a w samej templatce ustawiasz w zależności od środowiska "prod/dev" czy ma być style.css?time czy style.min.css.
nospor
Cytat(Johnas @ 17.04.2022, 21:27:26 ) *
nie wiem za bardzo jak używać tam parametrów. Ogólnie udało mi się to zrobić, ale chciał bym się nauczyć tego preg_match. Na chłopski rozum zrobiłbym to tak:
  1. preg_match('/(?P<link rel="stylesheet"\w+): (?P\d+)/', $str, $matches);
, ale raczej wątpię żeby tak miałoby to działać... Chodzi mi też o to że nieraz w skrypcie link jest podany:

  1. <link rel='stylesheet' id='theme' href='{$template}/css/main-style.min.css' type='text/css' media='all'/>
  2.  
  3. a nieraz tak:
  4. <link href="{$template}/lib/owlcarousel/assets/owl.carousel.min.css?modified=20012009" rel="stylesheet">


rel zmienia pozycje


  1. preg_match('/<link.*?stylesheet.*?href=\'(.*?)\'/', $str, $matches);


A jesli ci zmienia pozycje stylesheet to poprostu dodaj OR (|)
  1. preg_match('/<link.*?((stylesheet.*?href=\'(.*?)\')|(href=\'(.*?)\'.*?stylesheet.*?))/', $str, $matches);

Pisane z palca, moge byc bledy
Johnas
Cytat(nospor @ 18.04.2022, 09:49:34 ) *
Pisane z palca, moge byc bledy


Znalazłem jeden haha.gif a tak na poważnie to nospor i Arek zrobiłem to co chciałem, ale strona zwolniła tępo, pomimo błędnego wyświetlania ponieważ w CSS są url które muszą być dokładnie includowane... starałem się zmieniać ich parametry, ale nadal jest to za wolne... nie da się tego robić przy każdym odświeżaniu bo czas pracy jest za długi... myślę nad minifikowaniem plików CSS, albo nad generowaniem pliku CSS dla każdej strony... chodzi mi o Google speed Page, a dokładnie zagadnienie które mówi o tym żeby wyodrębnić CSS który jest ważniejszy i nie blokuje generowania strony... Trudny przypadek tongue.gif Ja osiągnę tam 100/100
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.