News:

Want to get involved in developing SMF, then why not lend a hand on our github!

Main Menu

SSI BoardNews Fonksiyonunda, ilk resmi alma.

Started by Özgür, September 16, 2009, 05:39:09 AM

Previous topic - Next topic

Özgür

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


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.
So Long

Yağız...

Bana söyleseydin, önceden yapmıştım kralrap.net için :)
http://www.kralrap.net/ Full Albümler bölümü.

Alpay


[email protected]

teşekkürler paylaşımın için faydalanacağım bundan kesinlikle

ayesoft

#4

         // $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

Özgür

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 :)
So Long

CILGINKRAL

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 ;)

Alpay

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 :)

Özgür

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.
So Long

dalga1

bu kodu messageindex.php eklemek mümkünmü.

Bölümde bulunan konularin yaninda ilk resim cikmasini istiyorum

gguneri

arkadaşlar merhaba dosyayı ekte versem düzenleyebilir misiniz?

Özgür

Hazırcılık yapmayın. Deneyin kendinizi geliştirin. Yapamadığınız yerde sorun biz yardımcı olalım.
So Long

CILGINKRAL

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.

Alpay

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..

Advertisement: