<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>Bartek Medoń - blog &#187; meta tagi</title>
	<atom:link href="http://www.blog.bmedon.net/index.php/tag/meta-tagi/feed/" rel="self" type="application/rss+xml" />
	<link>http://www.blog.bmedon.net</link>
	<description>Blog Bartka Medonia dotyczący informatyki, ale nie tylko...</description>
	<lastBuildDate>Tue, 20 Jul 2010 18:29:37 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.0.1</generator>
		<item>
		<title>Generowanie osobnych meta tagów dla każdej strony</title>
		<link>http://www.blog.bmedon.net/index.php/php/generowanie-osobnych-meta-tagow-dla-kazdej-strony/</link>
		<comments>http://www.blog.bmedon.net/index.php/php/generowanie-osobnych-meta-tagow-dla-kazdej-strony/#comments</comments>
		<pubDate>Sun, 29 Nov 2009 20:33:31 +0000</pubDate>
		<dc:creator>Bartek Medoń</dc:creator>
				<category><![CDATA[PHP]]></category>
		<category><![CDATA[pozycjonowanie]]></category>
		<category><![CDATA[meta tagi]]></category>
		<category><![CDATA[programowanie obiektowe]]></category>

		<guid isPermaLink="false">http://www.blog.bmedon.net/?p=298</guid>
		<description><![CDATA[Tutaj chciałem przedstawić kilka możliwości generowania meta tagów (tytuł, słowa kluczowe i opis) za pomocą PHP dla stron Internetowych. Można to zrobić na wiele sposobów jednak im zrobimy to lepiej tym łatwiej i szybciej w późniejszym czasie się w tym połapiemy i będziemy mogli modyfikować. Jeśli tworzymy prostą stronę z dosłownie kilkoma pod stronami to [...]]]></description>
			<content:encoded><![CDATA[<p>Tutaj chciałem przedstawić kilka możliwości generowania meta tagów (tytuł, słowa kluczowe i opis) za pomocą PHP dla stron Internetowych. Można to zrobić na wiele sposobów jednak im zrobimy to lepiej tym łatwiej i szybciej w późniejszym czasie się w tym połapiemy i będziemy mogli modyfikować. Jeśli tworzymy prostą stronę z dosłownie kilkoma pod stronami to często nie korzystamy w ogóle z PHP czy innej technologi tworzenia dynamicznych stron tylko każda część serwisu jest powtórzonym plikiem z całą strukturę (nagłówkiem, menu, unikalną zawartością, stopką itd.). Jest to rozwiązanie kiepskie jednak w takich przypadkach (kilku częściowe strony) może się sprawdzić. W pozostałych przypadkach każda część serwisu będzie osobnym plikiem ładowanym i wyświetlanym w określonym miejscu lub będzie on wykorzystany do operacji na danych, a jeszcze inny plik (widok) te dane wyświetli &#8211; możliwości napisania ogólnej architektury jest wiele. Przejdźmy więc do interesującego nas tematu.<span id="more-298"></span></p>
<h1 class='w_tresci'>Najprostsze rozwiązanie</h1>
<p>Można by było po prostu do naszego pliku głównego, który ma tam jakiś swój mechanizm ładowania pod stron wkleić między interesujące nas tagi prosty kod, np. między tag TITLE :</p>
<pre name="code" class="php">
if (isset($_GET[strona]))
{
  switch ($_GET[strona])
  {
    case "kontakt":
      echo "Formularz kontaktowy";
    break;
    case "grafiki":
      echo "Zbiór wykonanych grafik";
    break;
    default:
      echo "Taka strona nie istnieje";
    break;
  }
}
else
{
  echo "Strona główna bla bla bla";
}
</pre>
<p>Taki sam kod wkleilibyśmy również między tagi KEYWORDS i DESCRIPTION jednak zauważ dwie największe wady :</p>
<ul>
<li>robi się straszny śmietnik w naszym pliku głównym</li>
<li>praktycznie ten sam kod jest powtarzany 3 krotnie co jest niezłym marnotrawstwem</li>
</ul>
<h1 class='w_tresci'>Programowanie strukturalne &#8211; funkcje</h1>
<p>Ok stwierdziliśmy, że pierwszy sposób jest nie do przyjęcia więc postanowiliśmy, że napiszmy osobne funkcje do generowania treści meta tagów, np. dla znacznika TITLE :</p>
<pre name="code" class="php">
function generujTytul()
{
  if (isset($_GET[strona]))
  {
    switch ($_GET[strona])
    {
      case "kontakt":
        return "Formularz kontaktowy";
      break;
      case "grafiki":
        return "Zbiór wykonanych grafik";
      break;
      default:
        header("Location: index.php");
      break;
    }
  }
  else
  {
    return "Strona główna bla bla bla";
  }
}
</pre>
<p>Dla pozostałych znaczników tworzymy podobne funkcje, zapisujemy sobie wszystkie 3 w osobnym pliku, ładujemy instrukcją require_once i wyświetlamy w odpowiednim miejscu (zamiast return można dać instrukcje echo, ja akurat zrobiłem tak mając na uwadze chęć przypisania wartości zwracane do zmiennych). No ale generalnie co nam to dało ?</p>
<ul>
<li>w pliku głównym nie ma już takiego &#8222;syfu&#8221;</li>
<li>niestety nadal praktycznie ten sam kod jest powtarzany 3 krotnie</li>
</ul>
<p>W takim razie zmodyfikujemy trochę nasze podejście i zrobimy zamiast trzech funkcji jedną :</p>
<pre name="code" class="php">
function generujMetaTagi()
{
  if (isset($_GET[strona]))
  {
    switch ($_GET[strona])
    {
      case "kontakt":
        $t[0] = "Tytuł strony";
        $t[1] = "Opis strony";
        $t[2] = "Słowa kluczowe";
      break;
      default:
        header("Location: index.php");
      break;
    }
  }
  else
  {
    $t[0] = "Tytuł strony głównej";
    $t[1] = "Opis strony głównej";
    $t[2] = "Słowa kluczowe strony głównej";
  }
  return $t;
}
</pre>
<p>Pozwoliło nam to na nie powtarzanie kodu, dalej możemy użyć naszej funkcji w następujący sposób :</p>
<pre name="code" class="php">
$meta = generujMetaTagi(); // wywołanie
// i np. w tagu TITLE
echo $meta[0];
</pre>
<p>Otrzymane rozwiązanie jest całkiem dobre, nie mniej mając na względzie dalsze modyfikacje i zmiany w naszym systemie, stronie WWW warto przejść na</p>
<h1 class='w_tresci'>Programowanie obiektowe</h1>
<p>Możemy więc napisać sobie osobną klasę związaną z meta tagami, przykładowo :</p>
<pre name="code" class="php">
class MetaTagi
{
  public $tytul;
  public $opis;
  public $slowa_kluczowe;
  public function __construct()
  {
    if (isset($_GET[strona]))
    {
      switch ($_GET[strona])
      {
        case "kontakt":
          $this->tytul = "Formularz kontaktowy";
          $this->opis = "Tutaj możesz odnaleźć możliwości kontaktu ze mną";
          $this->slowa_kluczowe = "kontakt, e-mail, gadu-gadu, skype, imie nazwisko";
        break;
        case "grafiki":
          $this->tytul = "Zbiór wykonanych grafik";
          $this->opis = "Tutaj możesz obejrzeć moje prace graficzne";
          $this->slowa_kluczowe = "grafika, portfolio, wykonane prace, imie nazwisko";
        break;
        default:
          header("Location: index.php");
        break;
      }
    }
    else
    {
          $this->tytul = "Strona głowna bla bla bla";
          $this->opis = "Moja strona domowa.....";
          $this->slowa_kluczowe = "słowa kluczowe....";
    }
  }
}
</pre>
<p>następnie gdzieś na początku naszego pliku głównego tworzymy sobie obiekt naszej klasy czyli :</p>
<pre name="code" class="php">
$tagi = new MetaTagi();
</pre>
<p>oraz w danym znaczniku wyświetlam np. dla TITLE :</p>
<pre name="code" class="php">
echo $tagi->tytul;
</pre>
<p>Jak widać w konstruktorze są ustalane podczas ładowania strony wszelkie potrzebne dane jednak można to zrobić w osobnej funkcji itd. Tak samo zmienne, które są publiczne możemy ustawić jako prywatne i do wyświetlania zawartości wybranego tagu używać dodatkowych metod. Opcji jest wiele &#8211; do wyboru, do koloru.</p>
<h1 class='w_tresci'>Inne rozwiązanie obiektowe</h1>
<p>Pokazując kiedyś komuś podobne rozwiązanie jak powyższe zapytał co np. kiedy ma napisany pewien wzorzec, architekturę na podobieństwo np <a href="http://pl.wikipedia.org/wiki/MVC" title="Model Widok Kontroler" target="_blank">MVC</a> ? Tutaj generalnie uważam, że warto przyglądnąć się rozwiązaniem jakie stosowane są w różnych <a href="http://pl.wikipedia.org/wiki/Framework" title="Co to jest Framework" target="_blank">framework&#8217;ach</a> jednak jeśli bardzo chcemy się uprzeć na własny pomysł to bardzo prostym rozwiązaniem jest np. stworzenie takiej klasy ze zmiennymi statycznymi (to tylko przykładowa koncepcja, można korzystać ze zwykłych zmiennych wewnątrz niej) :</p>
<pre name="code" class="php">
class Meta
{
	public static $title;
	public static $keywords;
	public static $description;
}
</pre>
<p>W naszej stworzonej architekturze mamy osobne pliki &#8211; modele związane z warstwą danych więc przykładowo możemy w każdym takim pliku umieścić kod odpowiadający za ustalenie dla danej strony zawartości znaczników :</p>
<pre name="code" class="php">
Meta::$title = "Tytuł";
Meta::$keywords = "Słowa Kluczowe";
Meta::$description = "Opis";
</pre>
<p>a nasz plik związany z widokiem miałby np. w znaczniku TITLE kod :</p>
<pre name="code" class="php">
echo Meta::$title
</pre>
<p>Jest to tylko pewna koncepcja, przykład &#8211; z powodzeniem moglibyśmy wykorzystać w takim przypadku wcześniej napisaną klasę tylko zawartości zmiennych ustalać nie w jej konstruktorze lecz w danym pliku modelu.</p>
<p>W przedstawionych przykładach dane są wpisane &#8222;ręcznie&#8221;, na &#8222;sztywno&#8221; jednak nic oczywiście nie stoi na przeszkodzie aby były one pobierane z bazy danych, pliku txt czy xml itd.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.blog.bmedon.net/index.php/php/generowanie-osobnych-meta-tagow-dla-kazdej-strony/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
	</channel>
</rss>
