• 0
العيافـي

حزمة لتحويل ملف Xml الى (قائمة + قائمة فرعية + دليل الصفحة + خارطة الموقع )

سؤال

بسم الله

بالنسبة لهذا الحزمة فهي تقدم الكثير من الخدمات للمطور حيث تحفظ وقته، كما أني استخدمها على موقعين "خاصة" وهي تعمل بكفاءة.

استخدم لعرض القائمة كود (جافاسكريب) التالي http://www.smartmenus.org

طريقة كتابة ملف XML


<menu id="Menu1" classStyle="MM" style="padding-top: 0px;" subMenuClassStyle="submenu">

<tab link="#" titleKey="AllUsers" userType="*">
<item link="index.jsp" titleKey="index" />
<items link="#" titleKey="ss">
<item link="sitemap.jsp" titleKey="sitemap" />
<item link="addCompany.jsp" titleKey="addCompany" />
</items>
</tab>
</menu>

بالنسبه للامر

  id="Menu1"  classStyle="MM" style="padding-top: 0px;" subMenuClassStyle="submenu"

لا تهتم بها الان سنذكر فائدتها لاحقا.

هذه صورة للقائمة التي ستنتجها الحزمة بناءا على الكود السابق

(علما بان النصوص تقرأ من ApplicationResources.properties بواسطة الخاصية "titleKey")

post-82434-12637488871389_thumb.gif

اما الخاصية "userType" فهي لتحديد المستخدمين الذين لهم صلاحية للوصول الى هذه الصفحة

فالعلامة "*" تعني جميع المستخدمين.

اذا اردت تخصيص تاب لمستخدم معين وليكم "admin"

فما عليك سوى جعل الخاصية "userType" تساوي "admin"

كما يمكنك تخصيص تاب لاكثر من مستخدم فمثلا لو كان لديك مستخدم admin و div فيمكنك كتابة الكود التالى

userType="admin, div"

كما ان ما ينطبق على tab ينطبق على items و item

_______________________________________________

سأعرض صورة من صفحة خارطة الموقع لاحتوائها على (قائمة+وقائمة فرعية + مسار الصفحة + وخارطة الموقع)

و قد تم تمثيلها في الكود السابق بالامر

<item link="sitemap.jsp" titleKey="sitemap" />

فستحصل على

post-82434-12637488964071_thumb.gif

هذا شرح بسيط و سريع لكيفية كتابة ملف XML

علما بانه توجد خصائص أخرى سأذكرها بالتفصيل لاحقا.

كيفية استخدام الحزمة

الملف OMenuTag.tld يوضع في المسار WEB-INF

الملف omenu_0.3.jar يوضع في المسار WEB-INF\lib

في صفحة ال JSP اكتب الكود التالي لاعداد الحزمة

وسأشرح الفائده من كل خاصية لاحقا



<menu:setting
defaultLocale="ar"
useTitleKey="true"
useAltWithLink="false"
applicationResourcesPath="res/lang"
useUserType="true"
userType="userType"
usePrivilege="false"
allowedToPrivileges="false"
privileges="listPrivilage"
useShortcut="false"
shortcuts="listShortcut"
menuXMLPath="/res/menu.xml"
commonPages="errorPage.jsp" />

اما الكود التالي فهو لرؤية مؤخرجات البرنامج بصيغة HTML


// لطباعة القائمة
<menu:omenu value="menu" />
// لطباعة القائمة الفرعية
<menu:omenu value="subMenu" />

// لطباعة مسار الصفحة
<menu:omenu value="path" />
// لطباعة خارطة الموقع
<menu:omenu value="sitemap" />

المرفق يحتوي على مثال لتجربة السكريبت بصيغة war

والشفرة المصدرية للمثال

اما شفرة الحزمة فسأرفقها لاحقا .....

test.zip

تم تعديل بواسطه العيافـي
3

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه

13 إجابة على هذا السؤال .

  • 0

تطبيق جميل لل custom tags. ويبدو لي أيضا أنك تستعمل ال internationalization. :cool:

هل الكود الذي يحمل ال resourcebundle موجود في ال tag handler؟؟

عندي مشكل في ظهور أسماء القائمة، حيث يظهر لي فقط null بدل الاسماء. يبدو أنه هناك مشكل في تحميل الملفات properties. ممكن المشكل من عندي، لكني مشغول قليلا الآن :P

:thumb_up:

0

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه
  • 0

