لقد قمت بتطوير الويب لعدة سنوات. لدي تفاهمات مختلفة في شركات مختلفة. لقد عملت مؤخرًا على مشروع مدونة. لقد أدركت دور فئات القالب في تطوير الويب. أنا في المنزل ليلا. اعتقدت دائمًا أنه يمكنني إنشاء فئة قالب مصممة خصيصًا لتطوير asp.ne. لذلك كتبت فئة القالب هذه.
عنوان التحميل اضغط هنا
ما عليك سوى إعادة تسمية ملف 500sea.txt الذي تم تنزيله إلى Templet.rar وفتحه.
إذا مفتوحة
http://img.club.163.com/images/user/other/500sea
لا توجد مطالبة بتنزيل ملف 500sea.txt. ثم استخدم Internet Express وأدوات أخرى لتنزيل هذا العنوان وتغيير ملف 500sea.txt الذي تم تنزيله إلى ملف *.rar.
يوجد أدناه ملف وصف بالداخل
//---------------------------------------------------------------- -------------------------------------------------- --------------------------//
يقدم:
تمت كتابة فئة القالب هذه لتطوير موقع ويب ذو بنية ثلاثية المستويات. مكون StringTempletReplet.dll
يحتوي على فئات القالب. يمكن استخدام فئات القالب في مساحة الاسم StringTempletReplet في طبقة واجهة المستخدم أو
لاستخدامها في طبقة المنطق.
*************************************************************************************************************************************************************************** * ***************************
كيفية التشغيل:
قم بإنشاء دليل ظاهري باسم Templet للإشارة إلى مجلد Templet الذي تم فك ضغطه.
قم بتشغيل RetuenString.aspx الداخلي، وReturnText.aspx، وWriteArticon.aspx،
صفحة LongLoop.aspx. توجد تعليمات مقابلة في ملف cs المطابق للصفحة.
عند فتح الصفحة لأول مرة، يجب حفظ كائن المفوض وملف القالب في ذاكرة التخزين المؤقت، وبالتالي فإن السرعة الحقيقية تعتمد على الصفحة الأولى.
مرة واحدة في وقت لاحق.
*************************************************************************************************************************************************************************** * ***************************
مقدمة المبدأ:
نموذج لاستبدال التسمية. تم استخدام حساب المؤشر في C# للعثور على موقع التسمية.
استخدم كائن المفوض للإشارة إلى وظيفة التحليل المقابلة لعلامة الصورة، واستخدم الكائنات الثابتة لتخزين جميع كائنات المفوض مؤقتًا.
قم بتخزين محتوى القالب بالكامل مؤقتًا دون تغيير نص القالب. يمكن تغيير القوالب ديناميكيًا.
*************************************************************************************************************************************************************************** * ***************************
مقدمة العلامة:
المحتوى الموجود بين زوج الرموز الخاصة {$ و$} هو عبارة عن تسمية
يحب
{$اسم العلامة:المعلمة 1:المعلمة 2:المعلمة 3::الحرف 10$}
{$tagname:parameter1:parameter2::byte10$}
{$دت[5][اسم]$}
تنقسم التسمية إلى قسمين (جزء معلمة التسمية) و (جزء التحكم في الأمر) من خلال الرمز :: الموجود داخل الملصق.
{$tagname:parameter1:parameter2:parameter3::byte10$}
(جزء معلمة العلامة) :: (جزء التحكم في الأمر)
في هذين الجزأين، افصل جزء معلمة التسمية وجزء التحكم في الأمر بعلامة:.
جزء معلمة العلامة --- الأول هو اسم العلامة، وهو الاسم المقابل لوظيفة تحليل العلامة، والجزء اللاحق هو معلمات الوظيفة.
تقبل وظيفة تحليل العلامات جميع أنواع المعلمات كنوع سلسلة، وعدد المعلمات هو 0-20.
الوظيفة، نوع الإرجاع هو نوع السلسلة. يمكن ترميز المعلمات بشكل ثابت على الملصق أو كتابتها ديناميكيًا.
جزء التحكم في الأوامر --- يوجد الآن حرفان فقط من رموز الأوامر والبايتات، متبوعة بمعلمة رقمية، تشير إلى معيار الاعتراض
طول نتيجة تحليل التوقيع، مثل 10 أحرف و10 بايت.
سأقوم بتوسيع رموز القيادة والتحكم الأخرى في المستقبل.
للتعرف على المراسلات بين التسميات والوظائف، يرجى الاطلاع على الإرشادات الموجودة في ملف Business.cs.
للحصول على قواعد استخدام محددة للعلامات، يرجى الاطلاع على الإرشادات الموجودة في القالب/temple/aa1.htm.
للحصول على قواعد اتصال محددة، يرجى مراجعة صفحات ASPX الثلاث في المشروع.
WriteArticon.aspx - نظام أخبار يقرأ القوالب ويوزع الملفات المكتوبة لإنشاء صفحات ثابتة
ReturnText.aspx - قراءة تحليل القالب وإرجاع السلاسل المستخدمة لكتابة الصفحات التي غالبًا ما تحتاج إلى تغيير مظهرها.
صفحة الجلد. يمكن تغيير القوالب ديناميكيًا.
RetuenString.aspx - يقبل سلاسل العلامات ويعيد نتائج التحليل. يشيع استخدامها مع اياكس.
*************************************************************************************************************************************************************************** * ******************************
تسمية القيمة الديناميكية:
يمكن لوظيفة تحليل العلامات قبول المعلمات الثابتة التي تم تمريرها في العلامة. هناك ثلاث طرق لقبول المعلمات الديناميكية
بعد تمرير كائنات Datatable وHashtable إلى فئة القالب
(يتم الحصول على Datatable من طبقة البيانات، ويكون Hashtable بشكل عام عبارة عن متغيرات الصفحة ومتغيرات أخرى)
1. dt[5] [name] ---- يعني الحصول على القيمة في عمود الاسم المكون من 5 صفوف في Datatable، الأول هو رقم،
والثاني هو اسم العمود
2. dt[name] ---- خارج الحلقة، فهذا يعني أخذ القيمة الموجودة في عمود الاسم للصف 0 في Datatable.
تمثل إحدى المعلمات اسم العمود
---- في الحلقة، يعني أخذ القيمة الموجودة في عمود الاسم في Datatable، خذ ذلك
يتم تحديد هذه الخطوط بواسطة معلمات علامة الحلقة.
3. page[PageId] ----- يمثل أخذ القيمة الموجودة على مفتاح PageId في كائن Hashtable وإرجاع نوع السلسلة
على سبيل المثال، {$two المعلمات المرجعية:dt[3][word]:page[UserId]::character 10$}
{$dt[5][name]$} {$dt[name]$} {$page[ معرف الصفحة ]$}
أو
{$dt[5][name]::Character 10$} {$dt[name]::Character 10$} {$page[PageId]::Character 10$}
تشير هذه العلامة إلى أن القيمة الموجودة في الكائن يتم عرضها مباشرة على الصفحة.
*************************************************************************************************************************************************************************** * ***************************
استدعاء طريقة فئة القالب داخل الصفحة أو الفئة:
يمكن استدعاؤها داخل صفحة أو فئة
قم بإنشاء كائنات وربط فئات تحليل وظيفة العلامة المقابلة
// هنا نحتاج فقط إلى إضافة كائن فئة الأعمال بعد هذا السطر new Business()
// باستخدام الواجهات لتنفيذ تعدد الأشكال، يبدو الكود مرهقًا بعض الشيء. عندما تستخدمها بنفسك، ما عليك سوى تعديل آخر "New Business()" إلى فئتك الخاصة التي تحتوي على وظيفة تحليل العلامات.
ILabelAnalyStart objILabel=(ILabelAnalyStart) new TempletReplet(new Business());
// قراءة سمة مسار القالب
objILabel.ReadFilePath=this.Server.MapPath("templet/aa1.htm");
//اكتب سمة مسار الملف
objILabel.WritFilePath=this.Server.MapPath("page/aa1.html");
// احصل على كائن جدول البيانات
objILabel.LabelDatatable=ds.Tables[0];
// قم بتمرير المتغيرات الموجودة في هذه الصفحة إلى فئة القالب باستخدام كائنات Hashtable
objILabel.LabelHashtable=ht;
ثم يمكن تحقيق ثلاثة بدائل
// ابدأ في استبدال القالب وكتابته
objILabel.LaberReplet();
// إرجاع نتيجة التحليل
string aa=objILabel.LaberRepletText();
// قم بإرجاع نتيجة التحليل لقبول سلسلة القالب مباشرةً. راجع ملف RetuenString.cs للحصول على التفاصيل.
string aa=objILabel.LaberRepletString();
للحصول على التفاصيل، يرجى الاطلاع على ملفات cs لهذه الملفات الثلاثة
WriteArticon.aspx - نظام أخبار يقرأ القوالب ويوزع الملفات المكتوبة لإنشاء صفحات ثابتة
ReturnText.aspx - قراءة تحليل القالب لإرجاع سلسلة واستخدامها لكتابة الصفحات التي غالبًا ما تغير مظهرها.
صفحة تغيير الجلد
RetuenString.aspx - يقبل سلاسل العلامات ويعيد النتائج التي تم تحليلها. يشيع استخدامها مع اياكس
********************************************** *** **********************************
جمعية وظيفة التسمية:
يرجى الاطلاع على ملف Business.cs للحصول على التفاصيل.
في المُنشئ الثابت للفئة المقابلة للطبقة المنطقية، أضف الكود التالي.
// اتصل بالمنشئ الثابت وضع تفويض وظيفة تنفيذ العلامة في جدول التجزئة الثابت
// يجب تنفيذ هذه الطريقة
الأعمال الثابتة()
{
Business _this=new Business();
FunctionList.objFunctionHashtable.Add("لا توجد إشارة مرجعية لمعلمة",new KeyItemDelegate(new UserDelegate.Run_0(_this.show),0));
FunctionList.objFunctionHashtable.Add("إشارة مرجعية لمعلمة واحدة",new KeyItemDelegate(new UserDelegate.Run_1(_this.tag),1));
FunctionList.objFunctionHashtable.Add("إشارتان مرجعيتان للمعلمات",new KeyItemDelegate(new UserDelegate.Run_2(_this.tag_two),2));
// ترتبط الإشارات المرجعية بوظائف التنفيذ. ضعه في المُنشئ الثابت لفئة تحليل الإشارات المرجعية. يهدف هذا إلى استخدام الكائنات الموجودة في الذاكرة بشكل كامل دون تنفيذها في كل مرة.
// يتوافق حرف "الإشارة المرجعية للمعلمة" مع وظيفة علامة السلسلة العامة (سلسلة aa). الوضع المقابل هو إضافة مفتاح وقيمة إلى جدول التجزئة.
// ("إشارة مرجعية للمعلمة"، new KeyItemDelegate(new UserDelegate.Run_1(_this.tag),1));
// اسم العلامة |
// استخدم مندوب Run_1 لمعلمة واحدة. |
// وظيفة تنفيذ العلامة المقابلة |
// لمعلمة واحدة، اكتب الرقم واحد
// 0 أو أكثر من الأمثلة المقابلة أعلاه
}
يرجى الاطلاع على ملف Business.cs للحصول على التفاصيل
***************************************** ****************************************
مقدمة للحلقة داخل العلامات:
يمكن تنفيذ الحلقات غير المتداخلة باستخدام بعض الرموز الخاصة داخل العلامة.
//---------------------------------------------------------------- --------------------------
{$loop(3,0,alter)$} // عرض ثلاثة أسطر، بدءًا من السطر 0. إذا كانت هناك أعمدة بديلة، فقم بتشغيل الأعمدة البديلة.
{$BlockItem$} // خط الحلقة الافتراضي،
<td bgcolor="#33ccff">العنوان:{$dt[5][name]$}، المؤلف:{$One Parameter:dt[dddf]$}</td>
{$/بلوكItem$}
{$BlockAlterItem$} // تكرار الصفوف بالتناوب عندما لا يكون هناك زوج تسمية صف افتراضي، يوجد زوج تسمية حلقة بديل. تعامل مع زوج التسميات البديل كزوج تسميات الصف الافتراضي
<td bgcolor="#ff6699">العنوان:{$dt[5][name]$}، المؤلف:{$one Parameter:dt[dddf]$}</td>
{$/BlockAlterItem$}
{$BlockPatch$} // عندما يكون عدد الصفوف المراد تكرارها أكبر من عدد الصفوف في Datatable، استخدم المحتوى هنا لتكملة العرض. إذا لم يكن هناك زوج علامات "إضافي". ثم عندما يكون عدد الصفوف المعروضة أكبر من عدد الصفوف في Datatable، سيتم عرض عدد الصفوف في Datatable فقط.
<td bgcolor="#33ccff">الملحق (يمكن أيضًا استخدام العلامات بالداخل)</td>
{$/بلوك باتش$}
{$BlockAlterPatch$} // لا يوجد زوج تسميات تكميلي، ولكن هناك أزواج تسميات تكميلية بديلة. تعامل مع أزواج العلامات التكميلية المتناوبة كأزواج علامات تكميلية
<td bgcolor="#ff6699">ملحق بديل (يمكن أيضًا استخدام العلامات بالداخل)</td>
{$/بلوكألتيرباتش$}
{$/loop$} // نهاية الحلقة
//---------------------------------------------------------------- ---------------
{$BlockItem$} {$/BlockItem$}: زوج تسمية الصف التكراري الافتراضي
{$BlockAlterItem$} {$/BlockAlterItem$} : تدوير أزواج تسميات الصفوف بالتناوب
{$BlockPatch$} {$/BlockPatch$}: زوج تسمية السطر الإضافي الافتراضي
{$BlockAlterPatch$} {$/BlockAlterPatch$}: تكملة أزواج تسميات الصفوف بالتناوب
//------------------------------- -- -----------------------
إذا كان لديك خط الحلقة الافتراضي فقط، فلا يمكنك إضافة زوج العلامات {$BlockItem$}.
يحب
{$حلقة(3,0,تغيير)$}
<tr><td>{$علامة الوظيفة$}</td></tr>
{$/حلقة$}
و
{$حلقة(3,0,تغيير)$}
{$BlockItem$}<tr><td>{$function label$}</td></tr>{$/BlockItem$}
{$/حلقة$}
يعني نفس التأثير
//---------------------------------------------------------------- -------------
{$حلقة(3,0,تغيير)$}
{$بلوكألتيرباتش$}
<tr><td>{$علامة الوظيفة$}</td></tr>
{$/بلوكألتيرباتش$}
{$/حلقة$}
إذا كان هناك فقط أزواج تسميات صف الدورة البديلة ولم يكن هناك زوج تسميات صف الدورة الافتراضي، فسيتم تحويل زوج تسميات صف الدورة البديل تلقائيًا إلى
أزواج تسمية خط الحلقة الافتراضية
//---------------------------------------------------------------- ---------------
{$حلقة(3,0,تغيير)$}
{$بلوكألتيرباتش$}
<tr><td>{$علامة الوظيفة$}</td></tr>
{$/بلوكألتيرباتش$}
{$/حلقة$}
إذا كان هناك فقط أزواج تسميات سطر تكميلية متناوبة ولم يكن هناك زوج تسميات سطر إضافي افتراضي، فسيتم تحويل أزواج تسميات السطر التكميلية البديلة تلقائيًا إلى
أزواج تسمية خط الحلقة الافتراضية
*************************************************************************************************************************************************************************** **********************
وصف معلمة الحلقة:
{$حلقة(3,0,تغيير)$}
هناك ثلاث معلمات في الحلقة، والتي يمكن تخفيضها بشكل مناسب.
المعلمة الأولى:
3: حلقة 3 مرات، لا يعني تكرار كل شيء
المعلمة الثانية:
2: البدء من 2، لا يعني البدء من 0
المعلمة الثالثة:
يبدل : يبدل
noalter: لا يوجد تبديل، إذا لم يكن هناك إشارة، فالافتراضي هو التناوب، لذا فهو نفسه سواء أضيف التغيير أم لا.
إذا تم حذف جميع المعلمات الثلاثة، فيجب الاحتفاظ بزوج من الأقواس الفارغة {$loop()$} على الأقل.
يمثل عدد الصفوف في حلقة Datatable
بدءًا من السطر 0، إذا كان هناك ملحق، فسيتم عرض الملحق.
*************************************************************************************************************************************************************************** *************************
لقد كان هناك تحديث. حلقة التحسين بشكل رئيسي.
الآن يستغرق الأمر ما بين 300 إلى 400 مللي ثانية للتكرار عبر جدول يحتوي على 50000 صف.
*************************************************************************************************************************************************************************** *************************
من المستحسن ألا يزيد حجم القالب عن 85 كيلو بايت، واحذر من أن يصبح كائنًا كبيرًا الحجم. يوصى بأن يكون عدد قوالب الصفحات لكائنات الجيل الثاني أقل من أو يساوي 919، ويجب ألا يتجاوز عدد علامات الوظائف المقابلة 1597.
من الجيد أن أرى فئة القالب تنمو جنبًا إلى جنب مع فهمي الخاص.
*************************************************************************************************************************************************************************** * ***************************