PDA

View Full Version : سوال: کدی که وقتی عنوان طولانی شد بجاش . . . نشون بده



mohamad3519
جمعه 09 آبان 1393, 09:48 صبح
سلام
من یه صفحه ای طراحی کردم و یک بخش داره به اسم موضوعات.این کادر موضوعات محدودیت از لحاظ width داره.
حالا میخوام اگه موضوعاتش طولانی شد بعد از 20 کاراکتر دیگه سه نقطه بذاره

arash691
جمعه 09 آبان 1393, 10:05 صبح
از تابع substr استفاده بکن : http://php.net/manual/en/function.substr.php

Tarragon
جمعه 09 آبان 1393, 10:08 صبح
سلام

if(strlen($title) > 20 ) echo substr($title, 0, 20) . ' . . .'; else echo $title;

MMSHFE
جمعه 09 آبان 1393, 10:20 صبح
البته بهتره برای متون فارسی از mb_substr و mb_strlen استفاده کنید.

Unique
جمعه 09 آبان 1393, 23:45 عصر
البته بهتره متن را نشون بدین و از css (http://css-tricks.com/snippets/css/truncate-string-with-ellipsis/) استفاده کنید. نمیشه همیشه مطمئن بود که هر تعداد کاراکتری یک طول مشخص خواهد داشت.

mohamad3519
پنج شنبه 15 آبان 1393, 10:15 صبح
البته بهتره متن را نشون بدین و از css (http://css-tricks.com/snippets/css/truncate-string-with-ellipsis/) استفاده کنید. نمیشه همیشه مطمئن بود که هر تعداد کاراکتری یک طول مشخص خواهد داشت.

سلام.میشه لطفا بیشتر راهنمایی کنید ؟

mohamad3519
پنج شنبه 15 آبان 1393, 10:16 صبح
سلام

if(strlen($title) > 20 ) echo substr($title, 0, 20) . ' . . .'; else echo $title;

من PHP بلد نیستم
میشه کد کامل بدین لطفا ؟

saeed-71
پنج شنبه 15 آبان 1393, 11:49 صبح
<p><?php if(empty($rows['det'])){ echo 'هیچ توضیحی توسط فروشنده ثبت نشده است'; }else{ echo mb_substr($rows['det'],0,500,'utf-8').'...'; } ?></p>

rezakho
پنج شنبه 15 آبان 1393, 11:52 صبح
میتونید از ویژگی text-overflow در css استفاده کنید
وقتی هم که مثلا hover شد، ارتفاع رو زیاد کنید تا بقیه متن نمایش داده بشه
این هم راهنما
http://css-tricks.com/almanac/properties/t/text-overflow

bagherok
پنج شنبه 15 آبان 1393, 18:10 عصر
اگه نمیخوایید متن خلاصه شده ای که قراره نمایش بدید تا حد امکان خراب بشه یا به اصلاح معنی خودش رو از دست نده
این تابع میتونه کمکتون بکنه.

یک تابع ساده برای خلاصه سازی و کوتاه سازی متن.
کار ویژه ای که این تابع میکنه اینه متن رو تا حد امکان خراب نمی کنه.
نحوه کارش به این صورته که مثلا عدد 500 رو به عنوان تعداد کاراکتر میگیره و عدد مثلا 100 به عنوان Offset. از کاراکتر 500 شروع میکنه 100 کاراکتر به عقب برمیگرده تا به نقطه یا کاما یا خط جدید یا ... برسه (اینها نشانه های اتمام جمله هستند). وقتی پیدا کرد متن رو همونجا جدا میکنه.
اگر چیزی پیدا نکرد، 100 کاراکتر به جلو میره تا پایان جمله رو پیدا کنه. اگر چیزی پیدا نکرد نزدیکترین فاصله رو از کاراکتر 500 انتخاب میکنه.
نکته مهم:
برای تعداد کاراکترهای یک متن فارسی رو دو برابر یک متن انگلیسی در نظر میگیرند

منبع:

http://boplo.ir/php/summarize-texts/




<html dir="rtl">
<?php
header('Content-Type: text/html; charset=utf-8');
/**
* Summarize text
* Author AHHP ~ Boplo.ir
*
* @param string $str Text to summarize.
* @param integer $limit Number of characters to trim.
* @param integer $offset Number of characters to
* move backward and/then forward of $limit
* for finding line/sentence/word ending.
* @param array $endlineChars Known characters as
* line/sentence/word ending characters.
* @return string Summarized string.
*
* Please note that
* Length of a latin text is NOT equal to a
* Unicode text in PHP (Farsi is Unicode).
* It means PHP counts e.g. 100 Farsi characters
* as 200 characters. So you should use bigger
* numbers as $limit and $offset parameters
* while using this function for Farsi texts.
*/
function summarize($str, $limit=600, $offset=100, $endlineChars=array('.','!','?',"\n",')',';',',','؟','،')) {
if(strlen($str)<=$limit)
return $str;

for($i=$limit; $i>$limit-$offset; $i--) {
if(in_array($str{$i}, $endlineChars)) {
$length = $i;
break;
}
if(!isset($spaceLength) && $str{$i}==' ')
$spaceLength = $i;
}
if(isset($length))
return substr($str, 0, $length+1);

for($i=$limit; $i<$limit+$offset; $i++) {
if(in_array($str{$i}, $endlineChars)) {
$length = $i;
break;
}
if(!isset($spaceLength) && $str{$i}==' ')
$spaceLength = $i;
}
if(isset($length))
return substr($str, 0, $length+1);

if(isset($spaceLength))
return substr($str, 0, $spaceLength);

return substr($str, 0, $limit+1);
}

echo 'orginal: ';
echo $str='سلام من یه صفحه ای طراحی کردم و یک بخش داره به اسم موضوعات.این کادر موضوعات محدودیت از لحاظ width داره.حالا میخوام اگه موضوعاتش طولانی شد بعد از 20 کاراکتر دیگه سه نقطه بذاره';
echo '<hr/>';
echo 'summarized: ';
echo summarize($str, $limit=200, $offset=100, $endlineChars=array('.','!','?',"\n",')',';',',','؟','،')).' ...';

?>





orginal: سلام من یه صفحه ای طراحی کردم و یک بخش داره به اسم موضوعات.این کادر موضوعات محدودیت از لحاظ width داره.حالا میخوام اگه موضوعاتش طولانی شد بعد از 20 کاراکتر دیگه سه نقطه بذاره


summarized: سلام من یه صفحه ای طراحی کردم و یک بخش داره به اسم موضوعات.این کادر موضوعات محدودیت از لحاظ width داره. ....