Skip to main content
مقالات فنی

ایجاد سیستم پیش‌بینی خودکار در فرم‌های وب

By جولای 7, 2014آگوست 6th, 2014No Comments

aks

یکی از مهمترین عناصر مورد استفاده در صفحات وب فرم‌ها می‌باشد، که تقریباً هر برنامه‌ی کاربردی تحت وب شامل تعدادی فرم برای ایجاد و تغییر عناصر مورد نظر استاز این رو می‌توان گفت ایجاد فرم‌های کارآمد و قابل استفاده برای کاربر از اهمیت بسزایی برخوردار است.

 به منظور استفاده‌ی آسان‌تر و بهتر از فرم‌ها ترفندهایی وجود دارد که در این مقاله می‌خواهیم یکی از مهم‌ترین آنها یعنی «قابلیت پیشبینی خودکار» را معرفی کنیم.

 در این مطلب، نحوه‌ی پیاده‌سازی سیستم پیش‌بینی خودکار (Auto Complete) را با استفاده از تکنولوژی های Zend ،jQuery UI ،AJAX توضیح خواهیم دادبرای درک بهتر موضوع، لازم است تا برخی مفاهیم مقدماتی لازم برای ایجاد چنین سیستمی معرفی شودابتدا مثالی عینی را طرح کرده و سپس مرحله به مرحله پیاده‌سازی آن را تشریح خواهیم کرد.

مثال عینی

 فرض کنید اطلاعات تعدادی هنرمند در پایگاه داده‌ی سرور ذخیره شده‌اند و می‌خواهیم در فرم ایجاد آلبوم عنصر نام هنرمند را تکمیل کنیمهنرمند انتخابی باید از میان هنرمندان موجود در پایگاه داده باشد و سیستم پیش‌بینی کننده باید قابلیت پیش‌بینی هنرمند و تکمیل آن را داشته باشد (مطابق فرم زیر).sin

حال به بررسی ابزارهای مورد نیاز برای پیاده‌سازی چنین سیستمی می‌پردازیم.

فرم در Zend

 هر فرم شامل تعدادی عنصر است که هر عنصر آن دارای یک برچسب (Label) و یک مقدار (Value) است. همچنین دکمه‌ی ارسال برای فرستادن اطلاعات به تابع مورد نظر برای پردازش نیز وجود دارد.

 برای ایجاد یک عنصر در فرم به وسیله ی Zend از روش زیر استفاده می کنیم:

$this->addElement('text', 'artist', array(

'label' => "Artist:",

'description' =>'Enter the artist name:',

'value' => ''",

'required' => true,

'filters' => array('StringTrim'),

'validators' => array(array('validator' =>

'StringLength', 'options' => array(0, 60)))

));

که عنصری در فرم با نام artist و بدون مقدار پیش‌فرض ایجاد می‌کند.

استفاده از jQuery UI – ایجاد پیش بینی خودکار

 حال به بررسی فایل HTML صفحه‌ی ایجاد آلبوم می‌پردازیمدر ابتدا، لازم است که فایل‌های .css ,.js مربوط به jQuery UI را در ابتدای صفحه اعلان کنید:

<link rel="stylesheet" href="//code.jquery.com/ui/1.10.4/themes/smoothness/jquery-ui.css">

<script src="/js/jquery-1.10.2.js"></script>

<script src="/js/jquery-ui-1.10.4.custom.min.js"></script>

سپس، نوبت به نوشتن اسکریپتی برای ایجاد پیش‌بینی کننده در فرم است.

در این اسکریپت فیلد id = artist را انتخاب کرده و با استفاده از تابع auto complete در jQuery UI برای این عنصر  قابلیت پیش بینی ایجاد میکنیماین تابع url مربوط به واکشی هنرمندان و نام data فرستاده شده به آن (که در اینجا term نام دارد) را دریافت کرده و data را به عنوان عنصر مورد نظر برمیگردانددر صورت موفقیت آمیز بودن عملیات، آن هنرمند را در فیلد مورد نظر به نمایش می گذارد.

<script>
$(function() {
$( "#artist" ).autocomplete({
source: function( request, response ) {
    $.ajax({
        url: "/artist/autocomplete",
        data: {term: request.term},
        dataType: "json",
        success: function( data ) {
            response( $.map( data.myData, function( item ) {
                return {
                    label: item.label,
                    value: item.value
                }
            }));
        }
    });
}
});
});
</script>

 کد PHP و ZEND مربوط به پیش بینی‌گر خودکار

 همانطور که می بینید در بخش url ، تابع را به /artist/autocomplete ارجاع داده و پارامتر ترم (کلمه ی وارد شده توسط کاربر) را نیز به عنوان آرگومان به این تابع فرستاده ایماین تابع وظیفه ی جستجو در پایگاه داده برای یافتن هنرمندانی با نام شبیه به کلمه ی تایپ شده توسط کاربر را دارد.

public function autocompleteAction() {

$request = $this->getRequest();

$term = $request->getParam('term');

$artist_model = new Application_Model_Artist();

$entries = $artist_model->search('name',$term);

$result = array();

$result['myData'] = array();

foreach ($entries as $entry) {

$result['myData'][] = array('label'=> $entry->$column, 'value'=>$entry->$column);

}

echo json_encode($result);

exit();

}

 

همچنین تابع search به صورت زیر پیاده سازی می شود:

public function search($term) { 

$select = $this->getDbTable()->Select();

$select->where("name LIKE ? ",'%' . $term . '%');

return $this->fetchAll($select);

}

بدین ترتیب می توان با استفاده از ابزارهای Zend , Ajax , jQuery UI یک سیستم پیش بینی کننده برای فرم های خود ایجاد نمود. برای اطلاعات بیشتر می توانید به مراجع زیر مراجعه نمایید:

http://api.jqueryui.com/autocomplete/

http://framework.zend.com/manual/1.12/en/zend.form.html