שימוש בהרחבות ================ שימוש בהרחבה בדרך כלל כולל את שלושת השלבים הבאים: 1. הורדת ההרחבה [מספרית ההרחבות](http://www.yiiframework.com/extensions/) של Yii. 2. חילוץ קבצי ההרחבה תחת התיקיה `extensions/xyz` הנמצאת בתיקיה [ראשית](/doc/guide/basics.application#application-base-directory) של האפליקציה, כש `xyz`הינו שם ההרחבה. 3. ייבוא, הגדרה ושימוש בהרחבה. לכל הרחבה יש שם המייחד אותה משאר ההרחבות. בהתחשב שיש לנו הרחבה בשם `xyz`, אנו תמיד יכולים להשתמש בנתיב המקוצר `ext.xyz` בכדי לאתר את התיקיה הראשית שלה המכילה את כל הקבצים של `xyz`. » Note|הערה: הנתיב המקוצר `ext` קיים מגרסא 1.0.8. קודם לכן, היה צורך להשתמש ב `application.extensions` בכדי להתייחס לתיקיה המכילה את כל ההרחבות. בתיאור הבא, אנו מניחים ש `ext` מוגדר. יהיה צורך בלהחליף אותו עם `application.extensions` במידה והינך משתמש בגרסא 1.0.7 ומטה. הרחבות שונות כוללות דרישות שונות בנוגע לייבוא שלהם, הגדרות ושימוש. בחלק הבא, אנו מסכמים מקרים נפוצים של שימוש בהרחבות, לפי הקטגוריות שלהם המתוארות [סקירה](/doc/guide/extension.overview). הרחבות Zii -------------- לפני שנתחיל להסביר בנוגע לשימוש הרחבות צד-שלישי, אנו נרצה קודם להציג את ספרית ה Zii, שמפותחת על ידי צוות הפיתוח של Yii וכלולה בכל הגרסאות של Yii החל מגרסא 1.1.0. ספרית ה Zii מאוחסנת כפרוייקט גוגל בשם [zii](http://code.google.com/p/zii/). בעת שימוש בהרחבה מספרית Zii, יש צורך להתייחס למחקה על ידי שימוש בנתיב מקוצר בפורמטר של `zii.path.to.ClassName`. במקרה הזה, הנתיב הראשי `zii` כבר הוגדר מראש על ידי Yii. נתיב זה מתייחס לתיקיה הראשית של ספריית ה Zii. לדוגמא, כדי להשתמש ב [CGridView], אנו נשתמש בקוד הבא בתוך קובץ תצוגה כשאנו מתייחסים להרחבה: ~~~ [php] $this-»widget('zii.widgets.grid.CGridView', array( 'dataProvider'=»$dataProvider, )); ~~~ רכיב באפליקציה --------------------- בכדי להשתמש [ברכיב אפליקציה](/doc/guide/basics.application#application-component), אנו קודם צריכים לשנות את [הגדרות האפליקציה](/doc/guide/basics.application#application-configuration) על ידי הוספת רשומה (אלמנט) חדשה למאפיין של `components`, כפי שמוצג בדוגמא הבאה: ~~~ [php] return array( // 'preload'=»array('xyz',...), 'components'=»array( 'xyz'=»array( 'class'=»'ext.xyz.XyzClass', 'property1'=»'value1', 'property2'=»'value2', ), // הגדרות רכיבים נוספים ), ); ~~~ לאחר מכן, אנו יכולים לגשת לרכיב בכל מקום על ידי `Yii::app()-»xyz`. הרכיב יווצר בצורה עצלה (זאת אומרת יווצר כשהוא נקרא בפעם הראשונה), אלה אם כן אנו נרשום את שמו במאפיין של `preload` בהגדרות האפליקציה. התנהלות/התנהגות -------- [התנהלות/התנהגות](/doc/guide/basics.component#component-behavior) ניתנת לשימוש בכל מיני רכיבים. השימוש בהם כרוך בשני שלבים. בשלב הראשון, ההתנהלות מצורפת לרכיב כלשהו. בשלב השני, מתודת התנהלות נקראת על ידי הרכיב אליו היא צורפה. לדוגמא: ~~~ [php] // הפרמטר הראשון הוא יחודי ומשמש לצורך זיהוי ההתנהלות $component-»attachBehavior($name,$behavior); // המתודה test נמצאת במחלקה של $behavior $component-»test(); ~~~ בדרך כלל, התנהלות מצורפת לרכיב דרך הגדרות ולא על ידי קריאה למתודה `attachBehavior`. לדוגמא, בכדי לצרף התנהלות [רכיב](/doc/guide/basics.application#application-component) באפליקציה, אנו נשתמש [בהגדרות](/doc/guide/basics.application#application-configuration) האפליקציה הבאות: ~~~ [php] return array( 'components'=»array( 'db'=»array( 'class'=»'CDbConnection', 'behaviors'=»array( 'xyz'=»array( 'class'=»'ext.xyz.XyzBehavior', 'property1'=»'value1', 'property2'=»'value2', ), ), ), //.... ), ); ~~~ הקוד למעלה, מצרף את ההתנהלות `xyz` לרכיב האפליקציה `db`. אנו עושים זאת מאחר והמחלקה [CApplicationComponent] מגדירה מאפיין בשם `behaviors`. על ידי הגדרת מאפיין זה עם רשימה של הגדרות התנהלות, הרכיב יצרף את ההתנהלויות הללו בזמן האתחול שלו. עבור המחלקות [CController], [CFormModel] ו [CActiveRecord] שבדרך כלל דורשות הרחבה, צירוף התנהלויות נעשית על ידי דריסה של המתודה `()behaviors`. המחלקה תצרף אוטומטית את ההתנהלויות המוגדרות במתודה זו בזמן אתחול. לדוגמא, ~~~ [php] public function behaviors() { return array( 'xyz'=»array( 'class'=»'ext.xyz.XyzBehavior', 'property1'=»'value1', 'property2'=»'value2', ), ); } ~~~ וידג'ט ------ שימוש [בוידג'טים](/doc/guide/basics.view#widget) בדרך כלל נעשה בקבצי [תצוגה](/doc/guide/basics.view). נניח ומחלקת הוידג'ט `XyzClass` שייכת להרחבה `xyz`, אנו יכולים להשתמש בו בתוך קובץ תצוגה בצורה הבאה, ~~~ [php] // וידג'ט שאינו דורש תוכן «?php $this-»widget('ext.xyz.XyzClass', array( 'property1'=»'value1', 'property2'=»'value2')); ?» // וידג'ט שדורש תוכן «?php $this-»beginWidget('ext.xyz.XyzClass', array( 'property1'=»'value1', 'property2'=»'value2')); ?» ...תוכן הוידג'ט.... «?php $this-»endWidget(); ?» ~~~ פעולה ------ שימוש [בפעולות](/doc/guide/basics.controller#action) נעשה על ידי [הקונטרולרים](/doc/guide/basics.controller) בכדי לענות על בקשות משתמש ספציפיות. נניח ומחלקת הפעולה `XyzClass` השייכת להרחבה בשם `xyz`, אנו יכולים להשתמש בה על ידי דריסה של המתודה [CController::actions] במחלקה של הקונטרולר: ~~~ [php] class TestController extends CController { public function actions() { return array( 'xyz'=»array( 'class'=»'ext.xyz.XyzClass', 'property1'=»'value1', 'property2'=»'value2', ), // פעולות נוספות ); } } ~~~ לאחר מכן, ניתן לגשת לפעולה על ידי [הניתוב](/doc/guide/basics.controller#route) `test/xyz`. פילטר ------ שימוש [פילטרים](/doc/guide/basics.controller#filter) נעשה גם כן על ידי [הקונטרולרים](/doc/guide/basics.controller). המטרה העיקרית שלהם היא הרצתם לפני ואחרי [פעולות](/doc/guide/basics.controller#action) מסויימות בכדי לבצע בדיקות או שינויים אחרים. נניח ומחלקת הפילטר בשם `XyzClass` השייכת להרחבה בשם `xzy`, אנו יכולים להשתמש בו על ידי דריסה של המתודה [CController::filters] במחלקת הקונטרולר: ~~~ [php] class TestController extends CController { public function filters() { return array( array( 'ext.xyz.XyzClass', 'property1'=»'value1', 'property2'=»'value2', ), // פילטרים נוספים ); } } ~~~ בדוגמא למעלה, אנו יכולים להשתמש באופרטורים +, - באלמנט הראשון במערך בכדי לצרף את הפילטר למספר פעולות בלבד. למידע נוסף יש לקרוא את הדוקומנטציה אודות [CController]. קונטרולר ---------- [קונטרולר](/doc/guide/basics.controller) מספק סט של פעולות שניתנות לבקשה על ידי המשתמשים. בכדי להשתמש בהרחבה לקונטרולר, אנו צריכים להגדיר את המאפיין [CWebApplication::controllerMap] בקובץ [הגדרות האפליקציה](/doc/guide/basics.application#application-configuration): ~~~ [php] return array( 'controllerMap'=»array( 'xyz'=»array( 'class'=»'ext.xyz.XyzClass', 'property1'=»'value1', 'property2'=»'value2', ), // קונטרולרים נוספים ), ); ~~~ לאחר מכן, הפעולה `a` ניתנת לגישה על ידי [ניתוב](/doc/guide/basics.controller#route) `xyz/a`. ולידטור (אימות נתונים) --------- ולידטור בדרך כלל משומש בתוך מחלקת [מודל](/doc/guide/basics.model) (אחת שיורשת מהמחלקה [CFormModel] או [CActiveRecord]). נניח וישנה מחלקת ולידטור בשם `XyzClass` השייכת להרחבה בשם `xyz`, אנו יכולים להשתמש בה על ידי דריסה של המתודה [CModel::rules] במחלקת המודל שלנו: ~~~ [php] class MyModel extends CActiveRecord // or CFormModel { public function rules() { return array( array( 'attr1, attr2', 'ext.xyz.XyzClass', 'property1'=»'value1', 'property2'=»'value2', ), // חוקי אימות נתונים נוספים ); } } ~~~ מסוף פקודות --------------- הרחבות [מסוף הפקודות](/doc/guide/topics.console) בדרך כלל משפרת את הכלי `yiic` בפקודה נוספת. נניח שיש לנו מחלקה לפקודה `XyzClass` השייכת להרחבה `xyz`, אנו יכולים להשתמש בה על ידי הגדרת ההגדרות למסוף הפקודות באפליקציה: ~~~ [php] return array( 'commandMap'=»array( 'xyz'=»array( 'class'=»'ext.xyz.XyzClass', 'property1'=»'value1', 'property2'=»'value2', ), // פקודות נוספות ), ); ~~~ לאחר מכן, אנו יכולים להשתמש בכלי `yiic` המכיל פקודה חדשה בשם `xyz`. » Note|הערה: קובץ הגדרות של מסוף הפקודות הוא שונה מקובץ ההגדרות של אפליקצית ווב. במידה ואפליקציה נוצרה בעזרת פקודת `yiic webapp`, קובץ ההגדרות של מסוף הפקודות `protected/yiic` הינו `protected/config/console.php`, בזמן שקובץ ההגדרות לאפליקצית ווב הינו `protected/config/main.php`. מודול ------ אנא קרא את החלק אודות [מודולים](/doc/guide/basics.module#using-module) וכיצד לעבוד עמם. רכיב כללי ----------------- בכדי להשתמש [רכיב](/doc/guide/basics.component) כללי, אנו קודם צריכים להוסיף את קובץ המחלקה שלו על ידי שימוש ב ~~~ Yii::import('ext.xyz.XyzClass'); ~~~ לאחר מכן, אנו יכולים ליצור אובייקט של המחלקה, להגדיר את המאפיינים שלו, ולקרוא למתודות אשר נמצאות בו. כמו כן אנו יכולים להרחיב אותו כדי ליצור תת מחלקה חדשה. «div class="revision"»$Id: extension.use.txt 1780 2010-02-01 20:32:50Z qiang.xue $«/div»