Simple Machines Community Forum

SMF Support => Türkçe Bölümü (Turkish) => Language Specific Support => İpuçları ve Hileler => Topic started by: Özgür on September 16, 2009, 05:39:09 AM

Title: SSI BoardNews Fonksiyonunda, ilk resmi alma.
Post by: Özgür on September 16, 2009, 05:39:09 AM
Vakti zamanında ihtiyaç duyduğum ama çözümü aklıma gelmeyen, (hoş gelsede yapamazdım regex'i konusunda yeni yeni birşeyler çıkartıyorum) bu sorun için ufak ve kullanışlı bir çözüm buldum. Öncelikle bunun ne demek olduğunu açıklayayım.

Reklam yapmak gibi anlaşılmasın zira buna ihtiyaıcm olduğunu düşünmüyorum http://www.mnyk.net/ siteye girdiğinizde her yazının sol kısmında ufak bir önizleme resmi olduğunu görürsünüz. Peki bunu SSI ile portal yaptığımızda haberleri sıralarken nasıl kullanacağız? Çözüm basit. Çalışma mantığı şu; Mesaj içerisindeki ilk resmi buluyoruz ve bu resme bir isim veriyoruz. Sonrasında herşey sizin hayalinize kalıyor.

Yaptığımız değişiklikler finalde şu görünecek;
(http://img44.imageshack.us/img44/5540/71532501.png)
http://img44.imageshack.us/img44/5540/71532501.png


SSI.php de öcelikle bunu bul
function ssi_boardNews($board = null, $limit = null, $start = null, $length = null, $output_method = 'echo')
{

Ardından bu fonksiyon içerisindeki şu kodu bul

        // Check that this message icon is there...
         if (empty($modSettings['messageIconChecks_disable']) && !isset($icon_sources[$row['icon']]))
             $icon_sources[$row['icon']] = file_exists($settings['theme_dir'] . '/images/post/' . $row['icon'] . '.gif') ? 'images_url' : 'default_images_url';


Altına Ekle
            // $row['body'] içerisinde <img> kodu ara
   $secimyap = preg_match_all('/<img.+src=[\'"]([^\'"]+)[\'"].*>/i', $row['body'], $sonuc);
   // src="" içindekini al.
if(!empty($matches[0]) && !empty($matches[1]))
   $ilkresim = $sonuc [1] [0];

  else{ // Resim bulunmazsa default resim ekle
     $ilkresim = "http://www.site.com/images/default.jpg";
   }


Bul
'subject' => $row['subject'],
Altına Ekle
'resim' => $ilkresim,

Ve işlememiz tamamlandı. Artık bu resmi haber kısmında kullanacağız. Örneğin eğer SSI.php deki boardnews fonksiyonu değiştirmeden kullanıyorsunuz; aynı fonksiyon içerisindeki şu kısmı bulun

    foreach ($return as $news)
     {
         echo '
             <div>
                 <a href="', $news['href'], '">', $news['icon'], '</a> <b>', $news['subject'], '</b>
                 <div class="smaller">', $news['time'], ' ', $txt['by'], ' ', $news['poster']['link'], '</div>

                 <div class="post" style="padding: 2ex 0;">', $news['body'], '</div>

                 ', $news['link'], $news['locked'] ? '' : ' | ' . $news['comment_link'], '
             </div>';

         if (!$news['is_last'])
             echo '
             <hr style="margin: 2ex 0;" width="100%" />';
     }


Şöyle değiştirin,
foreach ($return as $news)
     {
         echo '
             <div>
                 <a href="', $news['href'], '">', $news['icon'], '</a> <b>', $news['subject'], '</b>
                 <div class="smaller">', $news['time'], ' ', $txt['by'], ' ', $news['poster']['link'], '</div>

                 <div class="post" style="padding: 2ex 0;"><div class="resim_cercevesi">
                 
                 <img src="', $news['image'], '" alt="', $news['subject'], '" class="haber_resmi" /></div>
                 
                 ', $news['body'], '</div>

                 ', $news['link'], $news['locked'] ? '' : ' | ' . $news['comment_link'], '
             </div>';

         if (!$news['is_last'])
             echo '
             <hr style="margin: 2ex 0;" width="100%" />';
     }


Tabiki resim yazılarla bitişk gibi görünecek. Bundan kurtulmak için resme stil vermemiz gerekiyor. Yukarıdaki kodda zaten resme bir class atamıştım.
Şimdiyse bu fonksiyonu kullandığınız alanın kullandığı css dosyasına şunları ekleyin;


.resim_cercevesi
{
float:left;
background:#ddd;
border:1px solid #ccc;}

.haber_resmi{
width:150px;
height:150px;
padding:5px;
margin:3px;
}


Tamam herşey harika. Ama haber metninde resim iki kere çıkıyor. Küçük halini sol tarafa yerleştirdik ama haber metni kısmında kocaman bir resim daha var?

Bunu ben şu şekilde çözüyorum; phpnin standar strip_tags fonksiyonunu veya kendi oluşturduğum bir betikle haber metninden tüm html kodlarını temizliyorum. Böylelikle, hem haber daha düzgün görünüyor hemde resim sadece bir kere görünüyor.

Basitçe; SSI.php'nin en alt kısmına ekleyin;
function temizle($haber) {
     $strs=explode('<',$haber);
     $res=$strs[0];
     for($i=1;$i<count($strs);$i++)
     {
         if(!strpos($strs[$i],'>'))
             $res = $res.'&lt;'.$strs[$i];
         else
             $res = $res.'<'.$strs[$i];
     }
     return strip_tags($res);   
}


Şimdiyse daha önce düzenlediğimiz alana geri dönün ve
  ', $news['body'], '</div> kodunu bulun.

Şu şekilde değiştirin
  ', temizle($news['body']), '</div>

İhtiyacı olanların görebilmesi için birkaç gün ana bölümde duracak. O yüzden neden gerekl bölüme taşınmadı diyse sormayın.
Title: Re: SSI BoardNews Fonksiyonunda, ilk resmi alma.
Post by: Yağız... on September 16, 2009, 06:20:02 AM
Bana söyleseydin, önceden yapmıştım kralrap.net için :)
http://www.kralrap.net/ Full Albümler bölümü.
Title: Re: SSI BoardNews Fonksiyonunda, ilk resmi alma.
Post by: Alpay on September 16, 2009, 06:25:04 AM
Güzel bir ipuçu , teşekkür ederiz.
Title: Re: SSI BoardNews Fonksiyonunda, ilk resmi alma.
Post by: abdull@h on September 16, 2009, 04:29:28 PM
teşekkürler paylaşımın için faydalanacağım bundan kesinlikle
Title: Re: SSI BoardNews Fonksiyonunda, ilk resmi alma.
Post by: ayesoft on December 24, 2009, 01:17:45 PM

         // $row['body'] içerisinde <img> kodu ara
   $secimyap = preg_match_all('/<img.+src=[\'"]([^\'"]+)[\'"].*>/i', $row['body'], $sonuc);
   // src="" içindekini al.
if(!empty($matches[0]) && !empty($matches[1]))
   $ilkresim = $sonuc [1] [0];

  else{ // Resim bulunmazsa default resim ekle
     $ilkresim = "http://www.site.com/images/default.jpg";
   }


yanlış değişken sorgulanmış


         // $row['body'] içerisinde <img> kodu ara
   $secimyap = preg_match_all('/<img.+src=[\'"]([^\'"]+)[\'"].*>/i', $row['body'], $sonuc);
   // src="" içindekini al.
if(!empty($sonuc[0]) && !empty($sonuc[1]))
   $ilkresim = $sonuc [1] [0];

  else{ // Resim bulunmazsa default resim ekle
     $ilkresim = "http://www.site.com/images/default.jpg";
   }


bu şekilde olması gerekmiyormu?
http://www.simplemachines.org/community/index.php?topic=337240 burda doğru eklemişsin
Title: Re: SSI BoardNews Fonksiyonunda, ilk resmi alma.
Post by: Özgür on December 24, 2009, 02:18:43 PM
Değişkenlerin anlaşılması için türkçe kullanmıştım. İlk olarak tips/tricks e eklediğimden onu türkçeye çevirip koydum. Atlamışım demekki o kısmı. Yanlış değişken sorgulamışım yanlış değişkeni kontrol etmişim :)
Title: Re: SSI BoardNews Fonksiyonunda, ilk resmi alma.
Post by: CILGINKRAL on December 06, 2010, 09:38:09 AM
Kodlamada bir düzenleme daha olmalı  <img src="', $news['image'], '" alt="', $news['subject'], '" class="haber_resmi" /></div>

src="', $news['image'], '   bu  src="', $news['resim'], ' şeklinde değiştirilmeli çok yararli bir makale ;)
Title: Re: SSI BoardNews Fonksiyonunda, ilk resmi alma.
Post by: Alpay on May 23, 2011, 01:10:30 AM
evet özgür bunu özel bir etiketle cagırtsak resimi daha iyi olmaz mı ? Cünkü news ile birden çok yerde kullanıyorz ve orada resim istemiyorsak ille bir resimmi görecez :) Yoksa bunu default resimini bir kücük bir gif yapip atlatacakmıyız kücük bir pratiklik ile :)