شرح اعدادات الحزمة

في البداية يجب ان تعلم بان الحزمة تقراء النصوص (العربية او الانجليزية) من ملف ApplicationResources.properties

defaultLocale="ar"  

هذه الخاصية لمعرفة اللغة الافتراضية لموقعك . ففي هذه الحالة السكريبت يقرأ من الملف ApplicationResources_ar.properties

useTitleKey="true"      

في الغالب ستكون فيمة هذه الخاصية true .ا

applicationResourcesPath="res/lang" 

لتحيد ملف Resources .في هذا المثال قمت بتغيير اسم الملف الى lang تحت الحزمة res

menuXMLPath="/res/menu.xml"

لتحديد مسار ملف XML

useUserType="true"

هذه الخاصية عبارة عن شرط (هل تستخدم نوع المستخدم لعرض و اخفاء الروابط)

userType="userType"

اسم نوع المستخدم المحفوظ في الجلسة (session)

usePrivilege="false"

قد ترغب في استخدام "الصلاحيات" بدلا من استخدام "نوع المستخدم" لعرض القائمة. فهذه تفي بالغرض.

مثال في ملف xml ستكتب الكود التالي

<item link="sitemap.jsp" titleKey="sitemap" functionCode="C009"/>
<item link="addCompany.jsp" titleKey="addCompany" functionCode="Y6F5"/>

في الكود السابق ستعرض الصفحة "sitemap.jsp" لمن يمكلك الصلاحية "C009" اما الصفحة الاخرى فستعرض لمن يملك الصلاحية Y6F5

allowedToPrivileges="false"

تستخدم هذه الخاصية مع الصلاحيات . فعندما تكون قيمتها true فهذا يعني ان من يملك هذه الخاصية فيحق له رؤية الصفحة.

اما لو كانت قيمتها false فهذا يعني بان من يملك الصلاحية لا يحق له رؤية الصفحة.

privileges="listPrivilage"

هذه تستخدم مع الصلاحيات. وهي اسم قائمة الصلاحيات في الجلسة، وهي عباره عن List of String

علما بانه يمكنك استخدام "نوع المستخدم" و "الصلاحيات" لعرض و اخفاء الروابط

useShortcut="false"

لا اعتقد بان احد سيستخدما لذلك سأشرحها لاحقا

shortcuts="listShortcut"

لا اعتقد بان احد سيستخدما لذلك سأشرحها لاحقا

commonPages="errorPage.jsp"

لا اعتقد بان احد سيستخدما لذلك سأشرحها لاحقا

useAltWithLink="false"

هذه الخااصية معطلة حاليا

يتبع ان شاء الله (الخصائص الاضافي في ملف XML )

0

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه
  • 0

عزيزي herch

تطبيق جميل لل custom tags. ويبدو لي أيضا أنك تستعمل ال internationalization. :cool:

هل الكود الذي يحمل ال resourcebundle موجود في ال tag handler؟؟

نعم استخدم internationalization

الكود الذي يحمل resourcebundle موجود في الصنف الذي يقرا ملف XML حيث يقوم باستبدال قيمة titleKey بما يعادلها في الملف lang.properties

بالنسبة للمشكلة التي تواجهها ارجوا منك اخباري عنها بالتفصيل

0

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه
  • 0

هذا ما يظهر عندي

post-181903-1263764869884_thumb.png

حسب ما فهمت، فإنك أولا عندما تكتب الوسم <settings> فإنه تتم المناداة على othman.web.menu.tag.SettingTag الذي ينادي على فئة تقرأ المستند xml وتقوم باستبدال قيمة titleKey بما يعادلها في الملف

lang.properties

لكن كيف تربط بين ال xml وال javascript؟؟

0

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه
  • 0

استخدم سيرفر JBoss و يعمل بشكل ممتاز

كما اني جربته على Tomcat وايضا يعمل بشكل ممتاز

اعتقد بان هناك exception هل يمكنك عرضه هنا ؟ اذا وجد.

___

بالنسبة لسؤالك طريقة الربط بين xml و JS

ببساطة وظيفة الحزمة هي تحويل الاكواد الموجوده في XML الى شفرة HTML

لتحصل على

<ul  class="MM"  id="Menu1"  style="padding-top: 0px;"  >
<li><a href="#" >كل المستخدمين</a>
<ul><li><a href="index.jsp" >الرئيسية</a></li>

<li><a href="#" >قائمة</a>
<ul><li><a href="sitemap.jsp" >خارطة الموقع</a></li>
<li><a href="addCompany.jsp" >اضافة شركة</a></li>
</ul>
</li>

</ul>
</li>

</ul>

وبما انك ادرجت ملفات الجافاسكريبت في الصفحة فستتولى هي الباقي .

0

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه
  • 0

مثال حي للحزمة على موقع EATJ

http://oalgahtani2.s156.eatj.com/TestOMenu/jsp/

يحتوي المثال على 3 صفحات JSP فقط

الصفحة الرئيسية http://oalgahtani2.s156.eatj.com/TestOMenu/jsp/index.jsp

خارطة الموقع http://oalgahtani2.s156.eatj.com/TestOMenu/jsp/sitemap.jsp

اضافة شركة http://oalgahtani2.s156.eatj.com/TestOMenu/jsp/addCompany.jsp

وهي صفحات ليس لها اي "action"

اما بقية الروابط في للعرض فقط

0

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه
  • 0

لم يظهر لي exception لكن لا بأس، وصلت الفكرة :happy:، وممكن أسرقها منك :P

0

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه
  • 0

سيتم طرح الكود قريبا ان شاء الله ويمكنك المشاركة في تطويرها

0

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه
  • 0

ان شاء الله

0

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه
  • 0

كما ذكرنا سابقا بانه يوجد بعض الخصائص في ملف XML

سأقوم بذكرها وطريقة الاستفادة منها

اولا سأذكر مثال لعنصر"رابط صفحة" معين

<item link="addUser.jsp" titleKey="addUser" visible="true" itemCode="444" pages="addUser1.jsp, addUser2.jsp"></item>

الخاصيتين link & titleKey

تم التطرق لها سابقا

الخاصية visible

هي لادراج الرابط في القائمة او أخفاء الرابط

الخاصية itemCode

ذكرنا سابقا بانه يمكنك استخدام "نوع المستخدم" أو "الصلاحيات" لعرض او اخفاء الروابط في القائمة .

فهذه الخاصية ستستخدم عندما تستخدم "الصلاحيات" لعرض او اخفاء الروابط

الخاصية "pages"

تستخدم عندما تكون هناك اكثر من صفحة مرتبطة برابط واحد.

مثال عندما نستخدم Struts فان الرابط سيكون بهذا الشكل addUser.do ، ولكن اسم الملف سيكون addUser.jsp فلكي تقوم الحزمة بانتاج القائمة بالشكل الصيح فيجب عليك كتابة الكود التالي

<item link="addUser.do" titleKey="addUser" pages="addUser.jsp"></item>

ارجوا ان اكون وفقت الى توضيح طريقة استخدام الحزمة.

واي استفسار انا مستعد للتوضيح

:)

تم تعديل بواسطه العيافـي
0

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه
  • 0

أخي العيافي لم أفهم أن الحزمة من برمجتك إلى أن قلت سأطرح الشيفرة

على كل في انتظار الحزمة على أحر من جمر

بالمناسبة المثال يعطيني رسالة بالخطأ 500

أخيراً هل ستطرحها على أساس أنها مفتوحة المصدر؟

وما الترخيص الذي ستطرحها عليه؟

تحياتي

تم تعديل بواسطه علاء الصالحي
0

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه
  • 0

تسرني دائما مشاركاتك عزيزي علاء

في الحقيقة ان فكرة الحزمة من احد زملائي في العمل ... وقمت بتحويله هذه الفكره الى واقع .... والحمد لله ..

لا يمنعني من ادراج الحزمة سوى رغبتي الشديدة في تحسين الشفره ..

ان شاء الله تعالى سأحاول الانتهاء من التحسينات قريبا ..

او قد اضيف الحزمة في مساحة خاصة و ابداء في تطويرها الحزمة على اكثر من اصدار

0

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه
  • 0

السلام عليكم

اعلم اني تأخرت في ارفاق الشفره ...

الملف المرفق التالي يحتوي على المشروع (eclipse)

ملف war لتجربة السكريبت

حزمه السكريبت + ملف tld

OMenu-0.4.rar

0

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه

من فضلك سجل دخول لتتمكن من التعليق

ستتمكن من اضافه تعليقات بعد التسجيل



سجل دخولك الان

  • يستعرض القسم حالياً   0 members

    لا يوجد أعضاء مسجلين يشاهدون هذه الصفحة .