PHP ile Düzenli Metin Kesmek

Uzun yazıları kırptığımızda, son kelimenin kalan kısımı görünmez oluyor ve anlamsız bir kelime, bazende tek bir harf olabiliyor. Örneğin;

$icerik = ‘Uzun yazıları kırptığımızda, son kelimenin kalan kısımı görünmez oluyor ve anlamsız bir kelime bazende tek bir harf olabiliyor.’;

Yukarıdaki içeriği substr() fonksiyonu ile, 60 karakterle sınırlarsak çıktı; “Uzun yazıları kırptığımızda, son kelimenin kalan kısoluyor.

Düzenli bir metin bölme işlemi için PHP de 2 satır kod yazmamız yeterli olacaktır…

if( preg_match('/(.*?)\s/i', substr( $icerik, 60), $dizi) )
     $icerik = substr($icerik, 0, 60+strlen($dizi[0]));

Çıktı;

Uzun yazıları kırptığımızda, son kelimenin kalan kısımı

Eğer içeriğimiz sadece text değil, html de içerisyorsa bu durumda, html taglarını yazıdan temizlememiz gerekir…. O halde bu durumda kodlarımız;

$icerik = strip_tags($icerik);
if( preg_match('/(.*?)\s/i', substr( $icerik, 60), $dizi) )
    $icerik = substr($icerik, 0, 60+strlen($dizi[0]));

Daha da ileri gidelim, html kodlarını temizledikten sonra istemediğimiz boşluklar oluşur ve bu boşluklar metinin olduğundan daha kısa olmasına neden olur… Bu durumda kodlarımız;

$icerik = strip_tags($icerik);
$icerik = str_replace(array("\t","\r","\n"), ' ',$icerik);
$icerik_bol = explode(' ', $icerik); // metini bosluklara gore bolduk
$icerik = '';
for($i = 0; $i < count($icerik_bol); $i++) {
     if ($icerik_bol[$i] != '') // veri yok mu? Atla, varsa ekle
          $icerik .= trim($icerik_bol[$i]).' ';
}

if( preg_match('/(.*?)\s/i', substr( $icerik, 60), $dizi) )
    $icerik = substr($icerik, 0, 60+strlen($dizi[0]));

Bitti : )

1 Yorum    PHP ile Düzenli Metin Kesmek

  1. Bu arada sitenizi inceledim, aslında içeriği bakımından Joomla kurmanız daha uygun olurdu diye düşünüyorum.

  2. 🙂

    Aslında 3 mesaj önce söylemiştim $message değişkeni için neyse çözülmesi önemliydi.

    Şunu deneyin;

    $message = str_replace(array('[img', '[/img]'), array('<img','</img>'), $message);
    $message = strip_tags($message);
    $message = str_replace(array("\t","\r","\n"), ' ',$message);
    $message_bol = explode(' ', $message); // metini bosluklara gore bolduk
    $message = ";
    for($j = 0; $j < count($message_bol); $j++) {
    	if ($message_bol[$j] != '') // veri yok mu? Atla, varsa ekle
    	$message .= trim($message_bol[$j]).' ';
    }
    
    1. Kodu denedim ama değişen birşey olmadı. 🙂
      Site joomla olabilir haklısınız ama joomla da forum yok.
      Aslında, http://gokceali.net isimli sitemin yazılımı ile de kurabilirim ama phpbb hoşuma gidiyor.
      Sıkıntı yaşadığım son husus yine sistemin kodları ile alakalı sanırım.
      bbcode olarak kullandığı alanlar siliyor ama arasındaki linkleri silmiyor sanırım.
      Sizin kodlar ile ben onları siliyorum ama uzunluk olarak verdiğim sınırdan düşüremiyorum. Sıkıntı bu.
      Bakalım deneye deneye halledecez sanırım 🙂
      Verdiğiniz destekler için çok teşekkürler.
      Sevgi ve saygılar.

      1. Şunu deneyin

        $metin_uzunluk = 200; // 200 harften sonrasini, bosluga gore kesecek
        /* mesaj icerigini temizle */
        $bbcode= "#\[([^\]]+?)(=[^\]]+?)?\](.+?)\[/\1\]#";
        $message = preg_replace($bbcode, "", $message);
        $message = strip_tags($message);
        $message = str_replace(array("\t","\r","\n"), ' ',$message);
        
        // icerik belirttigimiz sinirdan buyukse kes
        if( strlen($message)>$metin_uzunluk) 
        if( preg_match('/(.*?)\s/i', substr( $message, $metin_uzunluk), $dizi) ) // bosluk mevcut ise
        $message = substr($message , 0, $metin_uzunluk+(strlen($dizi[0])));
        
  3. Merhaba,

    board portal diye bir modül kurdum.
    Ana sayfada istediğim forumdan ID no ve uzunluk vererek mesajları listeliyorum. İşte burada istediğim kısmı eksik kodladıkları için mesajda fotoğraf falan varsa görünüyor. Ben ise sadece yazı görünmesini ve uzunlukların aynı olmasını istiyorum. Göz atmak isterseniz sitem: http://orkmes.com

    Ana sayfada göreceksiniz demek istediğim hususu.

    Çok sağolun.

    1. bu şekilde anlamam zor olur. Son verdiğiniz kodlarda $message değişkenine uygulayabilirsiniz.

      Ayrıca sanırım board sisteminde metin kesmek ile ilgili bir seçenek var ki şu kodlar mevcut.
      ———————————————————————————————————
      if (($text_length != 0) && (strlen($len_check) > $text_length))
      {
      $message = str_replace(array(“\n”, “\r”), array(”, “\n”), $row[‘post_text’]);
      $message = get_sub_taged_string($message, $row[‘bbcode_uid’], $maxlen);
      $posts[$i][‘striped’] = true;
      }
      else
      {
      $message = str_replace(“\n”, ‘ ‘, $row[‘post_text’]);
      }
      ————————————————————-

      doğru yerdemiyiz denemek için else den sonrası için şunu yapın, ilgili bölümü örnekliyorum.

      else
      {
       //$message = str_replace("\n", '', $row['post_text']);
         $message = str_replace(array("\n", "\r"), array('', "\n"), $row['post_text']);
         $message = get_sub_taged_string($message, $row['bbcode_uid'], 60);
         $posts[$i]['striped'] = true;
      }
      
      
      1. Size de zahmet veriyorum ama ne yazık ki olmadı.
        http://gokceali.net/haberler.php diye bir sayfam var.
        O sayfayı tasarlayan arkadaş dediğim sorunu şu kodlardan bir tanesi ile çözmüş. Tam hangisi bilemedim ama tam istediğim sonuç. Lakin ben uyarlayamadım gitti 🙁

        1. Kod:
        $page_content = preg_split(“//i”, $data[‘page_breaks’] == “y” ? nl2br(stripslashes($data[‘page_content’])) : stripslashes($data[‘page_content’]));

        2. Kod:
        $page_content = preg_replace(“//i”, “”, ($data[‘page_breaks’] == “y” ? nl2br(stripslashes($data[‘page_content’])) : stripslashes($data[‘page_content’])));

        Aslında mantığı aynı ama kısımda sanırım olay bitiyor. Bir de ==”y” ne demek acaba?

        Fikir olsun diye ekledim.

        Uğraşınız için hakkınızı helal edin.

        1. $page_content = preg_split(“//i”, $data[‘page_breaks’] == “y” ? nl2br(stripslashes($data[‘page_content’])) : stripslashes($data[‘page_content’]));

          Eğer içerikte sayfa kesme var ise enter kodlarını al, yok ise olduğu gibi göster. Kısaca bu işlemden önce kırpma yapılmış…

          Bu şekilde yardımcı olamam zira nerede ne yapmak istiyorsunuz, ilgili temada ilgili bölüm neresi görmem, bilmem gerekir. Kısaca siz ekrana basılan mesaj değişkenini bulup o mesajda kırpma işlemi uygulamanız gerekir.

          sistem BBCODE kullandığı için aşağıdaki işlemi mesajı ekrana basmadan uygulamanız lazım. yani mesajı ekrana nerede bastığınızı bulun ve işlemi değişkene uygulayın.

          $message = str_replace(array(“\n”, “\r”), array(”, “\n”), $message);
          $message = get_sub_taged_string($message, $row[‘bbcode_uid’], 60);

          1. Sevgili Admin,

            Bu konuya ait son mesajda yer alan en uzun kodlar ile işlemi hallettim.

            $message = strip_tags($message);
            $message = str_replace(array(“\t”,”\r”,”\n”), ‘ ‘,$message);
            $message_bol = explode(‘ ‘, $message); // metini bosluklara gore bolduk
            $message = ”;
            for($j = 0; $j < count($message_bol); $j++) {
            if ($message_bol[$j] != '') // veri yok mu? Atla, varsa ekle
            $message .= trim($message_bol[$j]).' ';
            }

            if( preg_match('/(.*?)\s/i', $text_length, $dizi) )
            $message = $text_length+strlen($dizi[0]);

            Üstteki gibi. Ama mesaj içeriğinde (http://orkmes.com/viewtopic.php?f=7&t=32) linkinin en önünde fotoğraf ekli. Fotoğrafı göstermemeyi başardım ama fotoğraf linkinin sayısı kadar metni yine göstermiyor. Tek bir nokta kaldı başarmak için. Son bir kez incelemenizi rica ederim.

            Teşekkürler.

  4. Bu arada, asıl kodların geldiği sayfa diğeriymiş. Tüm tanımlamalar ordaymış. O kodlar aşağıdaki gibidir:

    get(‘portal_config’)) === false)
    {
    $portal_config = $portal_cached_config = array();

    $sql = ‘SELECT config_name, config_value
    FROM ‘ . PORTAL_CONFIG_TABLE;
    $result = $db->sql_query($sql);

    while ($row = $db->sql_fetchrow($result))
    {
    $portal_cached_config[$row[‘config_name’]] = $row[‘config_value’];

    $portal_config[$row[‘config_name’]] = $row[‘config_value’];
    }
    $db->sql_freeresult($result);

    $cache->put(‘portal_config’, $portal_cached_config);
    }

    return $portal_config;
    }

    /**
    * Set config value. Creates missing config entry.
    * Only use this if your config value might exceed 255 characters, otherwise please use set_config
    */
    function set_portal_config($config_name, $config_value)
    {
    global $db, $cache, $portal_config;

    $sql = ‘UPDATE ‘ . PORTAL_CONFIG_TABLE . ”
    SET config_value = ‘” . $db->sql_escape($config_value) . “‘
    WHERE config_name = ‘” . $db->sql_escape($config_name) . “‘”;
    $db->sql_query($sql);

    if (!$db->sql_affectedrows() && !isset($portal_config[$config_name]))
    {
    $sql = ‘INSERT INTO ‘ . PORTAL_CONFIG_TABLE . ‘ ‘ . $db->sql_build_array(‘INSERT’, array(
    ‘config_name’ => $config_name,
    ‘config_value’ => $config_value));
    $db->sql_query($sql);
    }

    $portal_config[$config_name] = $config_value;

    $cache->destroy(‘portal_config’);
    }

    /**
    * Get portal modules
    */
    function obtain_portal_modules()
    {
    global $db, $cache, $portal_modules;

    if (($portal_modules = $cache->get(‘portal_modules’)) === false)
    {
    $portal_modules = $portal_cached_modules = array();

    $sql = ‘SELECT *
    FROM ‘ . PORTAL_MODULES_TABLE . ‘
    ORDER BY module_order ASC’;
    $result = $db->sql_query($sql);

    while ($row = $db->sql_fetchrow($result))
    {
    $portal_cached_modules[] = $row;

    $portal_modules[] = $row;
    }
    $db->sql_freeresult($result);

    $cache->put(‘portal_modules’, $portal_cached_modules);
    }

    return $portal_modules;
    }

    // fetch post for news & announce
    function phpbb_fetch_posts($module_id, $forum_from, $permissions, $number_of_posts, $text_length, $time, $type, $start = 0, $invert = false)
    {
    global $db, $phpbb_root_path, $auth, $user, $bbcode_bitfield, $bbcode, $portal_config, $config;

    $posts = $update_count = array();
    $post_time = ($time == 0) ? ” : ‘AND t.topic_time > ‘ . (time() – $time * 86400);
    $forum_from = (strpos($forum_from, ‘,’) !== FALSE) ? explode(‘,’, $forum_from) : (($forum_from != ”) ? array($forum_from) : array());
    $str_where = ”;
    $topic_icons = array(0);
    $have_icons = 0;

    if ($permissions == true)
    {
    $disallow_access = array_unique(array_keys($auth->acl_getf(‘!f_read’, true)));
    }
    else
    {
    $disallow_access = array();
    }

    if ($invert == true)
    {
    $disallow_access = array_merge($disallow_access, $forum_from);
    $forum_from = array();
    }

    $global_f = 0;

    if (sizeof($forum_from))
    {
    $disallow_access = array_diff($forum_from, $disallow_access);
    if (!sizeof($disallow_access))
    {
    return array();
    }

    foreach ($disallow_access as $acc_id)
    {
    $acc_id = (int) $acc_id;
    $str_where .= “t.forum_id = $acc_id OR “;
    if ($type == ‘announcements’ && $global_f 0)
    {
    $global_f = $acc_id;
    }
    }
    }
    else
    {
    foreach ($disallow_access as $acc_id)
    {
    $acc_id = (int) $acc_id;
    $str_where .= “t.forum_id $acc_id AND “;
    }
    }

    switch($type)
    {
    case “announcements”:
    $topic_type = ‘((t.topic_type = ‘ . POST_ANNOUNCE . ‘) OR (t.topic_type = ‘ . POST_GLOBAL . ‘))’;
    $str_where = (strlen($str_where) > 0) ? ‘AND (t.forum_id = 0 OR (‘ . trim(substr($str_where, 0, -4)) . ‘))’ : ”;
    $user_link = ‘t.topic_poster = u.user_id’;
    $post_link = ‘t.topic_first_post_id = p.post_id’;
    $topic_order = ‘t.topic_time DESC’;
    break;
    case “news”:
    $topic_type = ‘t.topic_type = ‘ . POST_NORMAL;
    $str_where = (strlen($str_where) > 0) ? ‘AND (‘ . trim(substr($str_where, 0, -4)) . ‘)’ : ”;
    $user_link = ($config[‘board3_news_style_’ . $module_id]) ? ‘t.topic_poster = u.user_id’ : (($config[‘board3_news_show_last_’ . $module_id]) ? ‘t.topic_last_poster_id = u.user_id’ : ‘t.topic_poster = u.user_id’ ) ;
    $post_link = ($config[‘board3_news_style_’ . $module_id]) ? ‘t.topic_first_post_id = p.post_id’ : (($config[‘board3_news_show_last_’ . $module_id]) ? ‘t.topic_last_post_id = p.post_id’ : ‘t.topic_first_post_id = p.post_id’ ) ;
    $topic_order = ($config[‘board3_news_show_last_’ . $module_id]) ? ‘t.topic_last_post_time DESC’ : ‘t.topic_time DESC’ ;
    break;
    case “news_all”:
    $topic_type = ‘(t.topic_type ‘ . POST_ANNOUNCE . ‘) AND (t.topic_type ‘ . POST_GLOBAL . ‘)’;
    $str_where = (strlen($str_where) > 0) ? ‘AND (‘ . trim(substr($str_where, 0, -4)) . ‘)’ : ”;
    $user_link = ($config[‘board3_news_style_’ . $module_id]) ? ‘t.topic_poster = u.user_id’ : (($config[‘board3_news_show_last_’ . $module_id]) ? ‘t.topic_last_poster_id = u.user_id’ : ‘t.topic_poster = u.user_id’ ) ;
    $post_link = ($config[‘board3_news_style_’ . $module_id]) ? ‘t.topic_first_post_id = p.post_id’ : (($config[‘board3_news_show_last_’ . $module_id]) ? ‘t.topic_last_post_id = p.post_id’ : ‘t.topic_first_post_id = p.post_id’ ) ;
    $topic_order = ($config[‘board3_news_show_last_’ . $module_id]) ? ‘t.topic_last_post_time DESC’ : ‘t.topic_time DESC’ ;
    break;

    default:
    $topic_type = $str_where = $user_link = $post_link = ”;
    $topic_order = ‘t.topic_time DESC’;
    // maybe use trigger_error here, as this shouldn’t happen
    }

    if ($type == ‘announcements’ && $global_f sql_query_limit($sql, 1);
    $row = $db->sql_fetchrow($result);
    $db->sql_freeresult($result);

    if (!sizeof($row))
    {
    return array();
    }
    $global_f = $row[‘forum_id’];
    }

    $sql_array = array(
    ‘SELECT’ => ‘t.forum_id,
    t.topic_id,
    t.topic_last_post_id,
    t.topic_last_post_time,
    t.topic_time,
    t.topic_title,
    t.topic_attachment,
    t.topic_views,
    t.poll_title,
    t.topic_replies,
    t.topic_replies_real,
    t.topic_poster,
    t.topic_type,
    t.topic_status,
    t.topic_last_poster_name,
    t.topic_last_poster_id,
    t.topic_last_poster_colour,
    t.icon_id,
    u.username,
    u.user_id,
    u.user_type,
    u.user_colour,
    p.post_id,
    p.poster_id,
    p.post_time,
    p.post_text,
    p.post_attachment,
    p.post_username,
    p.enable_smilies,
    p.enable_bbcode,
    p.enable_magic_url,
    p.bbcode_bitfield,
    p.bbcode_uid,
    f.forum_name,
    f.forum_image,
    f.enable_icons’,
    ‘FROM’ => array(
    TOPICS_TABLE => ‘t’,
    ),
    ‘LEFT_JOIN’ => array(
    array(
    ‘FROM’ => array(USERS_TABLE => ‘u’),
    ‘ON’ => $user_link,
    ),
    array(
    ‘FROM’ => array(FORUMS_TABLE => ‘f’),
    ‘ON’ => ‘t.forum_id=f.forum_id’,
    ),
    array(
    ‘FROM’ => array(POSTS_TABLE => ‘p’),
    ‘ON’ => $post_link,
    ),
    ),
    ‘WHERE’ => $topic_type . ‘
    ‘ . $post_time . ‘
    AND t.topic_status ‘ . ITEM_MOVED . ‘
    AND t.topic_approved = 1
    AND t.topic_moved_id = 0
    ‘ . $str_where,
    ‘ORDER_BY’ => $topic_order,
    );

    $sql_array[‘LEFT_JOIN’][] = array(‘FROM’ => array(TOPICS_POSTED_TABLE => ‘tp’), ‘ON’ => ‘tp.topic_id = t.topic_id AND tp.user_id = ‘ . $user->data[‘user_id’]);
    $sql_array[‘SELECT’] .= ‘, tp.topic_posted’;
    $sql = $db->sql_build_query(‘SELECT’, $sql_array);

    if ($number_of_posts != 0)
    {
    $result = $db->sql_query_limit($sql, $number_of_posts, $start);
    }
    else
    {
    $result = $db->sql_query($sql);
    }

    $i = 0;

    while ($row = $db->sql_fetchrow($result))
    {
    $attachments = array();
    if (($auth->acl_get(‘u_download’) && ($auth->acl_get(‘f_download’, $row[‘forum_id’]) || $row[‘forum_id’] == 0)) && $config[‘allow_attachments’] && $row[‘post_id’] && $row[‘post_attachment’])
    {
    // Pull attachment data
    $sql2 = ‘SELECT *
    FROM ‘ . ATTACHMENTS_TABLE . ‘
    WHERE post_msg_id = ‘. $row[‘post_id’] .’
    AND in_message = 0
    ORDER BY filetime DESC’;
    $result2 = $db->sql_query($sql2);

    while ($row2 = $db->sql_fetchrow($result2))
    {
    $attachments[] = $row2;
    }
    $db->sql_freeresult($result2);
    }

    $posts[$i][‘bbcode_uid’] = $row[‘bbcode_uid’];
    $len_check = $row[‘post_text’];
    $maxlen = $text_length;

    if (($text_length != 0) && (strlen($len_check) > $text_length))
    {
    $message = str_replace(array(“\n”, “\r”), array(”, “\n”), $row[‘post_text’]);
    $message = get_sub_taged_string($message, $row[‘bbcode_uid’], $maxlen);
    $posts[$i][‘striped’] = true;
    }
    else
    {
    $message = str_replace(“\n”, ‘ ‘, $row[‘post_text’]);
    }

    $row[‘bbcode_options’] = (($row[‘enable_bbcode’]) ? OPTION_FLAG_BBCODE : 0) + (($row[‘enable_smilies’]) ? OPTION_FLAG_SMILIES : 0) + (($row[‘enable_magic_url’]) ? OPTION_FLAG_LINKS : 0);
    $message = generate_text_for_display($message, $row[‘bbcode_uid’], $row[‘bbcode_bitfield’], $row[‘bbcode_options’]);

    if (!empty($attachments))
    {
    parse_attachments($row[‘forum_id’], $message, $attachments, $update_count);
    }

    if ($global_f 0) ? 1 : $have_icons;

    $posts[$i] = array_merge($posts[$i], array(
    ‘post_text’ => ap_validate($message),
    ‘topic_id’ => $row[‘topic_id’],
    ‘topic_last_post_id’ => $row[‘topic_last_post_id’],
    ‘topic_type’ => $row[‘topic_type’],
    ‘topic_posted’ => (isset($row[‘topic_posted’]) && $row[‘topic_posted’]) ? true : false,
    ‘icon_id’ => $row[‘icon_id’],
    ‘topic_status’ => $row[‘topic_status’],
    ‘forum_id’ => $row[‘forum_id’],
    ‘topic_replies’ => $row[‘topic_replies’],
    ‘topic_replies_real’ => $row[‘topic_replies_real’],
    ‘topic_time’ => $user->format_date($row[‘post_time’]),
    ‘topic_day’ => $user->format_date($row[‘post_time’], $format = ‘d’),
    ‘topic_month’ => $user->format_date($row[‘post_time’], $format = ‘M’),
    ‘topic_year’ => $user->format_date($row[‘post_time’], $format = ‘Y’),
    ‘topic_last_post_time’ => $row[‘topic_last_post_time’],
    ‘topic_title’ => $row[‘topic_title’],
    ‘username’ => $row[‘username’],
    ‘username_full’ => get_username_string(‘full’, $row[‘user_id’], $row[‘username’], $row[‘user_colour’], $row[‘post_username’]),
    ‘username_full_last’ => get_username_string(‘full’, $row[‘topic_last_poster_id’], $row[‘topic_last_poster_name’], $row[‘topic_last_poster_colour’], $row[‘topic_last_poster_name’]),
    ‘user_id’ => $row[‘user_id’],
    ‘user_type’ => $row[‘user_type’],
    ‘user_colour’ => $row[‘user_colour’],
    ‘poll’ => ($row[‘poll_title’]) ? true : false,
    ‘attachment’ => ($row[‘topic_attachment’]) ? true : false,
    ‘topic_views’ => $row[‘topic_views’],
    ‘forum_name’ => $row[‘forum_name’],
    ‘forum_image’ => ($row[‘forum_image’]) ? ” : ”,
    ‘attachments’ => (!empty($attachments)) ? $attachments : array(),
    ));
    $posts[‘global_id’] = $global_f;
    ++$i;
    }
    $db->sql_freeresult($result);

    $posts[‘topic_icons’] = ((max($topic_icons) > 0) && $have_icons) ? true : false;
    $posts[‘topic_count’] = $i;

    if ($global_f 0)
    {
    return (strlen(utf8_decode($title)) > $limit + 3) ? truncate_string($title, $limit) . ‘…’ : $title;
    }
    else
    {
    return $title;
    }
    }

    /**
    * Cut post text to given length
    *
    * @param $message string post text
    * @param $bbcode_uid string bbcode uid
    * @param $length int The desired length
    */
    function get_sub_taged_string($message, $bbcode_uid, $length)
    {
    global $phpbb_root_path, $phpEx;

    if(!class_exists(‘phpbb_trim_message’))
    {
    include($phpbb_root_path . ‘includes/trim_message/trim_message.’ . $phpEx);
    }

    if(!class_exists(‘phpbb_trim_message_bbcodes’))
    {
    include($phpbb_root_path . ‘includes/trim_message/bbcodes.’ . $phpEx);
    }

    $object = new phpbb_trim_message($message, $bbcode_uid, $length);
    // Ready to get parsed:
    return $object->message();
    }

    function ap_validate($str)
    {
    $s = str_replace(”, ”, $str);
    return str_replace(”, ”, $s);
    }

    /**
    * Pagination routine, generates archive number sequence
    */
    function generate_portal_pagination($base_url, $num_items, $per_page, $start_item, $type, $add_prevnext_text = false, $tpl_prefix = ”)
    {
    global $template, $user;

    switch($type)
    {
    case “announcements”:
    $pagination_type = ‘ap’;
    $anker = ‘#a’;
    break;
    case “news”:
    case “news_all”:
    $pagination_type = ‘np’;
    $anker = ‘#n’;
    break;

    default:
    // this shouldn’t happend @todo: use trigger_error()
    $pagination_type = ‘ap’;
    $anker = ‘#a’;
    }

    // Make sure $per_page is a valid value
    $per_page = ($per_page <= 0) ? 1 : $per_page;

    $seperator = '’ . $user->lang[‘COMMA_SEPARATOR’] . ”;
    $total_pages = ceil($num_items / $per_page);

    if ($total_pages == 1 || !$num_items)
    {
    return false;
    }

    $on_page = floor($start_item / $per_page) + 1;
    $url_delim = (strpos($base_url, ‘?’) === false) ? ‘?’ : ‘&’;

    $page_string = ($on_page == 1) ? ‘1‘ : ‘1‘;

    if ($total_pages > 5)
    {
    $start_cnt = min(max(1, $on_page – 4), $total_pages – 5);
    $end_cnt = max(min($total_pages, $on_page + 4), 6);

    $page_string .= ($start_cnt > 1) ? ‘ … ‘ : $seperator;

    for ($i = $start_cnt + 1; $i < $end_cnt; ++$i)
    {
    $page_string .= ($i == $on_page) ? '‘ . $i . ‘‘ : ‘‘ . $i . ‘‘;
    if ($i < $end_cnt – 1)
    {
    $page_string .= $seperator;
    }
    }
    $page_string .= ($end_cnt < $total_pages) ? ' … ' : $seperator;
    }
    else
    {
    $page_string .= $seperator;

    for ($i = 2; $i < $total_pages; ++$i)
    {
    $page_string .= ($i == $on_page) ? '‘ . $i . ‘‘ : ‘‘ . $i . ‘‘;
    if ($i < $total_pages)
    {
    $page_string .= $seperator;
    }
    }
    }
    $page_string .= ($on_page == $total_pages) ? '‘ . $total_pages . ‘‘ : ‘‘ . $total_pages . ‘‘;

    if ($add_prevnext_text)
    {
    if ($on_page != 1)
    {
    $page_string = ‘‘ . $user->lang[‘PREVIOUS’] . ‘  ‘ . $page_string;
    }

    if ($on_page != $total_pages)
    {
    $page_string .= ‘  ‘ . $user->lang[‘NEXT’] . ‘‘;
    }
    }

    $template->assign_vars(array(
    $tpl_prefix . ‘BASE_URL’ => $base_url,
    ‘A_’ . $tpl_prefix . ‘BASE_URL’ => addslashes($base_url),
    $tpl_prefix . ‘PER_PAGE’ => $per_page,

    $tpl_prefix . ‘PREVIOUS_PAGE’ => ($on_page == 1) ? ” : $base_url . “{$url_delim}” . $pagination_type . ‘=’ . (($on_page – 2) * $per_page) . $anker,
    $tpl_prefix . ‘NEXT_PAGE’ => ($on_page == $total_pages) ? ” : $base_url . “{$url_delim}” . $pagination_type . ‘=’ . ($on_page * $per_page) . $anker,
    $tpl_prefix . ‘TOTAL_PAGES’ => $total_pages,
    ));

    return $page_string;
    }

    /**
    * Format user date for the Birthday block
    * Note: this function is used as we already added timezones, etc
    *
    * borrowed from Upcoming Birthday Mod
    * @author: lefty
    * changed to work outside session.php by B3P
    * @function: format_dateucb
    */

    function format_birthday($date, $format = false)
    {
    global $user;

    $lang_dates = $user->lang[‘datetime’];
    $format = (!$format) ? $user->data[‘user_dateformat’] : $format;

    // Short representation of month in format
    if ((strpos($format, ‘\M’) === false && strpos($format, ‘M’) !== false) || (strpos($format, ‘\r’) === false && strpos($format, ‘r’) !== false))
    {
    $lang_dates[‘May’] = $lang_dates[‘May_short’];
    }
    unset($lang_dates[‘May_short’]);

    // We need to create a UNIX timestamp for date()
    $day = substr($date, 0, strpos($date, ‘-‘));
    $month = substr($date, (strpos($date, ‘-‘)+1), 2);
    $year = substr($date, -4);
    $birthday_time = mktime(0, 0, 0, $month, $day, $year);

    return strtr(@date(str_replace(‘|’, ”, $format), $birthday_time), $lang_dates);
    }

    /**
    * Check if table exists
    * @copyright (c) 2007 phpBB Group
    *
    * @param string $table_name The table name to check for
    * @return bool true if table exists, else false
    */
    function sql_table_exists($table_name)
    {
    global $db;
    $db->sql_return_on_error(true);
    $result = $db->sql_query_limit(‘SELECT * FROM ‘ . $db->sql_escape($table_name), 1);
    $db->sql_return_on_error(false);

    if ($result)
    {
    $db->sql_freeresult($result);
    return true;
    }

    return false;
    }

    /**
    * get topic tracking info for news
    * based on get_complete_tracking_info of phpBB3
    * this should reduce the queries for the news and announcements block
    */
    function get_portal_tracking_info($fetch_news)
    {
    global $config, $user;

    $last_read = $topic_ids = $forum_ids = $tracking_info = $rev_forum_ids = array();

    /**
    * group everything by the forum IDs
    */
    $count = $fetch_news[‘topic_count’];
    for ($i = 0; $i $current_forum)
    {
    if ($config[‘load_db_lastread’] && $user->data[‘is_registered’])
    {
    global $db;

    $mark_time = array();

    $sql = ‘SELECT topic_id, mark_time
    FROM ‘ . TOPICS_TRACK_TABLE . ”
    WHERE user_id = {$user->data[‘user_id’]}
    AND ” . $db->sql_in_set(‘topic_id’, $current_forum);
    $result = $db->sql_query($sql);

    while ($row = $db->sql_fetchrow($result))
    {
    $last_read[$row[‘topic_id’]] = $row[‘mark_time’];
    }
    $db->sql_freeresult($result);

    $current_forum = array_diff($current_forum, array_keys($last_read));

    if (sizeof($topic_ids))
    {
    $sql = ‘SELECT forum_id, mark_time
    FROM ‘ . FORUMS_TRACK_TABLE . ”
    WHERE user_id = {$user->data[‘user_id’]}
    AND ” . $db->sql_in_set(‘forum_id’, $forum_ids);
    $result = $db->sql_query($sql);

    while ($row = $db->sql_fetchrow($result))
    {
    $mark_time[$row[‘forum_id’]] = $row[‘mark_time’];
    }
    $db->sql_freeresult($result);

    // @todo: do not use $current_forum here as this is already used by the outside foreach
    foreach($forum_ids as $current_forum)
    {
    $user_lastmark[$current_forum] = (isset($mark_time[$current_forum])) ? $mark_time[$current_forum] : $user->data[‘user_lastmark’];
    }

    // @todo: also check if $user_lastmark has been defined for this specific forum_id
    foreach ($topic_ids as $topic_id)
    {
    $last_read[$topic_id] = (!isset($last_read[$topic_id]) || $user_lastmark[$rev_forum_ids[$topic_id]] > $last_read[$topic_id]) ? $user_lastmark[$rev_forum_ids[$topic_id]] : $last_read[$topic_id];
    }
    }
    }
    else if ($config[‘load_anon_lastread’] || $user->data[‘is_registered’])
    {
    global $tracking_topics;

    if (!isset($tracking_topics) || !sizeof($tracking_topics))
    {
    $tracking_topics = (isset($_COOKIE[$config[‘cookie_name’] . ‘_track’])) ? ((STRIP) ? stripslashes($_COOKIE[$config[‘cookie_name’] . ‘_track’]) : $_COOKIE[$config[‘cookie_name’] . ‘_track’]) : ”;
    $tracking_topics = ($tracking_topics) ? tracking_unserialize($tracking_topics) : array();
    }

    if (!$user->data[‘is_registered’])
    {
    $user_lastmark = (isset($tracking_topics[‘l’])) ? base_convert($tracking_topics[‘l’], 36, 10) + $config[‘board_startdate’] : 0;
    }
    else
    {
    $user_lastmark = $user->data[‘user_lastmark’];
    }

    foreach ($topic_ids as $topic_id)
    {
    $topic_id36 = base_convert($topic_id, 10, 36);

    if (isset($tracking_topics[‘t’][$topic_id36]))
    {
    $last_read[$topic_id] = base_convert($tracking_topics[‘t’][$topic_id36], 36, 10) + $config[‘board_startdate’];
    }
    }

    $topic_ids = array_diff($topic_ids, array_keys($last_read));

    if (sizeof($topic_ids))
    {
    $mark_time = array();

    if (isset($tracking_topics[‘f’][$forum_id]))
    {
    $mark_time[$forum_id] = base_convert($tracking_topics[‘f’][$forum_id], 36, 10) + $config[‘board_startdate’];
    }

    $user_lastmark = (isset($mark_time[$forum_id])) ? $mark_time[$forum_id] : $user_lastmark;

    foreach ($topic_ids as $topic_id)
    {
    $last_read[$topic_id] = $user_lastmark;
    }
    }
    }
    }

    return $last_read;
    }

    /**
    * This function will install the basic set of portal modules
    *
    * only set $purge_modules to false if you already know that the table is empty
    * set $u_action to where the user should be redirected after this
    * note that already existing data won’t be deleted from the config and portal_config
    * just to make sure we don’t overwrite anything, the IDs won’t be reset
    * !! this function should usually only be executed once upon installing the portal !!
    * DO NOT set $purge_modules to false unless you want to auto-add all modules again after deleting them (i.e. if your database was corrupted)
    */
    function board3_basic_install($mode = ‘install’, $purge_modules = true, $u_action = ”)
    {
    global $db, $phpbb_root_path, $phpEx, $cache, $user, $table_prefix, $config;

    // Shouldn’t happen but we should check this nonetheless
    if (!defined(‘PORTAL_MODULES_TABLE’))
    {
    include($phpbb_root_path . ‘portal/includes/constants.’ . $phpEx);
    }

    if ($mode == ‘install’)
    {
    $directory = $phpbb_root_path . ‘portal/modules/’;

    if ($purge_modules)
    {
    $sql = ‘DELETE FROM ‘ . PORTAL_MODULES_TABLE;
    $result = $db->sql_query($sql);
    $db->sql_freeresult($result);
    }

    /*
    * this is a list of the basic modules that will be installed
    * module_name => array(module_column, module_order)
    */
    $modules_ary = array(
    // left column
    ‘portal_main_menu’ => array(1, 1),
    ‘portal_stylechanger’ => array(1, 2),
    ‘portal_birthday_list’ => array(1, 3),
    ‘portal_clock’ => array(1, 4),
    ‘portal_search’ => array(1, 5),
    ‘portal_attachments’ => array(1, 7),
    ‘portal_topposters’ => array(1, 8),
    ‘portal_latest_members’ => array(1, 9),
    ‘portal_link_us’ => array(1, 10),

    // center column
    ‘portal_welcome’ => array(2, 1),
    ‘portal_recent’ => array(2, 2),
    ‘portal_announcements’ => array(2, 3),
    ‘portal_news’ => array(2, 4),
    ‘portal_poll’ => array(2, 5),
    ‘portal_whois_online’ => array(2, 6),

    // right column
    ‘portal_user_menu’ => array(3, 1),
    ‘portal_statistics’ => array(3, 2),
    ‘portal_calendar’ => array(3, 3),
    ‘portal_leaders’ => array(3, 4),
    ‘portal_latest_bots’ => array(3, 5),
    ‘portal_links’ => array(3, 6),
    );

    foreach ($modules_ary as $module_name => $module_data)
    {
    $class_name = $module_name . ‘_module’;
    if (!class_exists($class_name))
    {
    include($directory . $module_name . ‘.’ . $phpEx);
    }
    if (!class_exists($class_name))
    {
    trigger_error(‘CLASS_NOT_FOUND’, E_USER_ERROR);
    }

    $c_class = new $class_name();

    $sql_ary = array(
    ‘module_classname’ => substr($module_name, 7),
    ‘module_column’ => $module_data[0],
    ‘module_order’ => $module_data[1],
    ‘module_name’ => $c_class->name,
    ‘module_image_src’ => $c_class->image_src,
    ‘module_group_ids’ => ”,
    ‘module_image_width’ => 16,
    ‘module_image_height’ => 16,
    ‘module_status’ => B3_MODULE_ENABLED,
    );
    $sql = ‘INSERT INTO ‘ . PORTAL_MODULES_TABLE . ‘ ‘ . $db->sql_build_array(‘INSERT’, $sql_ary);
    $db->sql_query($sql);

    $c_class->install($db->sql_nextid());
    }

    // Make sure we get rid of old data
    $cache->destroy(‘portal_modules’);

    return $user->lang[‘PORTAL_BASIC_INSTALL’];
    }
    else
    {
    $skip_entries = array(
    ‘board3_right_column_width’,
    ‘board3_left_column_width’,
    ‘board3_forum_index’,
    ‘board3_version_check’,
    ‘board3_right_column’,
    ‘board3_left_column’,
    ‘board3_enable’,
    ‘board3_portal_version’,
    ‘board3_phpbb_menu’,
    ‘board3_display_jumpbox’,
    );
    $sql = ‘DELETE FROM ‘ . CONFIG_TABLE . ‘ WHERE config_name ‘ . $db->sql_like_expression(utf8_clean_string(‘board3_’) . $db->any_char) . ‘
    AND ‘ . $db->sql_in_set(‘config_name’, $skip_entries, true);
    $db->sql_query($sql);

    return $user->lang[‘PORTAL_BASIC_UNINSTALL’];
    }
    }

    /**
    * check if the entered source file actually exists
    */
    function check_file_src($value, $key, $module_id, $force_error = true)
    {
    global $db, $phpbb_root_path, $phpEx, $user;

    $error = ”;

    // We check if the chosen file is present in all active styles
    $sql = ‘SELECT st.theme_path
    FROM ‘ . STYLES_THEME_TABLE . ‘ st
    LEFT JOIN ‘ . STYLES_TABLE . ‘ s
    ON (st.theme_id = s.style_id)
    WHERE s.style_active = 1’;

    $result = $db->sql_query($sql);
    while ($row = $db->sql_fetchrow($result))
    {
    if (!file_exists($phpbb_root_path . ‘styles/’ . $row[‘theme_path’] . ‘/theme/images/portal/’ . $value))
    {
    $error .= $user->lang[‘B3P_FILE_NOT_FOUND’] . ‘: styles/’ . $row[‘theme_path’] . ‘/theme/images/portal/’ . $value . ”;
    }
    }
    $db->sql_freeresult($result);

    if (!empty($error))
    {
    if ($force_error)
    {
    trigger_error($error . adm_back_link(append_sid(“{$phpbb_root_path}adm/index.$phpEx”, ‘i=portal&mode=config&module_id=’ . $module_id)), E_USER_WARNING );
    }
    else
    {
    return $error;
    }
    }
    else
    {
    return false;
    }
    }

    1. Siz PHPBB Forumda nerede kullanacaksınız kesilen metinleri?

      Verdiğiniz kodlarda

      if (($text_length != 0) && (strlen($len_check) > $text_length))
      {
      $message = str_replace(array(“\n”, “\r”), array(”, “\n”), $row['post_text']);
      $message = get_sub_taged_string($message, $row['bbcode_uid'], $maxlen);
      $posts[$i]['striped'] = true;
      }
      else
      {
      $message = str_replace(“\n”, ‘ ‘, $row['post_text']);
      }
      

      Mesajın alındığı yer var

      ayrıca eğer mesajların kırpılmasını istemiş iseniz (admin panelde ayarları var sanırım)

      if (($text_length != 0) && (strlen($len_check) > $text_length))
      {
      $message = str_replace(array(“\n”, “\r”), array(”, “\n”), $row[‘post_text’]);
      $message = get_sub_taged_string($message, $row[‘bbcode_uid’], $maxlen);
      $posts[$i][‘striped’] = true;
      }
      else
      {
      $message = str_replace(“\n”, ‘ ‘, $row[‘post_text’]);
      }

      kodları kullanılmış.

      Sonuç itibariyle o verdiğiniz kodlardan çıkan sonuç sizin mesajınız, $message değişkenine atanıyor, içeriği kırpacaksanız $mesaage değişkeninde uygulamanız gerekir.

  5. İlginiz için çok teşekkür ederim. Yoğunluktan dolayı ancak uygulama fırsatım oldu. Karakterleri istediğim gibi kısaltıyor ama içerikte bir fotoğraf varsa onu silmiyor. Fotoğrafın olduğu kod kadar yazıyı eksik veriyor. O kısmı nasıl düzelteceğiz?

    1. Merhaba
      $v = strip_tags($v); fonksiyonu kullanarak. ilgili fonksiyona aşağıda ekledim.

      function bol($v,$b=10) {
      /*
      $v -> veri
      $b -> Boşluk adedi / varsayılan deger 10 
      */
          $v= strip_tags($v);
          $v = trim($v);
          $v = str_replace(array("\t","\r","\n"), ' ',$v);
          $icerik_bol = explode(' ', $v); // metini bosluklara gore bolduk
          $v = '';
          for($i = 0; $i < count($icerik_bol); $i++) {
               if ($icerik_bol[$i] != '') { // veri yok mu? Atla, varsa ekle
                  if($i<$b)
                  $v .= trim($icerik_bol[$i]).' ';
              }
          }
          $v = trim($v);
          $toplam = explode(' ', $v); // metini bosluklara gore bolduk
          if( count( $icerik_bol ) > count( $toplam  ))
              return $v.'... ';
          return $v;  
      }
      
  6. Merhaba sayın admin,

    assign_block_vars(‘news_row’, array(
    ‘S_NO_TOPICS’ => true,
    ‘S_NOT_LAST’ => false
    ));
    }
    else
    {
    for ($i = 0; $i lang[‘READ_FULL’];
    }
    else
    {
    $open_bracket = ”;
    $close_bracket = ”;
    $read_full = ”;
    }

    $template->assign_block_vars(‘news_row’, array(
    ‘ATTACH_ICON_IMG’ => ($fetch_news[$i][‘attachment’]) ? $user->img(‘icon_attach’, $user->lang[‘TOTAL_ATTACHMENTS’]) : ”,
    ‘TITLE’ => $fetch_news[$i][‘topic_title’],
    ‘POSTER’ => $fetch_news[$i][‘username’],
    ‘U_USER_PROFILE’ => (($fetch_news[$i][‘user_type’] == USER_NORMAL || $fetch_news[$i][‘user_type’] == USER_FOUNDER) && $fetch_news[$i][‘user_id’] != ANONYMOUS) ? append_sid(“{$phpbb_root_path}memberlist.$phpEx”, ‘mode=viewprofile&u=’ . $fetch_news[$i][‘user_id’]) : ”,
    ‘TIME’ => $fetch_news[$i][‘topic_time’],
    ‘TEXT’ => $fetch_news[$i][‘post_text’],
    ‘REPLIES’ => $fetch_news[$i][‘topic_replies’],
    ‘TOPIC_VIEWS’ => $fetch_news[$i][‘topic_views’],
    ‘U_LAST_COMMENTS’ => $phpbb_root_path . ‘viewtopic.’ . $phpEx . ‘?t=’ . $fetch_news[$i][‘topic_id’] . ‘&p=’ . $fetch_news[$i][‘topic_last_post_id’] . ‘#p’ . $fetch_news[$i][‘topic_last_post_id’],
    ‘U_VIEW_COMMENTS’ => append_sid($phpbb_root_path . ‘viewtopic.’ . $phpEx . ‘?t=’ . $fetch_news[$i][‘topic_id’] . ‘&f=’ . $fetch_news[$i][‘forum_id’]),
    ‘U_POST_COMMENT’ => append_sid($phpbb_root_path . ‘posting.’ . $phpEx . ‘?mode=reply&t=’ . $fetch_news[$i][‘topic_id’] . ‘&f=’ . $fetch_news[$i][‘forum_id’]),
    ‘U_READ_FULL’ => append_sid($_SERVER[‘PHP_SELF’] . ‘?article=’ . $i),
    ‘L_READ_FULL’ => $read_full,
    ‘OPEN’ => $open_bracket,
    ‘CLOSE’ => $close_bracket,
    ‘S_NOT_LAST’ => ($i $fetch_news[$i][‘poll’],
    ‘MINI_POST_IMG’ => $user->img(‘icon_post_target’, ‘POST’),
    ‘S_DUYURU’ => $fetch_news[$i][‘forum_id’], 25 ? TRUE : FALSE,
    ));
    }
    }
    }
    else
    {
    $fetch_news = phpbb_fetch_posts($config[‘portal_news_forum’], $config[‘portal_number_of_news’], 0, 0, ($config[‘portal_show_all_news’]) ? ‘news_all’ : ‘news’);

    $i = intval($HTTP_GET_VARS[‘article’]);

    $template->assign_block_vars(‘news_row’, array(
    ‘ATTACH_ICON_IMG’ => ($fetch_news[$i][‘attachment’]) ? $user->img(‘icon_attach’, $user->lang[‘TOTAL_ATTACHMENTS’]) : ”,
    ‘TITLE’ => $fetch_news[$i][‘topic_title’],
    ‘POSTER’ => $fetch_news[$i][‘username’],
    ‘TIME’ => $fetch_news[$i][‘topic_time’],
    ‘TEXT’ => $fetch_news[$i][‘post_text’],
    ‘REPLIES’ => $fetch_news[$i][‘topic_replies’],
    ‘TOPIC_VIEWS’ => $fetch_news[$i][‘topic_views’],
    ‘U_LAST_COMMENTS’ => $phpbb_root_path . ‘viewtopic.’ . $phpEx . ‘?t=’ . $fetch_news[$i][‘topic_id’] . ‘&p=’ . $fetch_news[$i][‘topic_last_post_id’] . ‘#p’ . $fetch_news[$i][‘topic_last_post_id’],
    ‘U_VIEW_COMMENTS’ => append_sid($phpbb_root_path . ‘viewtopic.’ . $phpEx . ‘?t=’ . $fetch_news[$i][‘topic_id’] . ‘&f=’ . $fetch_news[$i][‘forum_id’]),
    ‘U_POST_COMMENT’ => append_sid($phpbb_root_path . ‘posting.’ . $phpEx . ‘?mode=reply&t=’ . $fetch_news[$i][‘topic_id’] . ‘&f=’ . $fetch_news[$i][‘forum_id’]),
    ‘S_POLL’ => $fetch_news[$i][‘poll’]
    ));
    }

    // Assign specific vars
    $template->assign_vars(array(
    ‘S_DISPLAY_NEWS’ => true,
    ));

    ?>

    şeklinde bir sayfam var. En alta yazdığınız kodu bu sayfaya nasıl uyarlayabilirim? Tüm uğraşlarıma rağmen yapamadım. Desteğinizi rica ederim.

    Saygılar.

    1. Kodlarınızda

      ‘TEXT’	 => $fetch_news[$i]['post_text'],

      olan bölümde uygulayabilirsiniz. Yukarıdaki örnek anlatım, açıklama çerçevesinde olduğu için pratik değildir. İlgili PHP dosyasının başına aşağıdaki gibi fonksiyonu ekleyin, ilgili satırıda fonksiyonunuzu çağıracağınız biçimde değiştirin. Örneğin 20 boşluk verecekseniz, ilgili satır şu şekilde olacak

      ‘TEXT’	 => bol($fetch_news[$i]['post_text'],20),
      function bol($v,$b=3) {
      /*
      $v -> veri
      $b -> Boşluk adedi / varsayılan deger 10 
      */
      	$v = trim($v);
      	$v = str_replace(array("\t","\r","\n"), ' ',$v);
      	$icerik_bol = explode(' ', $v); // metini bosluklara gore bolduk
      	$v = '';
      	for($i = 0; $i < count($icerik_bol); $i++) {
      		 if ($icerik_bol[$i] != '') { // veri yok mu? Atla, varsa ekle
      			if($i<$b)
      			$v .= trim($icerik_bol[$i]).' ';
      		}
      	}
      	$v = trim($v);
      	$toplam = explode(' ', $v); // metini bosluklara gore bolduk
      	if( count( $icerik_bol ) > count( $toplam  ))
      		return $v.'... ';
      	return $v;	
      }

Bir Cevap Yazın

E-posta hesabınız yayımlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir

Notice: ob_end_flush(): failed to send buffer of zlib output compression (0) in /home/veblebi/public_html/wp-includes/functions.php on line 3644