ساخت صفحات استاتیک به کمک XML و ASP.NET -قسمت دوم مقاله
انتشار از مركز آموزش فارسي ، دانشنامه سوران
شاید برای شما جالب باشد که بدانید سایت هایی بزرگی چون CNN یا news.com چگونه صفحات خود را تولید می کنند و اینکه چرا پسوند صفحات آنها مثلا بجای asp یا aspx یا php وغیره، html است؟ این مقاله را بخوانید تا با یکی از متداولترین و مناسبترین راههای تولید صفحات وب بصورت استاتیک برای سایتهای با محتوای دینامیک مانند سایت های خبری یا مقالهای آشنا شوید.
شاید برای شما جالب باشد که بدانید سایت هایی بزرگی چون CNN یا news.com چگونه صفحات خود را تولید می کنند و اینکه چرا پسوند صفحات آنها مثلا بجای asp یا aspx یا php وغیره، html است؟ این مقاله را بخوانید تا با یکی از متداولترین و مناسبترین راههای تولید صفحات وب بصورت استاتیک برای سایتهای با محتوای دینامیک مانند سایت های خبری یا مقالهای آشنا شوید.
اشاره:
این مقاله به تشریح یکی از متداولترین و مناسبترین راههای تولید صفحات وب برای سایتهای با محتوای دینامیک از جمله سایتهای ناشر خبر و مقاله به کمک XML میپردازد. روشی که در این مقاله توضیح داده شده برای تمام فناوریهای ایجاد صفحات دینامیک از جمله ASP.NET ،PHP ،JSP و ColdFusion قابل اجراست اما در این مقاله تنها به روش پیاده سازی تکنیک مورد بحث با استفاده از ASP.NET اشاره شده است. برای اینکه بتوانید از این مقاله حداکثر استفاده را داشته باشید، لازم است قبلا با مبانی XML و XSL آشنایی نسبی داشته باشید ولی برای آندسته از خوانندگان که اطلاعات خیلی کمی دراین باره دارند، توضیحات مقدماتی آورده شده است.
صورت مساله
اگر یک طراح و برنامهنویس صفحات وب باشید، حتما تاکنون متوجه شدهاید که یکی از روشهای متداول برای نمایش محتوای اطلاعاتی در سایتهای خبری اینست که به ازای هر خبر یا مقالهی قابل نمایش در صفحات سایت، یک رکورد متناظر در پایگاه دادههای (پایگاه داده) سایت قرار دهیم و اطلاعات درون فیلدهای هر رکورد را به محض درخواست بازدیدکننده، داخل یک صفحه Template از جنس ASP یا ASP.NET و غیره نمایش دهیم. اما اگر احیانا به ساختار سایتهای خبری بزرگ مانند CNN و news.com توجه کرده باشید، ممکن است از خود پرسیده باشید <چطور تعداد صفحات وب دینامیک این سایت بسیار اندک یا در حد صفر است؟> چرا بعضی از سایت خبری بزرگ برای نمایش اخبار و مقالات خود از صفحات html به جای asp و aspx و php و jsp استفاده میکنند؟ چه رازی بر این شیوه حاکم است و اصولا این روش چه مزیتی دارد؟
به زبان دیگر، سوال اساسی اینست که آیا برای نمایش محتوای دینامیک در یک سایت وب، حتما مجبور به استفاده از صفحات دینامیک مانند ASP.NET و PHP و غیره هستیم؟ یا اینکه ترفند دیگری هم وجود دارد؟
بررسی موضوع
در واقع پاسخ مثبت است. بسته به اینکه منطق شما برای تولید صفحات خبر و مقاله چگونه باشد، تکنیکهای متفاوتی برای این منظور وجود دارد که تنها یکی از آنها بکارگیری صفحات دینامیک است. روشهای دیگری هم برای نمایش محتوای دینامیک در سایت وجود دارند که ما یکی از آنها را که بهتر به نظر میرسد، بررسی خواهیم کرد. اما شاید یادآوری این نکته بد نباشد که ببینیم روش مرسومی که غالبا سایتهای کوچک و متوسط خبری بکار میبرند ( و مورد نظر این مقاله هم نیست) چگونه عمل میکند.
در روش متداول که آسان ترین روش نیز هست، شما به ازای تمام مقالات و اخباری که فرمت مشابهی دارند، فقط و فقط یک صفحه نمایش دهنده خبر یا مقاله، آنهم از جنس ASP.NET یا ASP میسازید و به کمک آن، محتوای خبر یا مقاله مورد نظر را نمایش میدهید. شما در حقیقت از روش رندرکردن (Render) صفحه در زمان نمایش استفاده میکنید.
مهمترین کاری که باید در این تکنیک صورت گیرد، انتقال مقدار فیلد کلیدی هر رکورد (معمولا فیلد id) به صفحه Template مذکور و خواندن اطلاعات همان رکورد از طریق یک فرمان SQL میباشد. به عنوان مثال با اجرای URL زیر در یک سایت فرضی:
article.aspx?id=102632
مقدار id مساوی عدد ۱۰۲۶۳۲ به عنوان کلید رکورد به صفحه ASP.NET انتقال یافته و در داخل صفحه، یک جا به کمک فرمانی مانند عبارت زیر:
SELECT * FROM Articles WHERE ID=@id
اطلاعات فیلدهای مربوط به این رکورد را میخوانیم و سپس در طول صفحه از طریق کدهایی مانند عبارت زیر:
<#% DataBinder.Eval( Container, "DataItem.ArticleTitle" ) %>
داخل صفحه Template نمایش میدهیم.
چنانکه ملاحظه میکنید، در این روش هربار که کاربری قصد مشاهده خبر یا مقاله مورد نظر (با کد ۱۰۲۶۳۲) را داشته باشد، یکبار فرآیند فوق اجرا شده و صفحه دینامیک رندر میشود و سپس برای بازدیدکننده نمایش داده میشود.
در روش دیگری که مقصود این مقاله است، ما مایل هستیم به ازای هر خبر یا مقاله، یک صفحه استاتیک متمایز داشته باشیم، طوری که کاربر برای مشاهده مطلب مورد نظر، به عنوان مثال با کلیک کردن روی صفحهای با نام ۱۰۲۶۳۲/htm بتواند آن را مشاهده کند. در این روش باید تکنیکی را پیدا کنیم که قبلا به ازای تمام رکوردهای خبر و مقاله درون بانک اطلاعاتی، یک صفحه وب تولید و روی server ذخیره کرده باشیم.
مزایای تولید صفحات استاتیک از روی رکوردهای پایگاه داده
قبل از هرچیز میخواهیم بدانیم اصولا فایده روش مذکور چیست و درحالی که خیلی ساده میتوانیم از طریق ترفند article.aspx?id=102632 یک خبر یا مقاله خاص را به سادگی نمایش دهیم، چرا باید به ازای هر خبر یک صفحه جداگانه وب تولید کنیم؟
۱- صفحات استاتیک سریعتر اجرا میشوند.
مهمترین دلیل برای روی آوردن به این روش آنست که به این ترتیب سرعت نمایش صفحات سایت شما بالا میرود زیرا صفحات دینامیک مانند ASP.NET و PHP نیاز به رندر شدن دارند درحالی که صفحات HTML برای نمایش روی مرورگر کاملا آماده هستند. گذشته از اینها اگر یک سایت خبری پربیننده باشد، تعدد پردازشهای دینامیک، فشار زیادی را روی سرور ایجاد میکند که در مجموع راندمان آن را پایین میآورد. حتی اگر سایت شما بیننده اندکی داشته باشد، در صورتی که از روش Shared Hosting استفاده کنید، توانایی سرور برای همان تعداد اندک بازدیدکننده چندان بالا نخواهد بود و شما در همان میزان اندک نیز شاهد کاهش راندمان سایت متناظر با افزایش تعداد بازدیدکنندگان خواهید بود.
۲- Load روی پایگاه داده کم میشود.
حسن بزرگ دیگری که از بکارگیری روش توصیه شده در این مقاله حاصل میشود آنست که فشار روی پایگاه داده کم میشود. به عنوان یک توصیه کلی و یک اصل تجربه شده همواره به خاطر داشته باشید که هرچه استفاده از پایگاه داده ها در یک سایت کمتر باشد بهتر است! این هنر نیست که شما برای تکمیل هر فرآیند کوچکی در سایت خود از پایگاه داده استفاده کنید زیرا افزایش میزان استفاده از بانک اطلاعاتی موجب کند شدن سرعت نمایش صفحات از یک سو و نیز بالا رفتن میزان منابع سیستمی مورد نیاز برای پردازشهای دینامیک (resources) از سوی دیگر میشود. بنابراین همواره در جستجوی روش هایی باشید که از پایگاه دادهکمتر استفاده شود. استفاده موجز و مختصر و موثر از پایگاه داده یک روش صد در صد توصیه شده از سوی برنامه نویسان باتجربه است.
۳- وابستگی سایت شما به پایگاه داده کم میشود.
به طور کلی وقتی تعداد صفحات دینامیک یک سایت کمتر میشود، وابستگی آن به پایگاه داده نیز کمتر میشود و این به معنی کاهش منابع اشکال زا در هنگام وقوع خطاست. به عنوان مثال سایتی که شدیدا به پایگاه داده ها وابسته است در صورتی که برای چند دقیقه پایگاه داده دچار مشکل یا down شود، ممکن است دهها بازدیدکننده را با خطا یا exception مربوط به در دسترس نبودن بانک اطلاعاتی مواجه کند. سایتی که از صفحات استاتیک بیشتر استفاده میکند کمتر در این مواقع دچار اشکال و نارسایی میشود.
۴- جستجوی صفحه برای ماشینهای جستجو آسان میشود.
دقت کنید که برخی از موتورهای جستجو، چه آنهایی که روی کل اینترنت کار میکنند و چه آنهایی که روی یک سایت مشخص عمل میکنند، با برخی پارامترهای انتقال داده شده به یک صفحه دینامیک مشکل دارند. بهترین و سریعترین روش ممکن برای ایندکس شدن صفحات وب یک سایت در یک موتور جستجو اینست که آن صفحه اساسا به صورت استاتیک باشد.
۵- استناد به URL یک خبر یا مقاله خاص برای مردم آسانتر میشود.
فراموش نکنید که وقتی آدرس یک خبریامقالهدرسایتشمابهصورتarticle.aspx?id=102632&cat=214&sessionid=423442
و مشابه اینها (یا در اغلب اوقات حتی پیچیدهتر) است، به خاطر سپاری آدرس و یا درج آن در کتابهای و مجلات و روزنامهها سختتر میشود. درحالی که آدرس یک صفحه به صورت ۱۰۲۶۳۲/htm خیلی راحتتر است و احتمال اینکه موقع نوشتن یا تایپ یا حتی به خاطر سپردن آدرس، اشتباهی صورت بگیرد کمتر است.
۶- آرشیو کردن اخبار و مقالات بهینهتر میشود.
یادتان نرود که اگر قرار باشد سایت شما برای مدت چند سال فعالیت کند آنوقت باید حجم عظیمی از اطلاعات را به صورت دینامیک داخل پایگاه داده نگهداری کنید. اینکار هم هزینه شما را بالا میبرد ( بخصوص اگر از SQL Server یا MySQL یا ORACLE و DBMSهای دیگر استفاده کرده باشید) و نگهداریاش سخت میشود. اگر مهمترین کاربرد بانک اطلاعاتی در سایت شما نگهداری محتوای اخبار و مقالات است، بهتر است فقط آخرین x رکورد را داخل پایگاه داده دم دست نگه دارید و بقیه رکوردها را از بانک اطلاعاتی خارج، و به طریقی که صلاح میدانید (مثلا ذخیره کردن به صورت صفحات استاتیک وب) آرشیو کنید. به این ترتیب رکوردهای قدیمی شما خیلی ساده از طریق جابجا کردن صفحات وب، قابل انتقال خواهند بود و اگر زمانی تصمیم بگیرید Host خود را عوض کنید، برای جابجا کردن دادههای درون پایگاه داده مکافات نخواهید داشت!
۷- برای نمایش صفحات سایت به Host ارزانتری نیاز خواهید داشت.
به کمک روش تولید مکانیزه صفحات استاتیک میتوانید تمام یک سایت را با صفحات معمولی HTML بسازید، بدون اینکه نیازمند استفاده از قابلیتهای یک web server خاص باشید. مثلا اگر از یک میزبان ارزان قیمت استفاده میکنید که به شما اجازه استفاده از امکانات پیشرفتهای چون پایگاه داده را نمیدهد، میتوانید سایت خود را به طور کامل به صورت استاتیک بسازید. به این ترتیب که روی یک دستگاه خانگی سایت خود را شبیهسازی میکنید و صفحات استاتیک را با روش توضیح داده شده در این مقاله تولید میکنید و سپس حاصل کار را در دورههای زمانی مشخص به میزبان سایت اصلی خودتان upload میکنید. البته اگر سایت خود را تمام استاتیک بسازید، امکان پیاده سازی قابلیتهایی مانند جستجو (منظور خود صفحه جستجوگر است نه صفحاتی که مورد جستجو قرار میگیرند) را نخواهید داشت
این مقاله به تشریح یکی از متداولترین و مناسبترین راههای تولید صفحات وب برای سایتهای با محتوای دینامیک از جمله سایتهای ناشر خبر و مقاله به کمک XML میپردازد. روشی که در این مقاله توضیح داده شده برای تمام فناوریهای ایجاد صفحات دینامیک از جمله ASP.NET ،PHP ،JSP و ColdFusion قابل اجراست اما در این مقاله تنها به روش پیاده سازی تکنیک مورد بحث با استفاده از ASP.NET اشاره شده است. برای اینکه بتوانید از این مقاله حداکثر استفاده را داشته باشید، لازم است قبلا با مبانی XML و XSL آشنایی نسبی داشته باشید ولی برای آندسته از خوانندگان که اطلاعات خیلی کمی دراین باره دارند، توضیحات مقدماتی آورده شده است.
صورت مساله
اگر یک طراح و برنامهنویس صفحات وب باشید، حتما تاکنون متوجه شدهاید که یکی از روشهای متداول برای نمایش محتوای اطلاعاتی در سایتهای خبری اینست که به ازای هر خبر یا مقالهی قابل نمایش در صفحات سایت، یک رکورد متناظر در پایگاه دادههای (پایگاه داده) سایت قرار دهیم و اطلاعات درون فیلدهای هر رکورد را به محض درخواست بازدیدکننده، داخل یک صفحه Template از جنس ASP یا ASP.NET و غیره نمایش دهیم. اما اگر احیانا به ساختار سایتهای خبری بزرگ مانند CNN و news.com توجه کرده باشید، ممکن است از خود پرسیده باشید <چطور تعداد صفحات وب دینامیک این سایت بسیار اندک یا در حد صفر است؟> چرا بعضی از سایت خبری بزرگ برای نمایش اخبار و مقالات خود از صفحات html به جای asp و aspx و php و jsp استفاده میکنند؟ چه رازی بر این شیوه حاکم است و اصولا این روش چه مزیتی دارد؟
به زبان دیگر، سوال اساسی اینست که آیا برای نمایش محتوای دینامیک در یک سایت وب، حتما مجبور به استفاده از صفحات دینامیک مانند ASP.NET و PHP و غیره هستیم؟ یا اینکه ترفند دیگری هم وجود دارد؟
بررسی موضوع
در واقع پاسخ مثبت است. بسته به اینکه منطق شما برای تولید صفحات خبر و مقاله چگونه باشد، تکنیکهای متفاوتی برای این منظور وجود دارد که تنها یکی از آنها بکارگیری صفحات دینامیک است. روشهای دیگری هم برای نمایش محتوای دینامیک در سایت وجود دارند که ما یکی از آنها را که بهتر به نظر میرسد، بررسی خواهیم کرد. اما شاید یادآوری این نکته بد نباشد که ببینیم روش مرسومی که غالبا سایتهای کوچک و متوسط خبری بکار میبرند ( و مورد نظر این مقاله هم نیست) چگونه عمل میکند.
در روش متداول که آسان ترین روش نیز هست، شما به ازای تمام مقالات و اخباری که فرمت مشابهی دارند، فقط و فقط یک صفحه نمایش دهنده خبر یا مقاله، آنهم از جنس ASP.NET یا ASP میسازید و به کمک آن، محتوای خبر یا مقاله مورد نظر را نمایش میدهید. شما در حقیقت از روش رندرکردن (Render) صفحه در زمان نمایش استفاده میکنید.
مهمترین کاری که باید در این تکنیک صورت گیرد، انتقال مقدار فیلد کلیدی هر رکورد (معمولا فیلد id) به صفحه Template مذکور و خواندن اطلاعات همان رکورد از طریق یک فرمان SQL میباشد. به عنوان مثال با اجرای URL زیر در یک سایت فرضی:
article.aspx?id=102632
مقدار id مساوی عدد ۱۰۲۶۳۲ به عنوان کلید رکورد به صفحه ASP.NET انتقال یافته و در داخل صفحه، یک جا به کمک فرمانی مانند عبارت زیر:
SELECT * FROM Articles WHERE ID=@id
اطلاعات فیلدهای مربوط به این رکورد را میخوانیم و سپس در طول صفحه از طریق کدهایی مانند عبارت زیر:
<#% DataBinder.Eval( Container, "DataItem.ArticleTitle" ) %>
داخل صفحه Template نمایش میدهیم.
چنانکه ملاحظه میکنید، در این روش هربار که کاربری قصد مشاهده خبر یا مقاله مورد نظر (با کد ۱۰۲۶۳۲) را داشته باشد، یکبار فرآیند فوق اجرا شده و صفحه دینامیک رندر میشود و سپس برای بازدیدکننده نمایش داده میشود.
در روش دیگری که مقصود این مقاله است، ما مایل هستیم به ازای هر خبر یا مقاله، یک صفحه استاتیک متمایز داشته باشیم، طوری که کاربر برای مشاهده مطلب مورد نظر، به عنوان مثال با کلیک کردن روی صفحهای با نام ۱۰۲۶۳۲/htm بتواند آن را مشاهده کند. در این روش باید تکنیکی را پیدا کنیم که قبلا به ازای تمام رکوردهای خبر و مقاله درون بانک اطلاعاتی، یک صفحه وب تولید و روی server ذخیره کرده باشیم.
مزایای تولید صفحات استاتیک از روی رکوردهای پایگاه داده
قبل از هرچیز میخواهیم بدانیم اصولا فایده روش مذکور چیست و درحالی که خیلی ساده میتوانیم از طریق ترفند article.aspx?id=102632 یک خبر یا مقاله خاص را به سادگی نمایش دهیم، چرا باید به ازای هر خبر یک صفحه جداگانه وب تولید کنیم؟
۱- صفحات استاتیک سریعتر اجرا میشوند.
مهمترین دلیل برای روی آوردن به این روش آنست که به این ترتیب سرعت نمایش صفحات سایت شما بالا میرود زیرا صفحات دینامیک مانند ASP.NET و PHP نیاز به رندر شدن دارند درحالی که صفحات HTML برای نمایش روی مرورگر کاملا آماده هستند. گذشته از اینها اگر یک سایت خبری پربیننده باشد، تعدد پردازشهای دینامیک، فشار زیادی را روی سرور ایجاد میکند که در مجموع راندمان آن را پایین میآورد. حتی اگر سایت شما بیننده اندکی داشته باشد، در صورتی که از روش Shared Hosting استفاده کنید، توانایی سرور برای همان تعداد اندک بازدیدکننده چندان بالا نخواهد بود و شما در همان میزان اندک نیز شاهد کاهش راندمان سایت متناظر با افزایش تعداد بازدیدکنندگان خواهید بود.
۲- Load روی پایگاه داده کم میشود.
حسن بزرگ دیگری که از بکارگیری روش توصیه شده در این مقاله حاصل میشود آنست که فشار روی پایگاه داده کم میشود. به عنوان یک توصیه کلی و یک اصل تجربه شده همواره به خاطر داشته باشید که هرچه استفاده از پایگاه داده ها در یک سایت کمتر باشد بهتر است! این هنر نیست که شما برای تکمیل هر فرآیند کوچکی در سایت خود از پایگاه داده استفاده کنید زیرا افزایش میزان استفاده از بانک اطلاعاتی موجب کند شدن سرعت نمایش صفحات از یک سو و نیز بالا رفتن میزان منابع سیستمی مورد نیاز برای پردازشهای دینامیک (resources) از سوی دیگر میشود. بنابراین همواره در جستجوی روش هایی باشید که از پایگاه دادهکمتر استفاده شود. استفاده موجز و مختصر و موثر از پایگاه داده یک روش صد در صد توصیه شده از سوی برنامه نویسان باتجربه است.
۳- وابستگی سایت شما به پایگاه داده کم میشود.
به طور کلی وقتی تعداد صفحات دینامیک یک سایت کمتر میشود، وابستگی آن به پایگاه داده نیز کمتر میشود و این به معنی کاهش منابع اشکال زا در هنگام وقوع خطاست. به عنوان مثال سایتی که شدیدا به پایگاه داده ها وابسته است در صورتی که برای چند دقیقه پایگاه داده دچار مشکل یا down شود، ممکن است دهها بازدیدکننده را با خطا یا exception مربوط به در دسترس نبودن بانک اطلاعاتی مواجه کند. سایتی که از صفحات استاتیک بیشتر استفاده میکند کمتر در این مواقع دچار اشکال و نارسایی میشود.
۴- جستجوی صفحه برای ماشینهای جستجو آسان میشود.
دقت کنید که برخی از موتورهای جستجو، چه آنهایی که روی کل اینترنت کار میکنند و چه آنهایی که روی یک سایت مشخص عمل میکنند، با برخی پارامترهای انتقال داده شده به یک صفحه دینامیک مشکل دارند. بهترین و سریعترین روش ممکن برای ایندکس شدن صفحات وب یک سایت در یک موتور جستجو اینست که آن صفحه اساسا به صورت استاتیک باشد.
۵- استناد به URL یک خبر یا مقاله خاص برای مردم آسانتر میشود.
فراموش نکنید که وقتی آدرس یک خبریامقالهدرسایتشمابهصورتarticle.aspx?id=102632&cat=214&sessionid=423442
و مشابه اینها (یا در اغلب اوقات حتی پیچیدهتر) است، به خاطر سپاری آدرس و یا درج آن در کتابهای و مجلات و روزنامهها سختتر میشود. درحالی که آدرس یک صفحه به صورت ۱۰۲۶۳۲/htm خیلی راحتتر است و احتمال اینکه موقع نوشتن یا تایپ یا حتی به خاطر سپردن آدرس، اشتباهی صورت بگیرد کمتر است.
۶- آرشیو کردن اخبار و مقالات بهینهتر میشود.
یادتان نرود که اگر قرار باشد سایت شما برای مدت چند سال فعالیت کند آنوقت باید حجم عظیمی از اطلاعات را به صورت دینامیک داخل پایگاه داده نگهداری کنید. اینکار هم هزینه شما را بالا میبرد ( بخصوص اگر از SQL Server یا MySQL یا ORACLE و DBMSهای دیگر استفاده کرده باشید) و نگهداریاش سخت میشود. اگر مهمترین کاربرد بانک اطلاعاتی در سایت شما نگهداری محتوای اخبار و مقالات است، بهتر است فقط آخرین x رکورد را داخل پایگاه داده دم دست نگه دارید و بقیه رکوردها را از بانک اطلاعاتی خارج، و به طریقی که صلاح میدانید (مثلا ذخیره کردن به صورت صفحات استاتیک وب) آرشیو کنید. به این ترتیب رکوردهای قدیمی شما خیلی ساده از طریق جابجا کردن صفحات وب، قابل انتقال خواهند بود و اگر زمانی تصمیم بگیرید Host خود را عوض کنید، برای جابجا کردن دادههای درون پایگاه داده مکافات نخواهید داشت!
۷- برای نمایش صفحات سایت به Host ارزانتری نیاز خواهید داشت.
به کمک روش تولید مکانیزه صفحات استاتیک میتوانید تمام یک سایت را با صفحات معمولی HTML بسازید، بدون اینکه نیازمند استفاده از قابلیتهای یک web server خاص باشید. مثلا اگر از یک میزبان ارزان قیمت استفاده میکنید که به شما اجازه استفاده از امکانات پیشرفتهای چون پایگاه داده را نمیدهد، میتوانید سایت خود را به طور کامل به صورت استاتیک بسازید. به این ترتیب که روی یک دستگاه خانگی سایت خود را شبیهسازی میکنید و صفحات استاتیک را با روش توضیح داده شده در این مقاله تولید میکنید و سپس حاصل کار را در دورههای زمانی مشخص به میزبان سایت اصلی خودتان upload میکنید. البته اگر سایت خود را تمام استاتیک بسازید، امکان پیاده سازی قابلیتهایی مانند جستجو (منظور خود صفحه جستجوگر است نه صفحاتی که مورد جستجو قرار میگیرند) را نخواهید داشت
تاريخ:جمعه، 18 اردیبهشتماه 1388 | نظرات [ 0 ] |

