• 13-06-2010, 16:29:32
    #1
    Ben bir sistem kurdum. Themes/ klasörü içinde belli sayfalar için kodlanmış PHP tema dosyaları var. Sistemimdeki tüm sayfalara index.php'den ?action=sayfa_adi şeklinde giriliyor. index.php'de template_above() isminde bir fonksiyonla <html></html> etiketlerinin arasında olması gereken kodları ve <body> etiketinden hemen sonra yer alan menüyü yazdırıyorum. Sonra $_GET['action'] değişkenine göre gereken tema dosyasını Themes klasörü içinden çağırıp yazdırıyorum. Daha sonra da template_below() isminde bir fonksiyonla sayfanın en altındaki footer kısmını yazdırıyorum. Buraya kadar sorunum yok.

    Her sayfanın başlığı $_GET['action'] ile çağırılan sayfanın içinde yer alıyor. Bunu da ob (buffer) olayı ile hallettim. Menüde de şöyle bir şey var. Mesela $_GET['action'] == 'A' ise, A.template.php'yi çağırıp bu sayfada A olarak tanımlanmış $currentAction değişkenini menüdeki <li><a href="?action=a"> şeklinde tanımlanmış olan <li> etiketine class="active" eklemem gerek.

    Yani adres index.php?action=a iken menüdeki href ?action=a olan menü butonunun <li> etiketi class="active" olarak tanımlanacak.

    Ama menü kodları hep $_GET['action'] ile çağırılan sayfadan önce yazdırıldığı için $currentAction değişkeni hep boş gözüküyor.

    Ayrıca "sistemini değiştir", "her sayfaya menüyü tek tek yaz" gibi önerilerde bulunmayın lütfen.
  • 13-06-2010, 19:21:39
    #2
    tema dosyanızın başında global $_GET['action'] ; bu işlem ile $_GET['action'] değişkenini tema dosyasında kullanabilirsiniz
  • 13-06-2010, 19:59:41
    #3
    Anlamamışsınız hocam. Şimdi index.php'de şu var:

    $action = array(
      'action_ismi' => array('cekilecek_dosya', 'fonksiyon_adi')
    );
    
    $currentAction = $_GET[action];
    require($action[$_GET[action]][0]);
    $action[$_GET[action]][1]();
    Bu şekilde adres çubuğunda action=blabla şeklinde istenen dosyayı, ve onun içindeki gerekli fonksiyonu çalıştırıyorum. $currentAction'ı da atıyorum. Ancak $currentAction değişkenini bu üstteki kodlardan önce yazılmış olan menü kodlarında kullanmam gerekiyor.

    Önce $currentAction'ı atadığın kodu yazıp sonra menüyü yaz demeyin. Çünkü menü kodları <body> etiketinden hemen sonra. Yani <html></html> etiketinin içeriği de öyle. Bu yüzden ne yapacağımı bilemedim.

    Bu arada, yapmak istediğim şeyin çok benzeri SMF (Simple Machines Forum) sisteminde mevcut; ancak kodları çok karışık, çözemedim mantığı bir türlü.
  • 14-06-2010, 23:48:24
    #4
    Kimlik doğrulama veya yönetimden onay bekliyor.
    Merhaba, konuyu dün gördüm, ancak PC virüslüydü. Formattaydım tüm gece...

    SMF'nin tema sistemini kendi kodlarında kullanmak istiyorsun sanırım? Şu anda tam kodları vermem. Birkaç haftaya kendi projem için böyle bir şey hazırlayacağım. Sen de SMF 1.0 RC'i indirip (İlk SMF sürümü. Kodları daha az. )

    ./Sources/Load.php'de ki loadTheme, loadTemplate, loadSubTemplate, template_include fonksiyonlarını incele.

    Bu arada, "theme" ile "template" farklı şeyler. "Theme", temadır; "template" tasarımdır. "Theme" genel olarak sitede kullanılır; "template" sayfaların tasarımlarıdır. Ona göre yani...
  • 15-06-2010, 03:01:39
    #5
    Kimlik doğrulama veya yönetimden onay bekliyor.
    Arkadaşım öncelikle şunu söylemek lazım,
    Hkan adlı üyeden alıntı: mesajı görüntüle
    Ayrıca "sistemini değiştir", "her sayfaya menüyü tek tek yaz" gibi önerilerde bulunmayın lütfen.
    Her sayfada menüyü tek tek yaz demek tabii ki saçma olur, ama aksine sistemi değişmen, ya da en azından bundan sonra böyle yapmaman gerekli. Yani madem url den gelen değişkene göre işlem yapacaksın, her şeyden önce o değişkenleri alıp işleyip, sonra sonucu dökmen gerekir.

    Ama yanlış anlamadıysam şu anda sorunun sadece menüde ilgili sayfanın linkine class eklemek. Bunu sanırım javascriptle yapabilirsin, önce her link elementine bir id ekle, daha sonra bulunduğun sayfanın url sine göre ilgili ide istediğin classı eklettir.

    Yok php ile yapacaksan ya sistemi değişeceksin, ya aynı işlemi menu dosyanda da yapacaksın. Yani menu dosyanda da $_GET[action] değerini aldırıp ona göre işlem yapacaksın. Ya da3 .yol output buffering kullanıp, ekrana yazdırmadan aynı şekilde gelen $_GET[action] değerine göre ilgili menü elemanını str_replace yapdıracaksın.
  • 18-06-2010, 23:29:53
    #6
    by_grafitus adlı üyeden alıntı: mesajı görüntüle
    Merhaba, konuyu dün gördüm, ancak PC virüslüydü. Formattaydım tüm gece...

    SMF'nin tema sistemini kendi kodlarında kullanmak istiyorsun sanırım? Şu anda tam kodları vermem. Birkaç haftaya kendi projem için böyle bir şey hazırlayacağım. Sen de SMF 1.0 RC'i indirip (İlk SMF sürümü. Kodları daha az. )

    ./Sources/Load.php'de ki loadTheme, loadTemplate, loadSubTemplate, template_include fonksiyonlarını incele.

    Bu arada, "theme" ile "template" farklı şeyler. "Theme", temadır; "template" tasarımdır. "Theme" genel olarak sitede kullanılır; "template" sayfaların tasarımlarıdır. Ona göre yani...
    Tam olarak SMF'in tema sistemini değil de, onun mantığını kullanmak istiyorum. 1.1.11'i günlerce inceledim. Ama bir türlü anlayamadım.

    metadige adlı üyeden alıntı: mesajı görüntüle
    Arkadaşım öncelikle şunu söylemek lazım,


    Her sayfada menüyü tek tek yaz demek tabii ki saçma olur, ama aksine sistemi değişmen, ya da en azından bundan sonra böyle yapmaman gerekli. Yani madem url den gelen değişkene göre işlem yapacaksın, her şeyden önce o değişkenleri alıp işleyip, sonra sonucu dökmen gerekir.

    Ama yanlış anlamadıysam şu anda sorunun sadece menüde ilgili sayfanın linkine class eklemek. Bunu sanırım javascriptle yapabilirsin, önce her link elementine bir id ekle, daha sonra bulunduğun sayfanın url sine göre ilgili ide istediğin classı eklettir.

    Yok php ile yapacaksan ya sistemi değişeceksin, ya aynı işlemi menu dosyanda da yapacaksın. Yani menu dosyanda da $_GET[action] değerini aldırıp ona göre işlem yapacaksın. Ya da3 .yol output buffering kullanıp, ekrana yazdırmadan aynı şekilde gelen $_GET[action] değerine göre ilgili menü elemanını str_replace yapdıracaksın.
    Haklısınız hocam, teşekkürler, deneyeceğim.
  • 19-06-2010, 01:21:34
    #7
    SMF 1.1.11 değil; SMF 1.0 RC1.
  • 19-06-2010, 20:56:21
    #8
    Anladım. Ben 1.1.11'i incelemiştim; senin önerin üzerine 1.0 RC1'i indirip kurdum. Gördüm ki ikisinin theme ve template kodları olduğu gibi aynı. Hiçbir farkı yok. Ama çözemedim işte.
  • 19-06-2010, 21:22:32
    #9
    Üyeliği durduruldu
    kendine tema sistemi arıyorsan harici. smarty neden denemiyorsun macera istemiyorsan