Pardon zaten öyle yapıyormussun :)
Title: Re: SSI BoardNews Fonksiyonunda, ilk resmi alma.
Post by: Özgür on May 25, 2011, 12:00:41 PM
Attachment In MessageIndex yada Topic Desc In MessageIndex adında modifikasyonlar vardı onların kodlarından yararlanarak yapabilirsiniz.
Ama bence, "Topic Description" adlı modu kurun, hem gerekli izinleri de verebilirsiniz böylece, topic description kısmına resim urlsini girin, messageindex temasında da bu değişkeni çağırıp istediğiniz gibi stil ekleyin. Hem daha rahat hareket edersiniz, hemde daha kolay yoldan yaparsınız istediklerinizi.
Vaktim olsa yaparım diyeceğim ama yarın,30unda,3ünde ve 7sinde finallerim var. Dersler bittikten sonra belki bakalabilirim.
Title: Re: SSI BoardNews Fonksiyonunda, ilk resmi alma.
Post by: dalga1 on August 21, 2011, 09:03:25 AM
bu kodu messageindex.php eklemek mümkünmü.

Bölümde bulunan konularin yaninda ilk resim cikmasini istiyorum
Title: Re: SSI BoardNews Fonksiyonunda, ilk resmi alma.
Post by: gguneri on October 08, 2011, 04:47:02 PM
arkadaşlar merhaba dosyayı ekte versem düzenleyebilir misiniz?
Title: Re: SSI BoardNews Fonksiyonunda, ilk resmi alma.
Post by: Özgür on October 09, 2011, 08:59:26 PM
Hazırcılık yapmayın. Deneyin kendinizi geliştirin. Yapamadığınız yerde sorun biz yardımcı olalım.
Title: Re: SSI BoardNews Fonksiyonunda, ilk resmi alma.
Post by: CILGINKRAL on November 08, 2011, 02:40:06 PM
MessageIndex.php üzerinde çok çalıştım, fakat hiç sonuç alamadım.  Yardımcı olursanız çok iyi olur :) Eklentisi var fakat ek dosyadan veriyor, ben direk olarak ilk resmi çekmesini istiyorum.
Title: Re: SSI BoardNews Fonksiyonunda, ilk resmi alma.
Post by: Alpay on March 12, 2015, 09:05:22 AM
Bu olayi yine bir sitede yapıyorum bazen dönüp dönüp teşekkür ediyorum Master Özgür
Her nerde yaşatılıyor ve yaşıyorsan saygı ile selamlıyorum seni :)

Allah'a emanet..