Modları PrettyUrl Destekli Hale Getirmek.

Started by Özgür, April 04, 2009, 05:26:08 PM

Previous topic - Next topic

Özgür

Aslında aklımda bir fikir var ama bu sizin için sorun olur mu bilmiyorum. Şöyleki mesela galerideki bir öğe için
Öğe adı : Pikachu vs Charmender
Öğe id : 52
Olacak url /forum/mgallery/item/pickachu-vs-charmender-52/

Bu şekilde olsa işinize yarar mıydı ? Yani urlde id de olmak zorunda.. (henüz yapmış değilim ama böyle olması gerekecek muhtemelen)
So Long

Evo™

Olur tabi sende biliyorsundur google için daha fazla yararı olur böyle birşey yapabilirsen süper olur Özgür.

ayesoft

Beni bir kez daha yanıltmadığın için teşekkür ederim özgür

güzel paylaşım ve güzel anlatım analiz yeteneğine hayranım ;)

Evo™

Özgür bunu arcade modu için uyarlamaya çalıştım ama oyun bulunamadı diyor nerde hata yapıyor olabilirim acaba.
json'a eklediğim kod.
"arcade": {
        "description": "arcade",
        "enabled": 1,
        "filter": {
            "priority": 4,
            "callback": "pretty_arcade_filter"
        },
        "rewrite": {
            "priority": 4,
            "rule": [
                "RewriteRule ^oyun/([^/]+)/?$ index.php?action=arcade;sa=play;game==$1 [L,QSA]"
            ]
        },
        "title": "Arcade modu pretty desteu011fi"
    },

PrettyUrls-Filters.php ise böyle
function pretty_arcade_filter($urls)
{
   global $boardurl, $scripturl;
   
   // oyunlar
   $pattern = '~' . $scripturl . '(.*)sa=play;game=([^;]+)~S';
   $replacement = $boardurl . '/oyun/$2/';
   $replacement .= (strpos($replacement, '?') === false ? '?' : ';') . (isset($PHPSESSID[0]) ? $PHPSESSID[0] : '') . ';' . (isset($sesc[0]) ? $sesc[0] : '') . (isset($fragment[0]) ? $fragment[0] : '');
   foreach ($urls as $url_id => $url)
      if (!isset($url['replacement']))
         if (preg_match($pattern, $url['url']))
            $urls[$url_id]['replacement'] = preg_replace($pattern, $replacement, $url['url']);

   return $urls;
}


Nerde eksik yapıyorum acaba Özgür.

Özgür

"RewriteRule ^oyun/([^/]+)/?$ index.php?action=arcade;sa=play;game==$1 burada. iki tane = var.
Birde aynı proityi verme farklı modlara biri 4se diğeri 5 olsun yada benzer şeyler.

Arcade modunda çalışıp çalışmayacağından emin değilim buarada. Çalışsa bile skoru kaydederken sorun çıkartabilir.
So Long

Evo™

Çalışıyor Özgür ancak dediğin gibi skorları kayıt ederken sorun çıkarıyor. Linki http://www.kralrap.net/oyun/4/index.php?action=arcade bu şekilde yapıyor o sorunu nasıl aşabiliriz acaba.

Özgür

Valla arcadenin yapısı hakkında fikrim yok. Normalde prettyurl ile çalışması için bile eklenti gerektiriyor. Ama akşam birkaç deneme yaparım.
saat 11de dersim varda =)
So Long

Evo™

Tamam Özgür teşekkürler bekleyeceğim aciliyeti yok ama hem öğrenmek için hemde tüm linkler aynı olsun diye yapmak istiyorum.

Özgür

Denedim. Oyun bitince normalde index.php?action=arcade ye yönlendiriyor. Ama pretty olunca ../arcade/70/index.php?action=arcade ye yönlendiriyor. Dolayısıylada çalışmıyor. Yönlendirmeyi modun kendisinden ayarlamak lazım ama arcade'nin yapısı hakkında hiçbir fikrim yok. Çözmeye çalışmamında yararı olmaz çünkü nasıl bir çözüm buluruz bilmiyorum. Normalde bile doğru çalışması için eklenti gerekiyor.
So Long

Özgür

Bu arada tags modu için de kod ekledim..
So Long

Özgür

Quote from: grafitus on April 04, 2009, 06:40:09 PM
Özgür seni seviyorum :)
Sana bunu soracam msn'den açık görseydim..Yazmışsın bile..Teşekkürler.Bu arada gönlümdeki repler senindir :)

Sağolasın ama sorsanda söylecmezdim. Çünkü paylaşmaya karar vermemin sebebi başka..

Quote from: ayesoft on April 06, 2009, 02:51:44 PM
Beni bir kez daha yanıltmadığın için teşekkür ederim özgür

güzel paylaşım ve güzel anlatım analiz yeteneğine hayranım ;)
Teşekkür ederim abim =)

Edit:Bu arada tags modu için de kod ekledim..
So Long


Evo™

