2013-07-16 4 views
0

Я делаю небольшое приложение. Для этого Ihave два стола, как SLES и магазины таблица продаж выглядит следующим образомYii автозаполнение со связанными значениями

============ 
    Sales 
============ 
id 
store_id 


Stores 
============= 
id 
store_name 
store_location 
store_code 
description 

Я сделал модель и CRUD для обеих таблиц. В таблице магазинов я ввел несколько значений в соответствии с таблицей. Теперь в контроллере продаж я предоставил как продажи, так и магазины. так вот мои действия создают глядя, как этот

public function actionCreate() 
    { 
    $model=new Sales; 
    $stores = new Stores; 

    // Uncomment the following line if AJAX validation is needed 
    // $this->performAjaxValidation($model); 

    if(isset($_POST['Sales'], $_POST['Stores'])) 
    { 
     $model->attributes=$_POST['Sales']; 
     $stores->attributes=$_POST['Stores']; 
     $valid = $model->validate(); 
     $valid = $stores->validate(); 
     if($valid) 
     { 
     $stores->save(false); 
     $model->store_id = $stores->getPrimaryKey(); 
     $model->save(false); 
     $this->redirect(array('view','id'=>$model->id)); 
     } 
    } 

    $this->render('create',array(
     'model'=>$model, 
     'stores'=>$stores, 
    )); 
    } 

и продаж (_form.php), как это

<div class="row"> 
    <?php echo $form->labelEx($stores,'store_name'); ?> 
    <?php echo $form->textField($stores,'store_name',array('size'=>60,'maxlength'=>80)); ?> 
    <?php echo $form->error($stores,'store_name'); ?> 
    </div> 

    <div class="row"> 
    <?php echo $form->labelEx($stores,'store_location'); ?> 
    <?php echo $form->textField($stores,'store_location',array('size'=>45,'maxlength'=>45)); ?> 
    <?php echo $form->error($stores,'store_location'); ?> 
    </div> 

    <div class="row"> 
    <?php echo $form->labelEx($stores,'store_code'); ?> 
    <?php echo $form->textField($stores,'store_code',array('size'=>45,'maxlength'=>45)); ?> 
    <?php echo $form->error($stores,'store_code'); ?> 
    </div> 

Теперь здесь, когда я делаю продажи, я хочу, что когда я войду один магазин имя, введя ключи, тогда он начнет показывать связанные stores names, а store_location и store_code будут автоматически заполняться. Теперь может кто-то любезно рассказать мне, как это сделать? Любая помощь и предложения будут заметны. Большое спасибо.

Редактировать С this только одно поле может быть автозаполнения. Но я хочу, чтобы все другие связанные поля также были автозаполнены этим.

+0

вам нужно использовать auto-предложение, например, эту демонстрацию http://papermashup.com/demos/autosuggest/ .После завершения этого триггера jquery ajax для автоматического заполнения в соответствии с именем введите поля для базы данных – nickle

+0

любые другие расширения или любую демонстрационную версию с Yii – NewUser

+0

Я думаю, что напрямую вы не можете использовать u нужно использовать jquery Ajax. для проверки из базы данных – nickle

ответ

0

Сначала несколько соображений, а затем общий ответ на ваш вопрос.

Во-первых, небольшое искажение, вы действительно проверяете модель магазина, потому что вы переназначаете $valid сразу после проверки продажи. Вместо этого логика проверки должна быть примерно такой:

$valid = $model->validate() && $stores->validate(); 

Если какой-либо из них неверен, он вернет значение false.

Во-вторых, я не думаю, что этот код будет делать то, что вы хотите. Если вы автоматически заполняете информацию о магазине на основе существующих данных и отправляете их обратно в действие «Создать», ваш код попытается создать новую запись на основе этой информации, представляя дубликаты магазинов в вашей базе данных. Если вы всегда создали совершенно новую продажу и новый магазин одновременно, это сработает, но я уверен, что вы этого не хотите.

Вместо этого, чтобы это было просто, это должно быть мероприятие, посвященное созданию только объектов продаж. Не пытайтесь создать новый объект хранилища, просто запустите автозаполнение в HTML span или div теги вместо полей формы. Единственным полем формы будет поле, которое является идентификатором магазина, который будет добавлен в ваш объект продаж, чтобы указать отношение внешнего ключа.

Теперь, чтобы получить автозаполнение в нескольких полях, я собираюсь дать вам схему и позволить вам заполнить детали. Вам понадобится новое действие в вашем контроллере и некоторый Javascript на странице для обработки автозаполнения.

public function actionGetStoreDetails($id) { 
    // Get the Store model associated with $id 
    // Create a JSON object based on this model. Hint, check out CJSON::encode() 
    // Return the result of the above function call. 
} 

Теперь вы будете иметь кусок Javascript на странице просмотра, что делает что-то вроде следующего, с помощью JQuery в качестве примера, так как это уже в Yii.

$(function() { 
    $('your-store-id-field-html-id-here').keyup(function() { 
     // Get the current value of the form field 
     // Make a $.get() request to the new action defined above, passing the ID 
     // In the callback function, you'll get a JSON object 
     // Take the elements of the JSON object, like store.store_name, and assign them to <span id="store_name"></span> type fields in your HTML. 
    }); 
}); 

Я понимаю код, что это не копировать и вставить, но я надеюсь, что это дает очень хорошую стартовую площадку. Вы узнаете тонну, если потратите время, чтобы заполнить пробелы и выяснить, как это сделать полностью.

Смежные вопросы