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