Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> Dynamiczne Meta Tagi ...raz jeszcze
RecoNet
post 17.05.2011, 00:20:40
Post #1





Grupa: Zarejestrowani
Postów: 4
Pomógł: 0
Dołączył: 16.05.2011

Ostrzeżenie: (0%)
-----


Witam serdecznie.

Przeczesałem "trochę" neta i znalazłem mnóstwo tematów na ten temat jednak nie dokopałem się jeszcze do interesującego mnie rozwiązania.
Chodzi mi o prostą stronę a raczej coś w stylu mikro-templatki w ramach nauki.
Otóż:

Mam sobie plik meta

  1. <?php
  2. $company_name = "company name";
  3. $title = "title";
  4. $page = "some page";
  5. $meta_desc = "no description";
  6. $meta_keywords = "no keywords";
  7. ?>
  8. <title><?php echo $company_name; ?> - <?php echo $page ?> - <?php echo $title; ?></title>
  9. <meta name="Description" CONTENT="<?php echo $meta_desc ?>"/>
  10. <meta name="Keywords" CONTENT="<?php echo $meta_keywords ?>"/> /*....*/


,który to includowany jest w wiadomym miejscu strony.

następnie przychodzi część strony z nagłówkami itp. no i menu.

menu opiera się na "dynamicznych" linkach:

  1. <ul class="menu">
  2. <li><a href="index.php?page=main_site">strona główna</a></li>
  3. <li><a href="index.php?page=oferta">oferta</a></li>
  4. <li><a href="index.php?page=kontakt">kontakt</a></li>
  5. <li><a href="index.php?page=sitemap">mapa strony</a></li>
  6. </ul>


dalej mam oczywiście jak to z początkującymi bywa - waruneczki:

  1. <?php
  2.  
  3. $page = $_GET['page'];
  4. switch($page){
  5. case 'main_site':
  6. include("/main_site.php");
  7. break;
  8. case 'oferta':
  9. include("/oferta.php");
  10. break;
  11. case 'kontakt':
  12. include("/kontakt.php");
  13. break;
  14. case 'sitemap':
  15. include("/sitemap.php");
  16. break;
  17. default:
  18. include("/main_site.php");
  19. break;
  20. }; ?>



Treść stron wygląda tak

  1. <?php
  2. $title = "main site title";
  3. $meta_desc = "main site desc";
  4. $meta_keywords = "main site keys";
  5. ?>

+
  1. <h1>MainSite</h1>
  2. <p>bla bla bla</p>


No i chciałem skorzystać w takim wypadku z buforowania (ob_start(); etc). No i mi nie idzie za bardzo :/

Jak to ugryźć by dane w zmiennych odpowiedzialne za meta tagi znajdowały się na podstronie, a wyświetlane były dobrze w index'ie ?


Oczywiście wiem, że można skorzystać z bazy danych ale to rozwiązanie w tym przypadku nie wchodzi w grę tongue.gif

Kod
[deklaracje]
[meta]                  <          
[header]                  \
[menu]                     |
[podstrona](meta)          |


Pozdrawiam Serdecznie.

Ten post edytował RecoNet 17.05.2011, 00:22:54
Go to the top of the page
+Quote Post
motyl-pl
post 17.05.2011, 02:08:13
Post #2





Grupa: Zarejestrowani
Postów: 294
Pomógł: 31
Dołączył: 2.04.2010

Ostrzeżenie: (0%)
-----


Spróbuj na początku wywalić tą deklaracje z góry bo zmienne meta tagów się powtarzają:
1. Z pliku związanego za generowanie meta tagów
2. Z podstron które includujesz


--------------------
Go to the top of the page
+Quote Post
RecoNet
post 17.05.2011, 11:53:04
Post #3





Grupa: Zarejestrowani
Postów: 4
Pomógł: 0
Dołączył: 16.05.2011

Ostrzeżenie: (0%)
-----


Hej dziękuje za odpowiedź , jednakże powtarzają się ze względu takiego, że uznałem iż dobrym pomysłem jest przechowywanie default meta tagów. Niepotrzebna mi do tego if...else więc chce nadpisać moje default tagi tymi tagami z includowanych stron. Chodzi o to aby na "stosie" na wierzchu były zmienne z podstron a w przypadku gdyby strona ich nie określała to ładuje zmienne przykładowe. Prostota przede wszystkim wink.gif

Oczywiście includowanie (nad meta) tablicy dla podstron też mi nie odpowiada ;p
Zależy mi na tym żeby tytuły były załączone na pod stronach. Nie znalazłem lepszego sposobu niż buforowanie ale niestety jeszcze nie umiem go zastosować poprawnie, więc jeśli ktoś ma jeszcze jakiś pomysł czy link do artykułów byłbym wdzięczny smile.gif Uważam że buforowanie to jeden z ciekawszych pomysłów z wyłączeniem baz danych.

Ten post edytował RecoNet 17.05.2011, 12:07:26
Go to the top of the page
+Quote Post
wdev
post 17.05.2011, 13:05:29
Post #4





Grupa: Zarejestrowani
Postów: 86
Pomógł: 20
Dołączył: 20.01.2010

Ostrzeżenie: (0%)
-----


Nie jest wazne czy buforujesz, czy nie - jezeli zmienna zostala przeslana do buforu jako fragment kodu do wyswietlenia - zostanie wyswietlona wlasnie w ten sposob. Zabierasz sie niestety do tego ze zlej strony - nie mozesz przekazywac wartosci z tresci strony, powinienes przekazywac do niej. Najprosciej - zrob sobie plik, ktory bedziesz includowal na poczatku, ze zdefiniowanym zmiennymi, ktore beda na stronie, a pozniej je wywoluj w odpowiednich miejscach.


--------------------
-wdev-
Go to the top of the page
+Quote Post
RecoNet
post 17.05.2011, 13:39:07
Post #5





Grupa: Zarejestrowani
Postów: 4
Pomógł: 0
Dołączył: 16.05.2011

Ostrzeżenie: (0%)
-----


A jednak sobie poradziłem wink.gif

ROZWIĄZANIE - (niezbyt eleganckie jeszcze)

meta

  1. <?php
  2. $company_name = "company name";
  3. $title_default = "title_page";
  4. $page_default = "some page";
  5. $meta_desc_default = "no description";
  6. $meta_keywords_default = "no keywords";
  7. ?>
  8. <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
  9. <meta http-equiv="pragma" content="no-cache"/>
  10. <title><?php echo $company_name.' - '.$page_default.' - '.$title_default; ?></title>
  11. <meta name="Description" CONTENT="<?php echo $meta_desc_default ?>"/>
  12. <meta name="Keywords" CONTENT="<?php echo $meta_keywords_default ?>"/>


index

  1. <head>
  2. <?php ob_start(); ?>
  3. <?php include("includes/meta.php"); ?>
  4. <link rel="stylesheet" type="text/css" href="css/reset.css"/>
  5. <link rel="stylesheet" type="text/css" href="css/template.css"/>
  6. </head>
  7.  
  8. <body>
  9. <div id="wrapper">
  10. <div id="header">
  11. <div class="container">
  12. <?php include("includes/header.php"); ?>
  13. <div id="metatags">
  14. <p><?php echo 'title ='. $title_default ?></p>
  15. <p><?php echo 'desc ='. $meta_desc_default ?></p>
  16. <p><?php echo 'keys ='. $meta_keywords_default ?></p>
  17. <p><?php echo 'page ='. $page_default ?></p>
  18. </div>
  19. </div>
  20. </div>
  21.  
  22. <div id="main_body">
  23. <div class="container">
  24. <div id="sidebar">
  25. <?php include("includes/sidebar.php"); ?>
  26. </div>
  27.  
  28. <div id="content">
  29. <?php include("includes/content.php"); ?>
  30. <?php $site= ob_get_clean();
  31. $site = str_replace($title_default, $title, $site);
  32. $site = str_replace($meta_desc_default, $meta_desc, $site);
  33. $site = str_replace($meta_keywords_default, $meta_keywords, $site);
  34. $site = str_replace($page_default, $page, $site);
  35. echo $site ;?>
  36. <?php ob_flush();?>
  37. </div>
  38. </div>
  39.  
  40. </div>
  41.  
  42. <div id="footer">
  43. <div class="container">
  44. <?php include("includes/footer.php"); ?>
  45. <?php include("includes/debug.php"); ?>
  46. </div>
  47. </div>
  48. </div>
  49. </body>


