PDA

View Full Version : نمایش ادامه مطلب با زیاد بودن متن



IranVisual
شنبه 10 فروردین 1387, 08:48 صبح
تو بعضی سایتها دیدم مثلا yahoo وقتی یه مطلبی رو میفرستند توی یک قسمت فقط بعضی از مطلب نمایش داده میشه و یک more در کنار اون وجود داره که با کلیک روی اون کل مطلب به نمایش در میاد من میخوام یه لیبل بزارم توی یک panel چجوری میتونم این کار رو مثل سایت yahoo انجام بدم

abadanboy
شنبه 10 فروردین 1387, 08:56 صبح
خوب شما باید اول ببینی چند حرف رو می خوای تو این لیبل قرار بدی.
بعد با دستور substring می تونی هر تعداد خواستی جدا کنی و اگه بیشتر شد یه لینک ادامه متن واسش فعال کنی و بعد کل مطلب رو تو یه صفحه دیگه نمایش بدی

IranVisual
شنبه 10 فروردین 1387, 09:43 صبح
بی زحمت یه مثال میزنین

nazaninam
شنبه 10 فروردین 1387, 14:41 عصر
اگر از StoredProcedure استفاده می کنی میتونی دستور Select را به صورت زیر بنویسی :



SELECT AdverID, AdverSubject,substring(cast([AdverContent] as nvarchar(155)),0,150)+' ... ' as [Mycontent],[AdverRank]
FROM TBL_Adver



اگر نه یک تابع به صورت زیر در کد سمت سرور ایجاد کد ( از نوع static یا shared ) بعد ازش استفاده کن :



public static string SubstringMe(string InputString)
{
return InputString.Substring(0, 150) + " ... ";
}



و حالا در Gridview هر جا خواستی متن رو قطع کنی به صورت زیر بایند می کنید :





<asp:Label ID="Label1" runat="server" Text='<%# SubstringMe(Eval("YourContentField").ToString()) %>'></asp:Label>



البته اگر بخواهید دقیق تر نگاه کنید مشیه کاری کرد که هیچ وقت وسط متن قطع نشه و حتما به Space رسیده باشه....
موفق باشید

miladr
شنبه 10 فروردین 1387, 14:51 عصر
این موضوع قبلا بحث شده.
مشکلی که هست اینکه متن شما باید text خالی باشه و نمی تونه شامل لینک یا هر تگ html باشه.
بهترین کار این هست که شما تو tableتون دوتا فیلد داشته باشین یکی برای خلاصه و یکی برای متن اصلی و وقتی روی ادامه زد به جای فیلد خلاصه فیلد متن رو نشون بدی.

nazaninam
شنبه 10 فروردین 1387, 14:56 عصر
هترین کار این هست که شما تو tableتون دوتا فیلد داشته باشین یکی برای خلاصه و یکی برای متن اصلی و وقتی روی ادامه زد به جای فیلد خلاصه فیلد متن رو نشون بدی.

بله این بهترین کار هست
ولی اگر براتون این امکان وجود نداره راه های دیگه ای هم برای خلاص شدن از تگ های html هست ، مثلا تبدیل به متن ساده به صورت RunTime و بعد بریدن متن
موفق باشید

mahdi_farhani
شنبه 10 فروردین 1387, 21:21 عصر
میشه بگی چطوری میشه HTML رو متن ساده تبدیل کرد .
خیلی باش ور رفتم که بشه اینکارو کرد ولی چیزی خوبی از آب در نیومد ، الگوریتمی که تو ذهنم بود پیدا کردن > بود ، ولی درست عملی نمیشه ، به دلایل زیاد .

MehranZand
شنبه 10 فروردین 1387, 22:28 عصر
میشه بگی چطوری میشه HTML رو متن ساده تبدیل کرد .
خیلی باش ور رفتم که بشه اینکارو کرد ولی چیزی خوبی از آب در نیومد ، الگوریتمی که تو ذهنم بود پیدا کردن > بود ، ولی درست عملی نمیشه ، به دلایل زیاد .

از این روال استفاده کن

Function RemoveHTML(ByVal strText)
Dim TAGLIST
TAGLIST = ";!--;!DOCTYPE;A;ACRONYM;ADDRESS;APPLET;AREA;B;BASE;BAS EFONT;" & _
"BGSOUND;BIG;BLOCKQUOTE;BODY;BR;BUTTON;CAPTION;CENT ER;CITE;CODE;" & _
"COL;COLGROUP;COMMENT;DD;DEL;DFN;DIR;DIV;DL;DT;EM;E MBED;FIELDSET;" & _
"FONT;FORM;FRAME;FRAMESET;HEAD;H1;H2;H3;H4;H5;H6;HR ;HTML;I;IFRAME;IMG;" & _
"INPUT;INS;ISINDEX;KBD;LABEL;LAYER;LAGEND;LI;LINK;L ISTING;MAP;MARQUEE;" & _
"MENU;META;NOBR;NOFRAMES;NOSCRIPT;OBJECT;OL;OPTION; P;PARAM;PLAINTEXT;" & _
"PRE;Q;S;SAMP;SCRIPT;SELECT;SMALL;SPAN;STRIKE;STRON G;STYLE;SUB;SUP;" & _
"TABLE;TBODY;TD;TEXTAREA;TFOOT;TH;THEAD;TITLE;TR;TT ;U;UL;VAR;WBR;XMP;"

Const BLOCKTAGLIST = ";APPLET;EMBED;FRAMESET;HEAD;NOFRAMES;NOSCRIPT;OBJE CT;SCRIPT;STYLE;"

Dim nPos1
Dim nPos2
Dim nPos3
Dim strResult
Dim strTagName
Dim bRemove
Dim bSearchForBlock

nPos1 = InStr(strText, "<")
Do While nPos1 > 0
nPos2 = InStr(nPos1 + 1, strText, ">")
If nPos2 > 0 Then
strTagName = Mid(strText, nPos1 + 1, nPos2 - nPos1 - 1)
strTagName = Replace(Replace(strTagName, vbCr, " "), vbLf, " ")

nPos3 = InStr(strTagName, " ")
If nPos3 > 0 Then
strTagName = Left(strTagName, nPos3 - 1)
End If

If Left(strTagName, 1) = "/" Then
strTagName = Mid(strTagName, 2)
bSearchForBlock = False
Else
bSearchForBlock = True
End If

If InStr(1, TAGLIST, ";" & strTagName & ";", vbTextCompare) > 0 Then
bRemove = True
If bSearchForBlock Then
If InStr(1, BLOCKTAGLIST, ";" & strTagName & ";", vbTextCompare) > 0 Then
nPos2 = Len(strText)
nPos3 = InStr(nPos1 + 1, strText, "</" & strTagName, vbTextCompare)
If nPos3 > 0 Then
nPos3 = InStr(nPos3 + 1, strText, ">")
End If

If nPos3 > 0 Then
nPos2 = nPos3
End If
End If
End If
Else
bRemove = False
End If

If bRemove Then
strResult = strResult & Left(strText, nPos1 - 1)
strText = Mid(strText, nPos2 + 1)
Else
strResult = strResult & Left(strText, nPos1)
strText = Mid(strText, nPos1 + 1)
End If
Else
strResult = strResult & strText
strText = ""
End If

nPos1 = InStr(strText, "<")
Loop
strResult = strResult & strText

RemoveHTML = strResult
End Function

nazaninam
یک شنبه 11 فروردین 1387, 00:31 صبح
فکر کنم این یکم تمیز تر و کاراتر باشه مهران جان :



Regex.Replace(Html, "<[^>]*>", string.Empty);



اینم بی زحمت قبلش Import کنید System.Text.RegularExpressions

miladr
یک شنبه 11 فروردین 1387, 02:20 صبح
این کار خوبه اگر چه فکر می کنم داشتن یک فیلد بهتره.
راهی نیست که حذف html توسط stored procedure انجام بشه؟

twelve
یک شنبه 11 فروردین 1387, 03:23 صبح
این کار خوبه اگر چه فکر می کنم داشتن یک فیلد بهتره.

موافقم.



فکر کنم این یکم تمیز تر و کاراتر باشه مهران جان :
کد:
Regex.Replace(Html, "<[^>]*>", string.Empty);
اینم بی زحمت قبلش Import کنید System.Text.RegularExpressions



مرسی!

mamalmohammad
سه شنبه 13 فروردین 1387, 08:12 صبح
مهندسین گرامی
اگر میشود در مورد این مطلب بیشتر توضیح بدهید و اگر زحمتی نمی شود کدی هم برای مثال بیاورید.
مرسی از تلاش بیکران

nazaninam
سه شنبه 13 فروردین 1387, 12:00 عصر
اگر میشود در مورد این مطلب بیشتر توضیح بدهید و اگر زحمتی نمی شود کدی هم برای مثال بیاورید.


در مورد کدام مطلب اینجا در مورد چندین مطلب بحث شد و احساس می کنم مطالب مفید و بسیار پر کاربردی بیان شد که کاملا واضح بود
موفق باشید

Behrouz_Rad
پنج شنبه 15 فروردین 1387, 12:34 عصر
بعد از اینکه تگ های HTML رو با استفاده از روش اشاره شده در پست 9 حذف کردید، در ادامه باز هم با RegEx می تونید به شکل بهتری عمل کنید.

به عنوان مثال اگر عبارت "این یک تست برای ادامه مطلب است" رو در نظر بگیریم و عبارت باقاعده ای همانند ذیل رو بر روی اون اعمال کنیم:


^(\w+|\s){5}

عبارت برگشتی، "این یک تست" خواهد بود.
در این حالت عبارت باقاعده ی ما قادر به تشخیص کلمه خواهد بود و کلمه ی ناقص برگشت داده نمیشه!
عبارت باقاعده ی نوشته شده، 3 کلمه رو برگشت میده. (فاصله نیز به دلیل s\ در نظر گرفته میشه - 2 فاصله وجود داره)

موفق باشید.