PDA

View Full Version : تولید داینامیک صفحات HTML برای سایت های خبری توسط XSL و XML



atishatish
شنبه 21 دی 1387, 16:22 عصر
سلام .
من به تازگی به مسئله ی بر خوردم که می دونم میتونه برای خیلی از شما ها جالب باشه ، اونم این که سایت های خبری بزرگ مثل cnn (http://www.cnn.com) , news.com (http://www.news.com) و یا حتی bbc (http://www.bbc.com) دارای صفحات استانیک با فرمت html هستند در حالی که حتما می دونید در این نوع سایت و با این حجم کاری امکان تولید صفحات به صورت استانیک و دونه به دونه برای هر خبر وجود ندارند .
تا اینکه به مسئله ای با عنوان تولید داینامیک صفحات html برای سایت های خبری توسط XSL و XML بر خوردم ، و توی همین سایت خودمون هم و یا سایتهای دیگه هم می تونید نمونه ها شو پیدا کنید :

بهترین روش برای ساخت سایتهای خبری (http://barnamenevis.org/forum/showthread.php?t=37632&highlight=%D8%AA%D9%88%D9%84%DB%8C%D8%AF+%D8%B5%D9 %81%D8%AD%D9%87)
ایجاد صفحه داینامیک با فرمت html (http://barnamenevis.org/forum/showthread.php?t=74218&highlight=%D8%AA%D9%88%D9%84%DB%8C%D8%AF+%D8%B5%D9 %81%D8%AD%D9%87)

خوب این روش بر طبق نظر هایی که دوستان گفتن و همینطور خاصیت های استاتیک بودنم صفحات وب از قبیل :

اجرای سریعتر
آسونتر شدن کار برای search engine ها.
درگیری کمتر با DB .
و...
بسیار عالی هستش .


ولی اینجا یکسری مسئله پیش می آید . اونم اینکه :
ما وقتی تو .net برای صفحاتمون از masterpage استفاده می کنیم ، حالا به هر شکلی که ممکن صفحه رو render می کنیم و محتویات مختلف رو داخل صفحه نمایش میدیم .
حالا اگه ما توی این روش بخواهیم توی تم اصلی سایت تغییری بدیم باید مثل سایت های استاتیک دونه به دونه صفحات html رو باز کنیم و تغییرات رو توشون بدیم .

چون ما یه فایل xsl رو به عنوات تمپلت برای سایت در نظر می گیریم بعد اطلاعات رو به xml و در نهایت به یک فایل html کاملا استاتیک تبدیل می کنیم و فایل html ما بسته میشه و تموم میشه و مثل زمان استفاده از masterpage ها هر بار فقط اون تمپلیت مستر ما لود نمیشه و هر فایل برای خودش جداگانه لود میشود .

و یا مشکل دیگری که پیش می آید استفاده از کنترل های .net هست . توی سایت news.com ، درست که تمام صفحات اخبارش static تولید شده و با پسوند html. ولی اگر صفحهات رو هم دقت کرده باشید امکان ارسال نظر برای خبر با امکانات دیگری هم وجود داره که ما معمولا این کارارو با کنترل های net. انجام میدیم . ولی اینجا دیگه خبری از .net یا صفحه ای با فرمت .aspx وجود ندارد .

ولی خوب زمانی که سایت های خبری بزرگی مثل cnn و یا news.com دارن از این روش استفاده می کنند پس حتما یه فکری هم برای این مسائل کردن .

می خواستم خواهش کنم که در مورد این مسئله و کلا در مورد بهترین روش تولید صفحات وب از همه نظر که به عقیده من می تونه بحث جالبی باشه شرکت کنید .

ممنون.

milade
شنبه 21 دی 1387, 17:17 عصر
url rewrite
این جواب شماست !
در کل اینا همه به یه صفحه بر میگرده مثلا این :

news.aspx?id=120&key=5609
خوب با همین rewrite می ان ادرس رو میکنن به این شکل :

www.cnn.com/120_5609.html
:لبخند:
دیدی کاری نداشت ؟!
برای اون نظر سنجی و ... هم می ان از همون صفحه اول استفاده میکنن و این تغییر وقتی خبر از بانک پر میشه طبیعیه !
البته این موارد رو رد میکنم :

درگیری کمتر با DB .
اجرای سریعتر
چون بالاخره باید صفحه رندر بشه و از db تغذیه بشه
البته این خیلی هم درست نیست حرف شماها:

و یا مشکل دیگری که پیش می آید استفاده از کنترل های .net هست . توی سایت news.com ، درست که تمام صفحات اخبارش static تولید شده و با پسوند html. ولی اگر صفحهات رو هم دقت کرده باشید امکان ارسال نظر برای خبر با امکانات دیگری هم وجود داره که ما معمولا این کارارو با کنترل های net. انجام میدیم . ولی اینجا دیگه خبری از .net یا صفحه ای با فرمت .aspx وجود ندارد .
این رو ببینید :

http://ces.cnet.com/8301-19167_1-10139537-100.html?tag=newsLatestHeadlinesArea.0
به نظر شما کدوم صفحه html میتونه پارامتر بگیره که این گرفته؟!:چشمک:
موفق باشید

atishatish
شنبه 21 دی 1387, 19:00 عصر
ممنون از پاسختون .
من هم با حواب شما موافقم . نکاتی رو اشاره کردید که بهش توجه نکرده بودم !

اما فکر می کنم که باید با XSL و XSLT کار کرده باشدید . در این روش ما یک خروجی html از یک صفحه باxml می گیریم . یک فایل html واقعی . اما در اینجا مشکلی پیش می آید که در بخش اول صحبتم بهش اشاره کردم :





ما وقتی تو .net برای صفحاتمون از masterpage استفاده می کنیم ، حالا به هر شکلی که ممکن صفحه رو render می کنیم و محتویات مختلف رو داخل صفحه نمایش میدیم .
حالا اگه ما توی این روش بخواهیم توی تم اصلی سایت تغییری بدیم باید مثل سایت های استاتیک دونه به دونه صفحات html رو باز کنیم و تغییرات رو توشون بدیم .
خوب طبیعتا این به وجود می آید مشکل چون تنها کار داینامیکی که ما انجام میدیم تولید یک فایل Html است نه یک صفحه داینامیک که قابل تغییر باشه , user control داشته باشه و ... .


البته یک مسئله دیگه اگر زمانی که ما از xsl برای template اولیه استفاده می کنیم امکان استفاده از usercontrol ها وجود داشت این مشکل قابل حل بود و همه چیز رو به صورت control میزاشتیم ولی باز خروجی آخر همه اینا می خواد بشه html که توی فایل های html هم که اصلا صحبت این جور چیزا نیست.


این یه مسئله ، که در نظر داشته باشد .


مسئله بعد توی همین url که شما از سایت news.com گذاشیتن اگه به قول شما یک صفحه aspx و اطلاعات داخل render میشه چطور این عمل انجام میشه که هر صفحه اطلاعات خودش را دارد . مثل title , keywords , desceription و... ؟
آیا این هم کاراییش مثل همون صفحات static ؟ از نظر search engine و چیزای دیگه ؟

milade
شنبه 21 دی 1387, 21:59 عصر
البته یک مسئله دیگه اگر زمانی که ما از xsl برای template اولیه استفاده می کنیم امکان استفاده از usercontrol ها وجود داشت این مشکل قابل حل بود و همه چیز رو به صورت control میزاشتیم ولی باز خروجی آخر همه اینا می خواد بشه html که توی فایل های html هم که اصلا صحبت این جور چیزا نیست.
سلام
این طور مساله کمی سخت میشه !(شایدم نشه)
(خودمم بهش فکر نکردم ، فکر کردم جواب میدم ;) )

مسئله بعد توی همین url که شما از سایت news.com گذاشیتن اگه به قول شما یک صفحه aspx و اطلاعات داخل render میشه چطور این عمل انجام میشه که هر صفحه اطلاعات خودش را دارد . مثل title , keywords , desceription و... ؟
آیا این هم کاراییش مثل همون صفحات static ؟ از نظر search engine و چیزای دیگه ؟
همون مثال خودم ، این :

news.aspx?id=120&key=5609
شما در کد news.aspx مینویسی مقدار اون فیلد رو بگیره و response.write کنه !
حالا دیگه شما هر چی توی اون ذخیره کنی هست !
همون tittle و ....
میتونی به خبر نگارت این قابلیت رو بدی که خودش tittle و keyword یزاره یا نه همیشه استاتیک باشه
دست خودته دیگه !
موفق باشی

milade
یک شنبه 22 دی 1387, 12:08 عصر
به سایت خود asp.net مراجعه کن و توی بخش آموزش هاش اول این dll برای urlrewriter رو بگیر و بعد طبق آموزشی که داره وب کانفیگ رو ست کن.
دوست عزیز dll نمیخواد که !
یه سری تنظیمات در قسمت web.config هست که دوستان اموزشش هم دادن
ما که dll احتیاج پیدا نکردیم !

merlin_vista
یک شنبه 22 دی 1387, 14:05 عصر
دوست عزیز dll نمیخواد که !<br />
یه سری تنظیمات در قسمت web.config هست که دوستان اموزشش هم دادن<br />
ما که dll احتیاج پیدا نکردیم !<br />

دوست عزيز شما از urlMaping داريد استفاده مكنيد كه محدوديت هاي نسبت به urlrewriting دارد . :لبخندساده:



UrlRewrite كامپونتي ميباشد كه بايد آن را دريافت كرد و به پروژه خوتون اضافه كنيد .

سايت اصلي :

http://www.urlrewriting.net/149/en/home.htmlلينك دريافت :

http://www.urlrewriting.net/159/en/downloads.htmlلينك مستندات و مثال ها :

http://www.urlrewriting.net/160/en/documentation.htmlگزارش باگ ها :

http://bugtracker.urlrewriting.net/

atishatish
یک شنبه 22 دی 1387, 21:37 عصر
مرسی از پاسخ دوستان .
اگه ممکن راجع به نوع عملکرد search engine ها هم روی این گونه صفحات صحبت کنیم .

همونجوری که می دونید خوب توی صفحات static کار برای موتورها خیلی راحتر ولی با صحبتی که milade کردند :


شما در کد news.aspx مینویسی مقدار اون فیلد رو بگیره و response.write کنه !
حالا دیگه شما هر چی توی اون ذخیره کنی هست !
همون tittle و ....
میتونی به خبر نگارت این قابلیت رو بدی که خودش tittle و keyword یزاره یا نه همیشه استاتیک باشه
دست خودته دیگه !

اینجوری مثل همون صفحاتی که توی سایت های بالا بهش اشاره شد هر صفحه می تونه مشخصات خودشو داشته باشه .
حالا آیا این هم می تونه تاثیر گذاریش مثل همون صفحات استاتیک باشه ؟ چون می دونید که موتورهای جستجو کلا با dynamic بودن مشکل دارند .

milade
یک شنبه 22 دی 1387, 21:49 عصر
سلام
با روشی که گفتم میتونی یه صفحه تازه بسازی با هر چی که دوست داری

اینجوری مثل همون صفحاتی که توی سایت های بالا بهش اشاره شد هر صفحه می تونه مشخصات خودشو داشته باشه .
حالا آیا این هم می تونه تاثیر گذاریش مثل همون صفحات استاتیک باشه ؟ چون می دونید که موتورهای جستجو کلا با dynamic بودن مشکل دارند .
موتورهای جستجو زمان بوق( یا بیق :لبخند:) با دینامیکها مشکل داشتند .
الان دیگه هیچ مشکلی ندارن .
نمونش همین سات ! (رتبش هم اوله همون طور که خودش اوله ;) )
شما کارت رو کن و هیچ فکرش رو نکن
موفق باشی

alidaniyali
دوشنبه 23 دی 1387, 22:34 عصر
من urlrewriting گرفتم . همه کاراشم عین راهنمای خودش رفتم ولی هیچ اثری نکرد !
اگه کسی باهاش کار کرده لطف کنه یه آموزشی ازش بزاره .

حالا با این روش یا با همین dll آدرسمونو به هر شکلی بخواهیم می تونیم در بیاریم ؟

milade
سه شنبه 24 دی 1387, 12:09 عصر
سلام
این یه نمونس که باید توی وب کانفیگ گزاشته بشه :

<urlMappings enabled="true">
<add url="~/index.htm" mappedUrl="index.aspx"/>
</urlMappings>

که ادرس index.aspx رو به index.htm تغییر میده
موفق باشی

merlin_vista
سه شنبه 24 دی 1387, 13:02 عصر
سلام
این یه نمونس که باید توی وب کانفیگ گزاشته بشه :

<urlMappings enabled="true">
<add url="~/index.htm" mappedUrl="index.aspx"/>
</urlMappings>
که ادرس index.aspx رو به index.htm تغییر میده
موفق باشی
ميلاد جان ، اين كد طريقه استفاده از urlMappings است . دوست ما ميخواهد UrlRewriter استفاده كند . (به سوال توجه كن :لبخندساده:)

در مستندات و مثال ها همراه كامپونت توضيجات خوبي داده شده است . و در سايت هاي مختلف و همين سايت مثال هاي زيادي وجود دارد . (با اين همه مرجع من يك توضيح مختصر ميدم )

ابتدا dll را دريافت و به پوشه Bin خود اضافه كنيد .

به تگ configSections موجود در web.config اين كد را اضافه كنيد


<configSections>
<section name="rewriter" type="Intelligencia.UrlRewriter.Configuration.RewriterCo nfigurationSectionHandler, Intelligencia.UrlRewriter"/>
</configSections>

حال ميتوانيد از تگ <rewriter> استفاده كنيد . و آدرس هاي خودتون را به آن اضافه كنيد :چشمک:

به عنوان مثال :

<rewriter>
<!-- <rewrite url="" to="" ></rewrite> -->

<rewrite url="~/Post-(.+).aspx" to="~/Default.aspx?action=more&amp;id=$1" ></rewrite>

</rewriter>

(.+) = نام متغيري است كه بايد از $1 دريافت شود . و در صفحه از آن استفاده ميشود ... :لبخندساده: مثلاً ميتونه id پست داخل ديتابيس باشه :تشویق:

alidaniyali
سه شنبه 24 دی 1387, 22:24 عصر
اقا این هیچ تاثیری نداره . عین اون document ام که سایت گذاشت اجرا کردم .

هیچ فرقی نمی کنه !

رو 2008 هم دارم کار می کنم . فرقی که نمی کنه ؟

merlin_vista
سه شنبه 24 دی 1387, 23:29 عصر
اقا این هیچ تاثیری نداره . عین اون document ام که سایت گذاشت اجرا کردم .

هیچ فرقی نمی کنه !

رو 2008 هم دارم کار می کنم . فرقی که نمی کنه ؟

كد هاي را كه نوشتيد ايجا قرار بدهيد !!!

babakj
چهارشنبه 25 دی 1387, 01:36 صبح
من توی سایت خودم از این تکنیک استفاده نمودم
می تونی یه نگاهی به اینجا بندازی
http://www.itanc.com (http://www.itanc.com/)
این سایت در زمینه فروش و مقایسه قیمت محصولات است مثل لپ تاپ ، دوربین دیجیتال و موبایل و تجهیزات شبکه ....

شما وقتی وارد مجموعه های میشی می بینی که اسم هر مجموعه به صورت انگلیسی برای هر لینک نوشته شده این صفحات تماما داینامیک هستند و از تکنیک های مستر پیچ و تمام کنترل های دات نت هم استفاده شده .

URL Mapping در دات نت خیلی ضعیف و محدود است ولی فکر کنم برای شروع خوب باشه

به علاوه مشکل دیگه ایی که شما پیدا می کنی فرم های Action Less است که باید بتونی Action اونها رو پنهان کنی تا URL قدیمی شما لو نره !

alidaniyali
چهارشنبه 25 دی 1387, 14:51 عصر
همه این کارارو طبق document خود سایت انجام دادم :

1- dll به reference اضافه کردم
2- تو وب کانفیگ توی configSections اضافه کردم :



<sectionname="urlrewritingnet"restartOnExternalChanges="true"requirePermission="false"type="UrlRewritingNet.Configuration.UrlRewriteSection, UrlRewritingNet.UrlRewriter"/>


3- توی httpModules اضافه کردم :



<addname="UrlRewriteModule"type="UrlRewritingNet.Web.UrlRewriteModule, UrlRewritingNet.UrlRewriter"/>


4- قبل از configuration هم اینو اضافه کردم :



<urlrewritingnetrewriteOnlyVirtualUrls="true"contextItemsPrefix="QueryString"defaultPage="default2.aspx"xmlns="http://www.urlrewriting.net/schemas/config/2006/07">
<rewrites >
<addname="GetProductCategories"virtualUrl="^~/Page-(.*).html"rewriteUrlParameter="IncludeQueryStringForRewrite"destinationUrl="~/Default.aspx?id=$1"ignoreCase="true"/>
</rewrites>
</urlrewritingnet>


این عینا مثل document .
ولی هیچ اتفاقی نمی اوفته ، نه ارور میده نه درست عمل میکنه .


* مشکلش از چیه ؟

* برای این باید چی کار کرد ؟


به علاوه مشکل دیگه ایی که شما پیدا می کنی فرم های Action Less است که باید بتونی Action اونها رو پنهان کنی تا URL قدیمی شما لو نره !

babakj
چهارشنبه 25 دی 1387, 18:05 عصر
دو تا لینک می زارم برای راهنمایی

http://msdn.microsoft.com/en-us/library/ms972974.aspx

http://weblogs.asp.net/scottgu/archive/2007/02/26/tip-trick-url-rewriting-with-asp-net.aspx

برای Action Less Form هم توی این فروم یا گوگل جستجو کنید
اگه یافت نکردید کد می دم

merlin_vista
چهارشنبه 25 دی 1387, 20:49 عصر
^~/Page-(.*).html

HTML را به Aspx تغيير بده .

alidaniyali
چهارشنبه 25 دی 1387, 20:55 عصر
بازم فرقی نکرد . قبلا امتحان کرده بودم !

alidaniyali
پنج شنبه 26 دی 1387, 19:34 عصر
چی شد پس ؟

atishatish
شنبه 28 دی 1387, 18:47 عصر
اینو ببین :


http://www.asp.net/Learn/videos/video-154.aspx

alidaniyali
سه شنبه 01 بهمن 1387, 20:07 عصر
نه آقا این به دردم نخورد !
بعدشم 43mb !

یعنی یکی نیست قبلا از این استفاده کرده باشه ؟؟؟ :متعجب:

m.hamidreza
چهارشنبه 02 بهمن 1387, 10:06 صبح
1) شما میخوای تغییر پسوند بدی یا فقط خوشکلاسیون میخوای کنی؟:لبخندساده:
2) وقتی اون ReWrite شدشو تو آدرس بار تایپ میکنی پیغامی نمیده؟
3) رو هاست کار نمیکنه یا رو لوکال؟

alidaniyali
چهارشنبه 02 بهمن 1387, 15:28 عصر
1-برای تغییر پسوند
2-هیچ اروری نمی ده در واقع انگار که هیچ اتفاقی نیوفتاده .
3- روی لوکال هنوز سایت رو بالا نذاشتم

m.hamidreza
چهارشنبه 02 بهمن 1387, 18:16 عصر
برای تغییر پسوند شما باید توی IIS در قسمت Application Configuration پسوند مورد نظرتو add کنی(اونجا aspx هم هست feature هاش مثه همون باشه) بعد اون پایین تو قسمت WildCard باید isapi.dll رو add کنی.