مستوى الصعوبة: متوسطة
متطلبات سوفت وير :فلاش ام اكس
مايغطيه الدرس :كيفية استخدام الشير اوبجكت
متطلبات يلزم معرفتها قبل الدرس:Variables, Objects, Methods
الدرس
ميزة اخرى رائعة من مميزات فلاش ام اكس SharedObject صممت هذه الميزة لتسمح لك بحقظ معلومات على الهارد درايف لليوزر و يمكنك القول انها تشبه الكوكيز الى حد ما على انها افضل و اذا لم تستطع التقكير فيما يمكنك الاستفاده منه بحفظ بعض المعلومات على هارد اليوزر فأسمح لى بأنك لم تفكر كفايه و دهنى اوضح لك بعض النقاط قبأمكانك مثلا بأستخدام الشير اوبجكت ان تعرف اليوزر انه تم زياره خذخ الصفحة من قبل فمثلا انه قد زار موقعى و قمت انا بعمل انترو فلو اليوز قد زارها قبل ذلك استطيع بالاعتماد على هذه الخاصيه ان اجعله يتخطى المقدمة اوتوماتيكيا .
الشئ الاول ليس عن الشير اوبجكت فى فلاش انه يستخدم من خلال كلايت ابلكيشت كما نعرف ان الاتش تى ام ال و الفلاش و الجاقا سكربت من الكلاينت سايد و لكن يمكننا ايضا استخدامه مع السيرقر سايد ايضا لانه يقرأ الشير اوبجيكت من خلال جهاز اليوزر فلن تختلف اذا ماكنت فى صدد انشاء كلاينت سايد ابلكيشن ام سيرقر سايد ابلكيشن فعلى سبيل المثال ان الكوكيز متاح فى كلا النوعين السيرقر سايد و الكلاينت...
و لنرى اول كود و لنحلله و هو كود سنرى اذا كان اليوزر يسمح باستخدام الشير اوبجكت ام لا
كود:
function checkSO() { // Does this client allow SharedObjects to be stored? // Create a dummy SO and try to store it mySO = SharedObject.getLocal("test"); if (!mySO.flush(1)) { // SOs not allowed on this system! // Prompt user to change settings System.showSettings(1); } else { // SOs allowed trace("Your system allows SharedObjects"); }}checkSO();
لا تقلق من هذا الكود فليس بالصعوبه التى تراها سنضع بالطبع هذا الكود على الفرام فى التايم لاين ليتمكن الفلاش من قرائته اوتوماتيكيا دون الجوء الى الاحداث او كما تسمى الافنتس و معنى الكود اننا نريد ان نعرف اذا ماكان السيستم الذى يقرأ عليه الملف الان يدعم استخدم الشير اوبجكت ام لا و لمعرفتك يجب ان يكون القلاش بلير الاصدار السادس لانه الشير اوبجكت من خصائص فلاش ام اكس
و ملاحظه اخرى SOs تعنى شير اوبجكتس كى تستطيع فهم الكود

عند قرائته
و لنناقش الان ماهى الاوبجكت التى سنحفظها
عاده ماتكون معلومات لها صله ببعضها قمثلا لو اننا عندنا قروع كثيره او مائه مستخدم يستخدمون او يرون الملف الان
[code]Cust1Name = "Joe";Cust1Age = 20;Cust1Pet = "Dog";Cust2Name = "Mary";Cust2Age = 19;Cust2Pet = "Dog";...وفى الاوبجيكت اوريانتد نستخدم
كود:
Cust1 = new Object();Cust1.name = "Joe";Cust1.age = 20;Cust1.pet = "Dog";...
و لنقوم يبعمل شير اوبجكت الان ستعمل الاتى
كود:
mySO = SharedObject.getLocal("test");
هذا الكود الذى استخدمناه ليحفظ الشير اوبجكت
"mySO" هو اسم الاوبجكت الذى سيعطينا معلومات اليوزر من السيستم مره اخرى و لمعلوماتك يحفظ الشير اوبجكت بأمتداد ".sol"
و يمنع التسميه يالاشياء الاتيه ~ % & \ ; : " ' , < > ? # كما يمنع استخدام المسافات ايضا
الان كتبنا الشير اوبجكت و نستطيع القيام بحفظ تلك المعلومات على هارد المستخدم و بعدها نستطيع استدعائها عند الحاجه
و سنقوم بحفظ هذه الداتا بطريقة اسمها flush method
و تقوم هذه الطريقه بأرجاع النتيجه بطريقه صح او خطأ المسميه كما تعلمون
A
Boolean return value
و ترجع بقيمه صحيحه او ايجابيه عند الحفظ و العكس صحيح
كود:
mySO = SharedObject.getLocal("test");mySo.data.name = "Joes";success = mySO.flush();
و هناك حد مسموح لحجم الملفات المحفوظه يحددها المستخدم نفسة و اذا قمت بحفظ الاوبجت و تريد معرفة حجمه فنستخدم
mySO.getSize().
و لتتعرف على كيفيه ان اليوزر يقدر على منع او تحديد جحم الملفات المستخدمة كأوبجكت

و نستطيع ايضا بموديل الحدث و ما يسمى كمصطلح The new event model
يسمح لنا ان نضع المعلومات القادمه من اليوزر كوظيفه او فنكشن
ولن تعمل هذه الوظيفة او القنكشم لو كان اليوزر لا يسمح بالمساحة الكافية فمثلا لو انة يلزم ان تعمل هذه الوظيفة 10 كيلوبايت و اليوزر يسمح فقط ب 1 كيلو بايت فلن تتم العمليه
و لمعرفه اذا ماكان الاوجكت قد نزل بطريقه صحيحه على هارد اليوزر يمكننا ذلك من خلال خاصيتين هما
"SharedObject.Flush.Success"
"SharedObject.Flush.Failed".
و لنرى كيف سأتأكد من ذلك
كود:
mySO = SharedObject.getLocal("test");mySo.data.name = "Joes";success = mySO.flush(100000);if (success == "pending") { mySO.onStatus = function(result) { if (result.code == "SharedObject.Flush.Success") { trace("Sucess writing to disk"); writeSuccess = true; } else { trace("Failure writing to disk"); writeSuccess = false; } };} else { writeSuccess = success;}
و عندما نضيف المعلومات التى نريدها للأوبجكت لابد ان ان نضيفها كتشايلد فى الاوبجكت نفسه و الاوبجكت الذى اضفناه الى الان يعتبر فارغ بدون تشايلد
و لنرى كيفيه اضافه اوبجك بالتشايلد
تسيف و مسحه و اعاده تحميله و المتغيرات و انواع الداتا و ليس من المحتم علينا ان نحول الارقام الى سترينج كما تعودنا مع الكويكيز
كود:
// Create an SOmySO = SharedObject.getLocal("test");// Add some expendible datamySO.shortLived = "Woe is me, the short lived variable";// Add some important datamySO.data.stickAround = "I'll be here for years to come!";mySO.data.num = 123;mySO.data.obj = new Array(4, 5, 6, 7);// Write the SO to the disk (I'm not checking for success here)mySO.flush();// Delete the SOdelete mySO;// Load the SO back inmySO = SharedObject.getLocal("test");// Scan the SO for valuesfor (a in mySO.data) { trace(a+": "+mySO.data[a]);}
و من الاشياء الشيقة انه عندما تعيد تحميل المعلومات الى الاوبجكت الذى تم تسيفه بالفعل مسبقا و لنرى مثالا على ذلك
كود:
// Create an SOmySO = SharedObject.getLocal("test");// Add some important datamySO.data.stickAround = "I'll be here for years to come!";// Write the SO to the disk (I'm not checking for success here)mySO.flush();// Delete the SOdelete mySO;// Reload the SOmySO = SharedObject.getLocal("test");// This time we're not adding any data, so when we write // our SOit should the old data be overwritten, right?mySO.flush();// Delete the SOdelete mySO;// Load the SO back in once more,mySO = SharedObject.getLocal("test");// Scan the SO for valuesfor (a in mySO.data) { trace(a+": "+mySO.data[a]);}// Wrong! The trace shows our old values all still exist!
و لنرى ماذا سيحدث عندما نريد ان نمسح او نحذف شيئا من الشير اوبجكت الذى تم حفظه على هارد المستخدم لاسباب امنيه و من الاشياء المحسوبه لشركة ماكروميديا انها فكرت فى هذه ايضا و اعطت امكانيه لحذف الخصائص فى الاوبجكت بدون الفلاش و لنرى
كود:
mySO = SharedObject.getLocal("test");mySO.data.stickAround = "I'll be here for years to come!";mySO.flush();delete mySO;// Reload the SOmySO = SharedObject.getLocal("test");delete mySO.data.stickAround;mySO.flush();// Delete the SOdelete mySO;// Load the SO back in once more,mySO = SharedObject.getLocal("test");// Scan the SO for valuesfor (a in mySO.data) { trace(a+": "+mySO.data[a]);}// Wohoo! No stickAround value!
و ماكروميديا لم تعلمنا كيفيه مسح الملف فعليا من الهارد ديسك كما ذكرت لاسباب امنيه فقط بعد تغيير الخاصيه التى تكلمنا عنها يمسح الملف
و لكن تعال و لنحلل قليلا
عندما ننشئ الشير اوبجكت بدون تشايلد فلايوجد الان خاصيه للتشايلد لعدم وجوده اصلا و لكن عندما نعيد او نضيف تشايلد للاوبجكت فأن الاوبجكت القديم يمسح و يكتب من جديد بالخصائص الجديده هذا و الله اعلم فأذا فأن اى تغيير فى خصائص الاوبجكت سيمسح ..
كود:
// Make a basic SOmySO = SharedObject.getLocal("test");mySO.data.stickAround = "I'll be here for years to come!";mySO.data.myArray = new Array(1, 2, 3, 4);mySO.flush();delete mySO;// Reload the SOmySO = SharedObject.getLocal("test");for (a in mySO.data) { delete mySO.data[a];}mySO.flush();// Delete the SOdelete mySO;// Load the SO back in once more,mySO = SharedObject.getLocal("test");// Scan the SO for valuesfor (a in mySO.data) { trace(a+": "+mySO.data[a]);}// There are none. There's no file on the drive any more either
و اعرف انه غير ذى نفع ان اذكر كل هذه الامثله المستخدمه فى الدرس لعمل اوبجكت و انما اعتبره اكثر تمرينا و هناك ملاحظه يجب عليك اتقان و معرفه
getLocal() فهذه اتركها للأخ الكترون و من عنده امكانيه ان يقرأ بعض المعلومات عنها باللغه الانجليزيه يمكنه ذلك من خلال هذا
[عزيزي الزائر يتوجب عليك التسجيل للمشاهدة الرابطللتسجيل اضغط هنا]
و اخيرا اذا ما اردت ان تجعل اليوزر ان يوافق على الشير اوبجكت اذا ماكان لا يوافق عليها بأظهار ماسج له مذكرا اياه بها فسنستخدم
System.showSettings(1);
هذا الكود سيظهر له النافذة التى ستراها فى الصوره القادمه

تحياتى