Özgür bu tags modu id'ye göremi linkleri çeviriyor yoksa tags'a göre mi eğer ki kelimeye göreyse süper olurda.
http://www.siteadresi.com/tags/denemedeneme gibisinden olursa süper olur.

Özgür

Quote from: Yağız... on April 08, 2009, 06:35:23 AM
http://code.google.com/p/prettyurls/downloads/detail?name=prettyurls-extras-0-9.tar.gz&can=2&q=
Özgür, bunu biliyorsundur umarım. İçinde arcade için bir patch var.
İşte tamda o yüzdewn çalışmıyor yağız. Oyunlarınher biri için o eklentideki kodu eklemek gerekecek. Kodun kısa yolunu bulursam paylaşıcam.

Quote from: єνσℓυтιση™ on April 08, 2009, 04:32:13 PM
Özgür bu tags modu id'ye göremi linkleri çeviriyor yoksa tags'a göre mi eğer ki kelimeye göreyse süper olurda.
http://www.siteadresi.com/tags/denemedeneme gibisinden olursa süper olur.
Evet öyle çalışıyor zaten ama,
Bu Tag modu senin kullandığın tag modu değil. Ama bir sonraki sürümde converterı olacak.
So Long


Özgür

Evet o mod ama hala beklemen taraftarıyım. Çünkü eklediğin etiketi düzenlemeye çalıştığında eskiden o etiketle etiketlenmiş konulardan etiket kalkıyor. Yanlış yazılmış bir etiketi düzenlemek istedğinde böyle bir sonuç hiç iyi olmaz.
So Long

Özgür

Arcade için şunu dener misin? Extras package var onuda kur yalnız. Bende çalıştı sanırım.
,
    "arcade2": {
        "description": "A patch for the arcade mod",
        "enabled": 1,
        "filter": {
            "priority": 9,
            "callback": "pretty_arcade_filter"
        },
        "rewrite": {
            "priority": 9,
            "rule": [
                "RewriteRule ^oyun/([^/]+)/?$ index.php?action=arcade;sa=play;game=$1 [L,QSA]",
                "RewriteRule ^oyun/([^/]+)/index.php?$ index.php?action=arcade [L,QSA]"
            ]
        },
        "title": "Arcade"
    }
So Long

Evo™

#37
Paketi kurdum ama yinede linkleri çevirmedi Özgür dediğin değişikliğide yaptım olmadı.
Düzeltme:
Özgür paketi kurdum ama paket PrettyUrls-Filters.php dosyasına ekleme yapmıyor aşağıdaki kodu ekleyince oldu. Teşekkürler Özgür sağol.
function pretty_arcade_filter($urls)
{
   global $boardurl, $scripturl;
   
   // oyunlar
   $pattern = '~' . $scripturl . '(.*)sa=play;game=([^;]+)~S';
   $replacement = $boardurl . '/oyun/$2/';
   $replacement .= (strpos($replacement, '?') === false ? '?' : ';') . (isset($PHPSESSID[0]) ? $PHPSESSID[0] : '') . ';' . (isset($sesc[0]) ? $sesc[0] : '') . (isset($fragment[0]) ? $fragment[0] : '');
   foreach ($urls as $url_id => $url)
      if (!isset($url['replacement']))
         if (preg_match($pattern, $url['url']))
            $urls[$url_id]['replacement'] = preg_replace($pattern, $replacement, $url['url']);

   return $urls;
}

Arveles

sadece arcade için modu kapatmak:
Code (find) Select
                if (in_array($matches[2], $context['pretty']['action_array']))
Code (replace) Select
                if (in_array($matches[2], $context['pretty']['action_array']) && $matches[2] != 'arcade')
Elveda SMF...

Özgür

Quote from: єνσℓυтιση™ on April 10, 2009, 02:31:25 AM
Paketi kurdum ama yinede linkleri çevirmedi Özgür dediğin değişikliğide yaptım olmadı.
Düzeltme:
Özgür paketi kurdum ama paket PrettyUrls-Filters.php dosyasına ekleme yapmıyor aşağıdaki kodu ekleyince oldu. Teşekkürler Özgür sağol.
function pretty_arcade_filter($urls)
{
   global $boardurl, $scripturl;
  
   // oyunlar
   $pattern = '~' . $scripturl . '(.*)sa=play;game=([^;]+)~S';
   $replacement = $boardurl . '/oyun/$2/';
   $replacement .= (strpos($replacement, '?') === false ? '?' : ';') . (isset($PHPSESSID[0]) ? $PHPSESSID[0] : '') . ';' . (isset($sesc[0]) ? $sesc[0] : '') . (isset($fragment[0]) ? $fragment[0] : '');
   foreach ($urls as $url_id => $url)
      if (!isset($url['replacement']))
         if (preg_match($pattern, $url['url']))
            $urls[$url_id]['replacement'] = preg_replace($pattern, $replacement, $url['url']);

   return $urls;
}


Onu vermeyi unutmuşum :D
İstersen highscore ve diğer şeyler içinde ekleme yapabilirsin.
Birde bu kod çalışıyor mu şimdi ? Ekleyeyim mi ilk sayfadaki mesaja ?
So Long

Advertisement: