Strona 1 z 1

Przycinanie tekstu w modzie

: 30 marca 2011, 20:26
autor: GG4v32
Mam taki kod do wyświetlania na stronie zwykłej najpopularniejszych tematów z forum

Kod: Zaznacz cały

<?php
/* KONFIGURACJA */
  
//Liczba wyświetlanych topiców
$TOPICS_NUMBER=10;
  
//Konfiguracja bazy
$DB_HOST=';
$DB_USER='';
$DB_PASSWORD='l';
$DB_NAME='';
  
//Konfiguracja danych o forum
$FORUM_PATH = 'phpbb3/'; //ścieżka do forum
$TABLE_PREFIX = 'phpbb3_'; //prefiks przed nazwą tabeli
//$EXCLUDE_FORUMS = array(1,2); //nie wyświetlaj z tych forów
/* SZABLONY WYŚWIETLANIA */
  
$CONTENT = '{$topic_title}</br>';
  
//Konstrukcja linku - na wypadek wykorzystania mod_rewrite na forum
$TOPIC_TITLE = '<a href="'.$FORUM_PATH. 'viewtopic.php?f={$forum_id}&t={$topic_id}topic={$topic_id}">{$topic_title}</a>';
  
$COLUMNS = array(); // konfiguracja kolumn
$TABLE_TOPICS = $TABLE_PREFIX; // nazwa tabeli z topicami
$TABLE_FORUM = $TABLE_PREFIX; // nazwa tabeli z forami
$TABLE_USERS = $TABLE_PREFIX; // nazwa tabeli z userami
$TABLE_POSTS = $TABLE_PREFIX; // nazwa tabeli z postami
  
//Dokończenie odpowiednich nazw;
$TABLE_TOPICS .= 'topics';
$TABLE_FORUM .= 'forum';
$TABLE_USERS .= 'users';
$TABLE_POSTS .= 'posts';
  
/* POBRANIE INFORMACJI */
//w tej zmiennej będziemy przechowywać to co na końcu będziemy chcieli wyświetlić
$output = array();
//Dodajemy początek
$output[] = $BEGIN;
  
/*$exclude='';
//Dla każdego forum, które chcemy wykluczyć tworzymy warunek
foreach($EXCLUDE_FORUMS as $forum)$exclude .= "AND forum_id<>$forum ";
//Jeśli wykluczamy jakieś fora, dodajemy na początku dyrektywe WHERE
if($exclude!=''){
$exclude = ' WHERE '.substr($exclude,4);
}*/
  
//Tworzymy połączenie z DBMS (Systemem zarządzania bazą danych)
$link = mysql_connect($DB_HOST,$DB_USER,$DB_PASSWORD);
//Wybieramy bazę
mysql_select_db($DB_NAME,$link);
  
$sql = "SELECT topic_id, forum_id, topic_time, topic_title
FROM $TABLE_TOPICS ORDER BY topic_views DESC LIMIT $TOPICS_NUMBER;";
  
//Pobieramy 10 najnowszych topiców - sortujemy malejąco według czasu (ORDER BY)
// i ograniczamy ilość dyrektywą SQL LIMIT
$topics = mysql_query($sql,$link);
  
//Przetwarzamy wszystkie tematy
while(($row=mysql_fetch_array($topics))!=NULL){
$sql = "SELECT post_id, poster_id, topic_id, post_time FROM $TABLE_POSTS
WHERE topic_id=$row[topic_id] ORDER BY post_time DESC LIMIT 1;";
  
//Pobieramy ingormacje o ostatnim poście w tym topicu
$result = mysql_query($sql,$link);
$posts = mysql_fetch_array($result);
  
//Pobieramy informacje o urzytwkoniku, który napisał ostatniego posta
$sql = "SELECT user_id, username FROM $TABLE_USERS
WHERE user_id=$posts[poster_id];";
$result = mysql_query($sql,$link);
$user = mysql_fetch_array($result);
  
$msg = $CONTENT;
  
if($posts!=NULL){
//Tutaj następuje zamiana z szablonu do treści
$topic_title = $TOPIC_TITLE;
$topic_title = str_replace('{$topic_title}', $row['topic_title'],substr($topic_title, 0, 90).'...');
$topic_title = str_replace('{$topic_id}', $row['topic_id'],$topic_title);
$topic_title = str_replace('{$forum_id}', $row['forum_id'],$topic_title);
  
$msg = str_replace('{$topic_title}',$topic_title,$msg);
}else{
continue;
}
if($user!=NULL){
//tutaj zmieniamy szablon {$topic_author} na rzeczywiste dane
$msg = str_replace('{$topic_author}', $user['username'],$msg);
}else{
$msg = str_replace('{$topic_author}', 'Anonymous',$msg);
}
//dodajemy wynik do wyświetlenia
$output[] = $msg;
}
  
$output[] = $END;
  
/* wyświetlenie informacji */
echo implode("",$output);
  
?>
I mój problem polega na tym, że chciałbym, aby te wyrazy tematów zostały przycinane po 30 znakach. Teraz w obecnej postaci działa przycinanie do 90 liter, jednak jeśli wpiszę np. 80, to się coś psuje. Dlaczego tak jest? Bardzo zależy mi na tym, by przycinało mi do tych 30 liter. Ma ktoś jakiś pomysł jak to naprawić i dlaczego tak się dzieje?