podstrona

  1. <?php
  2. $title = "main site title";
  3. $meta_desc = "main site desc";
  4. $meta_keywords = "main site keys";
  5. ?>
  6.  
  7. <h1>MainSite</h1>

zmienna page już istnieje i pobierana jest również dzięki buforowi z menu (tak mi się wydaje) tongue.gif

PS2. przepraszam za te namolne tagi php (testowałem ;p)

Plusy
+ Działa wink.gif
+ Działa bez bazy danych
Minusy
- relatywnie dużo zmiennych jak na taką operacje
- na chwilę obecną zero MVC (Model-View-Controller) ;p
- (lub plus) bufor (szczerze mówiąc czytając trochę nie wiem czy to jest jeszcze najszybsze i najoszczędniejsze rozwiązanie)
- używając domyślnego słowa kluczowego dla zmiennej $title = title zastępuje markup html'owy <title></title> na np. <oferta></oferta> ;O
- gigantyczna zmienna
- wielokrotne przeczesywanie zmiennej

PS2. Mile widziane "uprofesjonalnienie" kodu wink.gif

Zastanawiałem się również nad rozwiązaniem obiektowym tego problemu (głównie dla celów dydaktycznych) ale na chwile obecną trochę mnie to przerasta więc jakby ktoś miał pomysł byłbym wdzięczny.

Ten post edytował RecoNet 17.05.2011, 14:13:48
Go to the top of the page
+Quote Post
wdev
post 17.05.2011, 13:59:45
Post #6





Grupa: Zarejestrowani
Postów: 86
Pomógł: 20
Dołączył: 20.01.2010

Ostrzeżenie: (0%)
-----


Cytat(RecoNet @ 17.05.2011, 14:39:07 ) *
<div id="content">
<?php include("includes/content.php"); ?>
<?php $site= ob_get_clean();
$site = str_replace($title_default, $title, $site);
$site = str_replace($meta_desc_default, $meta_desc, $site);
$site = str_replace($meta_keywords_default, $meta_keywords, $site);
$site = str_replace($page_default, $page, $site);
echo $site ;?>
<?php ob_flush();?>
(...)
- (lub plus) bufor (szczerze mówiąc czytając trochę nie wiem czy to jest jeszcze najszybsze i najoszczędniejsze rozwiązanie)


Okropne, okropne rozwiazanie. Tworzysz gigantyczna zmienna, ktora niepotrzebnie zalega Ci w pamieci, a pozniej jeszcze ja przeczesujesz 4 razy str_replace... Zdecydowanie powinienes zrezygnowac z tego sposobu.


--------------------
-wdev-
Go to the top of the page
+Quote Post
RecoNet
post 17.05.2011, 14:12:11
Post #7





Grupa: Zarejestrowani
Postów: 4
Pomógł: 0
Dołączył: 16.05.2011

Ostrzeżenie: (0%)
-----


Masz racje smile.gif bardzo istotne spostrzeżenie. $site jest bardzo brzydki jednak zależy mi na tym żeby dane do tytułów były na pod stronach. Próbowałem jeszcze ze zmiennymi globalnymi w linkach menu ale jest to jeszcze gorsze rozwiązanie. Google bardzo nie lubi linków z tyloma znakami tongue.gif

Wiem że rozwiązanie które proponujesz jest łatwe ale za każdą stroną trzeba dopisywać do tabeli kolejne wyrażenia. Co prawda na pod stronie też muszę je dopisywać ale trzymam się wtedy tematyki danego artykułu. Oczywiście jak masz jeszcze jakieś sugestie byłbym wdzięczny smile.gif

Mam nadzieje, że ograniczenie ilości wyszukań oraz zawężenie zmiennej pomoże tej opcji.
Czy podzielenie tego na mniejsze "bufory" jest możliwe i dość dobre aby dalej z tego korzystać ?

Oczywiście nie będę się ślepo upierał jak jest wydajniejszy sposób i skorzystam z tego proponowanego przez Ciebie jednak, trochę bym jeszcze po-drążył temat snitch.gif

Ten post edytował RecoNet 17.05.2011, 14:23:47
Go to the top of the page
+Quote Post

Reply to this topicStart new topic
1 Użytkowników czyta ten temat (1 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Wersja Lo-Fi Aktualny czas: 24.06.2024 - 08:14