View Full Version : ست کردن قالب سایت به صورت داینامیک
Ahoora_Mazda
جمعه 27 دی 1387, 17:35 عصر
درود
شما حتما با سرویس های وبلاگ آشنا هستید.در این سرویس ها ، کاربر میتونه با انتخاب قالب دلخواهی فقط با یک کلیک ، کل قالب وبلاگ خودش رو عوض کنه.
به نظر میاد در این تکنیک از جاوا اسکریپت استفاده میشه ، یعنی کد های HTML به صورت اتوماتیک generate میشن. (شاید XML هم کمک می کنه) .
آیا حدس من درست هست؟
لطفا در مورد جزییات این کار بنده را راهنمایی کنید.
متشکرم
reg_google
جمعه 27 دی 1387, 23:49 عصر
شما باید از تمها استفاده کنید میتونید برای یک سایت چند تم طراحی کنید که کاربر یکی از اونها رو انتخاب کنه
Ahoora_Mazda
جمعه 27 دی 1387, 23:57 عصر
من میخوام از سمت کلاینت و به کمک xml اینکار رو انجام بدم. کار با theme را بلد نیستم
kiosksoft
شنبه 28 دی 1387, 10:54 صبح
دوست عزیز
برای انجام این کار شما میتونید n فایل css یکسان اما با قالب های مختلف بسازید.مثلا برای دو فایل با اسم های css1 و css2 بسازید که هر کدام تگ های یکسان دارند اما محتوای آنها فرق میکنه.
css1:
body
{
background-color:Blue
}
:
css2
body
{
background-color:Fuchsia;
}
حالا یه تگ تو قسمت head ایجاد کنید:
<linkrel="stylesheet"id="Stylesheet1"type="text/css"runat="server"/>
بعد فایل هارو به دلخواه به صفحه link بدید. با این روش میتونید هر نوع style رو طراحی کنید و در اختیار کاربر برنامه قرار دهید.
Stylesheet1.Attributes["href"] = ResolveUrl("css1.css");
یا
Stylesheet1.Attributes["href"] = ResolveUrl("css2.css");
Ahoora_Mazda
شنبه 28 دی 1387, 11:28 صبح
دوست خوبم ، از پاسخ شما ممنونم. روشی که شما گفتید حتما جواب خواهد داد اما جوابگوی نیاز من نیست.چون این روش برای قالبی است که ساکن باشد و قصد داشته باشیم مثلا رنگ ها و عکس ها را عوض کنیم.اما شکل کلی قالب عوض نمیشود.
من میخواهم قالب سایت را کاملا عوض کنم ، یعنی هم فایل Css را تغییر دهم و هم کد html را.برای اینکار نیاز دارم که کد های html را نیز با توجه به قالب انتخاب شده توسط کاربر به صورت داینامیک generate کنم.دقیقا مثل سرویس های وبلاگ.البته وبلاگ ها در طراحی قالب تگهای مخصوص به خود را در قالب قرار میدهند.نمیدانم من هم باید چنین کاری را انجام دهم یا نه.
مشکل من این است که استاندارد ترین راهکار برای generate کردن قالب به این صورت در runtime را نمیدانم . جستجو هم فایده ای ندارد چون نمیدانم باید چه چیزی را جستجو کنم :ناراحت:
لطفا به عکس های ضمیمه شده دقت کنید. هر دوی این عکس ها مربوط به یک وبلاگ است با دو قالب متفاوت. کاربر قالب خود را از admin انتخاب میکند و بلافاصله اعمال میشود. برای اینکار حتما لازم است کد های html هم عوض شوند... اما چگونه ... ؟؟؟؟؟؟ :متفکر::لبخندساده:
reg_google
شنبه 28 دی 1387, 16:37 عصر
این کار شدنی است اما با توجه به اینکه اگر بخوام بهت توضیح بدم در این قالب نمی گنجد پس راهنمائیت می کنم
شما موارد زیر را مطالعه کنی حله
css
themes
masterpage
و masterpage های تو در تو
Ahoora_Mazda
شنبه 28 دی 1387, 18:23 عصر
مواردی که فرمودید را مفصل مطالعه کرده ام و نحوه استفاده از آنها را نیز بلد هستم (به جز theme) اما اینها به تنهایی جوابگوی این مسئله نیستند. مکانیزم کاری که من میخواهم انجام دهم با استفاده از xml است.خودم به یک جاهایی رسیدم، البته خیلی آماتور ... امیدوارم که بتونم به طور کامل و حرفه ای این نوع طراحی را فرا بگیرم و دانسته های خود را در اینجا به اشتراک گذارم.
از همه برنامه نویسان و طراحان مجرب دعوت میکنم که در این بحث شرکت کنند تا با کمک هم آن را به نتیجه برسانیم
ahmadirad1365
شنبه 28 دی 1387, 21:28 عصر
من در کار بزرگان دخالتی نمیکنم!!!
ولی اصولا هر صفحه وبی چند شی اصلی داره که اطلاعات در آنها گنجانده میشه و نبودن هر شی دلیل بر کار نکردن قسمتی از صفحه است.
خوب شما میتونید استایل مربوطه رو که میتونه مخلوطی از CSS و HTML باشه در قالب یک فایل XML با بخشهایی منظم تیکه تیکه کنید سپس با استفاده از کد نویسی بیایید اطلاعات رو از xml خونده و در قسمت مربوطه آپ نمائید تا ظاهر آن عوض شود. همین انجمن هم از چنین روشی استفاده کرده است
m.hamidreza
شنبه 28 دی 1387, 21:51 عصر
دوستان فرمودن. بازای هر قالب یه مسترپیج طراحی کن کانتنت های سایت شما مشخص و ثابت هست در قسمت هایی که در هر مسترپیج از پیش مشخص کردی اون کانتنت ها رو لود میکنی. اسم آخرین مسترپیجی که کاربر انتخاب کرده رو هم داری بصورت ران تایم به صفحاتت منتسب میکنی. مشکل کجاست؟
Ahoora_Mazda
شنبه 28 دی 1387, 23:53 عصر
مشکل اینجاست :
در حالت پیش فرض فقط یک قالب در سایت فعال است.کاربر برای تغییر قالب سایتش باید فایلهای قالب جدید رو خریداری کنه و آپلودش کنه. در این صورت 2 قالب خواهد داشت یک قالب پیش فرض یک قالب جدید.
که میتونه انتخاب کنه کدوم رو فعال کنه.
من نباید از اول مستر پیج ها رو بسازم. قالب سایت با استاندارد های xhtml و css طراحی میشه و ممکنه که بعد ها کسی دیگری بخواد برای سایت قالب جدید طراحی کنه (مثل وبلاگ) و باید سایت قابلیت پذیرش هر قالبی رو داشته باشه.
در این صورت باید کد های html در یک تمپلت قرار بگیرن (XSLT) ، و اطلاعات مربوط به بخشهای مختلف صفحه که ثابت هستند در یک فایل xml باشند. در برنامه هم فقط 1 مسترپیج وجود دارد که میخواهد کد قالب انتخابی کاربر را generate کند. راهی که به نظر من رسیده transform کردن تمپلت xslt با فایل xml در مستر پیج است. اما مشکلی که وجود دارد این است که بر خلاف وبلاگ ها ، صفحهات سایت کنترل ها و اجزای سمت سروری را هم دارد که نمیتوان آنها را در تمپلت ذخیره کرد. در مسترپیج هم نمیتوان قرار داد چون هیچ transformi صورت نگرفته است و در واقع هیچ مکانی برای قرار گرفتن المنت های سمت سرور وجود ندارد.
امیدوارم با این توضیحات طولانی، منظور خودم را رسانده باشم.
محمدامین شریفی
دوشنبه 30 دی 1387, 10:59 صبح
مشکل اینجاست :
صفحهات سایت کنترل ها و اجزای سمت سروری را هم دارد که نمیتوان آنها را در تمپلت ذخیره کرد. در مسترپیج هم نمیتوان قرار داد چون هیچ transformi صورت نگرفته است و در واقع هیچ مکانی برای قرار گرفتن المنت های سمت سرور وجود ندارد.
امیدوارم با این توضیحات طولانی، منظور خودم را رسانده باشم.
اگر مشکلت فقط کنترل های asp.net هست،میتونی از کنترل های html استفاده کنی ولی آنها را تحت سرور اجرا کنی،یا همه کنترل های html ات را درون یک فرم قرار بدی و بنویسی:
<form id="frm1" runat="server"></form>
حالا هم میتونی از مزایای کنترل های html سود ببری و هم کنترل از سوی server را از دست ندهی.
خودم به یک جاهایی رسیدم، البته خیلی آماتور ... امیدوارم که بتونم به طور کامل و حرفه ای این نوع طراحی را فرا بگیرم و دانسته های خود را در اینجا به اشتراک گذارم.
اگر میخواهی کار گروهی انجام بدی،پروژه را اینجا بزار تا همه دوستان روش کار کنند.
ISFAHAN
دوشنبه 24 اسفند 1388, 22:37 عصر
هیچ راه کار درست و حسابی و اساسی تا اینجا ارائه نشده است ... در هیچ تاپیکی ...
Fartaj
پنج شنبه 22 تیر 1391, 23:06 عصر
دوستان می شه تو این قضیه قالب یک سری مسائل رو توضیح بدید :
فرض کنید من تو فولدر app_theme دو تا قالب به نام های blue و red دارم که تو هر کدوم یک فایل css هم نام با کلاس های هم نام می باشد حالا میام یک جدول در نظر می گیرم با این مشخصات :
themeid , themename , Status
themename : نام قالب
Status : وضعیت قالب فعال یا غیر فعال که با on و off مشخص می کنیم
حالا من چند تا مشکل دارم :
1 - چطوری من تو مدیریت وقتی یک قالب رو on می کنم بقیه off بشن ؟
2 - حالا قالب فعال شد تو مسترپیج چطوری بفهمونم قالبی که on شده رو به عنوان قالب پیش فرض در نظر بگیر و هر موقع سایت دوباره لود شد با هون قالب جدیدش باشه ؟
ممنون می شم اگه راهنماییم کنید
afg_javan
شنبه 24 تیر 1391, 14:05 عصر
در مورد تم اصلا نظری ندارم چون استایل رو تغییر میده و همچین کاربردی نیست
اما نمونه که من قبلا کار کرده بودم به صورتی بود که مدیر می توانست چند قالب که از یک مسترپیج با نام مشخص و به تبع سی اس اس و ایمیج مجزا رو در دایرکتوری که من مشخص کرده بودم آپلود کنه
حالا صفحات رو بدون اینکه از مستر پیجی ارث بری کنه ایجاد می کردم .با استفاده از تابع Page_PreInit میومدم چک می کردم که مسترپیج فعال درون دیتابیس کدومه اگه مسترپیجی یا قالبی فعال بود خب مسترپیج این صفحه باشه آدرس اون در غیر اینصورت مسترپیج صفحه مسترپیجی باشه که من به صورت پیش فرض معرفی کردم
Fartaj
شنبه 24 تیر 1391, 15:06 عصر
در مورد تم اصلا نظری ندارم چون استایل رو تغییر میده و همچین کاربردی نیست
اما نمونه که من قبلا کار کرده بودم به صورتی بود که مدیر می توانست چند قالب که از یک مسترپیج با نام مشخص و به تبع سی اس اس و ایمیج مجزا رو در دایرکتوری که من مشخص کرده بودم آپلود کنه
حالا صفحات رو بدون اینکه از مستر پیجی ارث بری کنه ایجاد می کردم .با استفاده از تابع Page_PreInit میومدم چک می کردم که مسترپیج فعال درون دیتابیس کدومه اگه مسترپیجی یا قالبی فعال بود خب مسترپیج این صفحه باشه آدرس اون در غیر اینصورت مسترپیج صفحه مسترپیجی باشه که من به صورت پیش فرض معرفی کردم
یعنی چیزی که من از کار شما فهمیدم اینه که شما یک پوشه داشتین که داخل اون قالب های شما که شامل مسترپیج و موارد دیگه بوده رو نگه می داشتین و مستر پیج رو به صورت داینامیک عوض می کردین تو این کار به مشکلی بر نخوردین ؟؟ چون من الان همه چیزم آماده است منتها برای سمت کاربر چون قرار قالب عوض بشه هنوز نتونستم شروع کنم به قالب زدن بلاتکلیفم که مسترپیج رو باجاش عوض کنم یا قالب مسترپیج ، چون اگه قرار باشه مستر پیج عوض بشه به نظر منم بهتر بود چون می شد کل شکل و شمایل سایت رو عوض کرد ولی تم پیچیده می شد
حالا یک نکته اگه من بیام مسترپیج رو عوض کنم باید چجوری به همه صفحاتم بگم از این مسترپیج پیروی کنید چون ما در حالت عادی صفحه رو که اضافه می کنیم همونجا بهش می گیم مسترپیجت کیه ؟؟ یعنی ما باید تو تک تک صفحات دیتابیس رو بخونیم ؟؟
afg_javan
شنبه 24 تیر 1391, 15:19 عصر
مشکل جدی در استفاده از این روش در سایتها کوچک تا متوسط وجود نداره
اما در مورد سوالتون
صفحات رو بدون استفاده از مستر پیج اضافه کنید سپس تمام کد های اچ تی ام الی اونو پاک کنید
در کدبیهاینت ما به تابعی نیاز داریم که قبل از تابع پیج لود اجرا بشه و این کار تابع Page_PreInit هستش در این تابع مشخص می کنیم آدرس مسترپیج فایل چیه
مثلا:
Page.MasterPageFile="~/template/theme1/masterpage.master";
Fartaj
یک شنبه 25 تیر 1391, 09:13 صبح
شما برای ContentPlaceHolder چی کار کردی ؟؟ مثلا من میام صفحه تماس با ما رو به صورت داینامیک به یک مسترپیج نسبت می دم اما خوب صفحه تماس با ما یک سری مطالب و ابزار از خودش داره که تو حالت عادی تو ContentPlaceHolder قرار می دادیم اما اینجا تااین تگ رو می زارم می گه مسترپیج رو نمی شناسه ؟؟ وقتی من میام مثلا وسط مسترپیج رو برای مطالب خود صفحات در نظر می گیرم اینو باید تو صفحات چجوری تنظیم کنم ؟؟
afg_javan
یک شنبه 25 تیر 1391, 11:47 صبح
دقیقا یادم نیست چی کار کردم :خجالت:
اما
نکته1:تمامی مسترپیج ها باید دارای contentplaceholder با آیدی مشترک باشند
این طور نباشد که مثلا در قالب شماره 1 شما آیدی contentplaceholder با قالب شماره 2 شما آیدی متفاوتی داشته باشه
به صورت زیر امتحان کن ببین جواب میده یا نه!
صفحه ایی که بدون مسترپیج ساختی نباید هیچ تگی به غیر از تگ <%@page داشته باشه
بعد از این تگ یک تگ div باز کن مثلا با آیدی div_d و حتما runat="server" رو به تگ اعمال کن (توجه داشته باش که تگ div به طور پیش فرض در ویژوال استدیو دیده نمی شه اما شما بنویس)
به این صورت:
<div id="div_d" runat="server" > </div>
سپس در کدبیهاینت صفحه به صورت زیر بنویس (داخل تابع Page_PreInit)
Page.MasterPageFile = "~/template/theme1/masterpage.master";
Content d = new Content();
d.ID = "dd";
d.ContentPlaceHolderID = "ContentPlaceHolder1";
d.Controls.Add(div_d);
استفاده از این روش خیلی سخت اما همینطور خیلی هم شیرین و کاربردیه و ارزش امتحان و بالا ، پایین کردن اونو داره
سعی کن ببین با این روش می شه یا نه
دقیقا یادم نمی آد چی به چی شد اما هروقت مراحل اون به طور کامل یادم اومد حتما اینجا می نویسم :لبخندساده:
afg_javan
یک شنبه 25 تیر 1391, 11:54 صبح
بزرگان تالار !!!!!!!!!!!!!!!! ------- :متعجب::متعجب::متعجب::متعجب:
خواهشا در این مورد نظری ، راهنمایی ، انتقادی یا پیشنهادی دارین بفرمایید
ramin149
یک شنبه 25 تیر 1391, 12:07 عصر
دوستمون [/URL] (http://barnamenevis.org/member.php?69493-kiosksoft) [URL="http://barnamenevis.org/member.php?69493-kiosksoft"] kiosksoft در پست شمار 4 بهترین و اصولی ترین روش روبیان کردند . اگر شما یک قالب div بیس طراحی کنید به راحتی می توانید کنترل ها رو جابجا کنید و تغییرشون بدید . و اینکه معمولا طراحان فقط asp.net رو برای کد نویسی استفاده می کنند نه طراحی وب سایت . و در این کار asp.net فقط برای تغییر آدرس css به کار می رود .
Stylesheet1.Attributes["href"] = ResolveUrl("css1.css");
Stylesheet1.Attributes["href"] = ResolveUrl("css2.css");
برای راهنمایی بیشتر از تالار های css و jquery استفاده کنید .
Fartaj
یک شنبه 25 تیر 1391, 18:01 عصر
دقیقا یادم نیست چی کار کردم :خجالت:
اما
نکته1:تمامی مسترپیج ها باید دارای contentplaceholder با آیدی مشترک باشند
این طور نباشد که مثلا در قالب شماره 1 شما آیدی contentplaceholder با قالب شماره 2 شما آیدی متفاوتی داشته باشه
به صورت زیر امتحان کن ببین جواب میده یا نه!
صفحه ایی که بدون مسترپیج ساختی نباید هیچ تگی به غیر از تگ <%@page داشته باشه
بعد از این تگ یک تگ div باز کن مثلا با آیدی div_d و حتما runat="server" رو به تگ اعمال کن (توجه داشته باش که تگ div به طور پیش فرض در ویژوال استدیو دیده نمی شه اما شما بنویس)
به این صورت:
<div id="div_d" runat="server" > </div>
سپس در کدبیهاینت صفحه به صورت زیر بنویس (داخل تابع Page_PreInit)
Page.MasterPageFile = "~/template/theme1/masterpage.master";
Content d = new Content();
d.ID = "dd";
d.ContentPlaceHolderID = "ContentPlaceHolder1";
d.Controls.Add(div_d);
استفاده از این روش خیلی سخت اما همینطور خیلی هم شیرین و کاربردیه و ارزش امتحان و بالا ، پایین کردن اونو داره
سعی کن ببین با این روش می شه یا نه
دقیقا یادم نمی آد چی به چی شد اما هروقت مراحل اون به طور کامل یادم اومد حتما اینجا می نویسم :لبخندساده:
دوست عزیز وقتی این کد رو می زارم این ارور رو می ده :
Setting the ContentPlaceHolderID property of System.Web.UI.WebControls.Content is not supported
و وقتی به جای :
d.ContentPlaceHolderID ="ContentPlaceHolder1"
این رو می زارم :
d.FindControl("ContentPlaceHolder1");
ارورم نمی ده ولی هیچ کاریم نمی کنه ( قالب رو می گیره ولی محتوای اون صفحه رو نشون نمی ده )
دوستان دیگه وقتی برام نمونده دیگه نمی تونم به غیر از مسترپیج رو چیز دیگه ای کار کنم ، هر کی این کار رو کرده ممنون می شم تکلیف contentplaceholder رو مشخص کنه ، به خدا گیر کردم :گیج::گیج:
vBulletin® v4.2.5, Copyright ©2000-1404, Jelsoft Enterprises Ltd.