2013-06-04 3 views
4

Я подробно рассмотрел этот сайт & онлайн для ответа на этот вопрос. Я попытался применить несколько примеров к моей проблеме безрезультатно.Сохранение портлетов jQuery для базы данных

У меня есть два блока под названием «Links» & «User Links». Внутри каждого блока они представляют собой описания (которые являются самими блоками) ссылок на моем сайте, которые можно индивидуально перетаскивать слева направо.

Моя проблема в том, что я не могу сохранить данные в свою базу данных, как только я нажимаю «Save Changes», моя ошибка «Undefined index: quicklink»

Вот код.

<?php echo Form::open(URL::Base().Route::get('links')->uri(array('action' => 'update')), array('id' => 'links-form', 'class' => 'form', 'enctype' => 'multipart/form-data')) ?> 
<section class="grid_12"> 
    <div class="block-border"> 
     <div class="block-content"> 
      <div class="block-controls"> 
      <div class="controls-buttons"></div> 
      </div> 
      <h1>Quick Links</h1> 
      <div class="columns"> 
       <div class="colx2-left"> 
        <fieldset> 
         <legend>Links</legend> 
          <p class="inline-small-label small-margin"> 
           <div class="column">   
            <?php if (count($links)): ?> 
            <?php foreach ($links as $row): ?>  
            <div class="portlet"> 
             <div class="portlet-content"><?php echo $row->description ?></div> 
            </div> 
            <?php endforeach ?> 
            <?php endif ?>  
           </div>  
          </p> 
        </fieldset> 
       </div> 
       <div class="colx2-right"> 
        <fieldset> 
         <legend>User Links</legend> 
          <p class="inline-small-label small-margin"> 
           <div class="column">   
            <?php if (count($userlinks)): ?> 
            <?php foreach ($userlinks as $row): ?>  
            <div class="portlet" name="link[]" id="link" multiple="multiple" size="12"> 
             <div class="portlet-content"><?php echo $row->link_id ?></div> 
            </div> 
            <?php endforeach ?> 
            <?php endif ?>  
           </div>  
          </p> 
        </fieldset> 
       </div> 
      </div> 
      <div class="columns"> 
       <div class="colx2-left align-center"> 
        <?php echo Form::button('save_edit', 'Save Changes', array('id' => 'save_edit', 'type' => 'submit', 'value' => 'save_edit')) ?> 
       </div> 
       <div class="colx2-right align-center"> 
        <?php echo Form::button('cancel_edit', 'Cancel Changes', array('id' => 'cancel_edit', 'type' => 'button', 'value' => 'cancel_edit')) ?> 
       </div> 
      </div> 
     </div> 
    </div> 
</section> 
    <div class="clear"></div> 
<?php echo Form::close() ?> 
<link rel="stylesheet" href="http://code.jquery.com/ui/1.10.3/themes/smoothness/jquery-ui.css" /> 
    <script src="http://code.jquery.com/jquery-1.9.1.js"></script> 
    <script src="http://code.jquery.com/ui/1.10.3/jquery-ui.js"></script> 
    <link rel="stylesheet" href="/resources/demos/style.css" /> 
<style> 
    body { min-width: 520px; } 
    .column { width: 520px; float: left; padding-bottom: 100px; } 
    .portlet { margin: 0 1em 1em 0; } 
    .portlet:hover { cursor: pointer } 
    .portlet-header { margin: 0.3em; padding-bottom: 4px; padding-left: 0.2em; } 
    .portlet-header .ui-icon { float: right; } 
    .portlet-content { padding: 0.4em; } 
    .ui-sortable-placeholder { border: 1px dotted black; visibility: visible !important; height: 50px !important; } 
    .ui-sortable-placeholder * { visibility: hidden; } 
</style> 
<script> 
    $(function() { 
    $(".column").sortable({ 
     connectWith: ".column" 
    }); 

    $(".portlet").addClass("ui-widget ui-widget-content ui-helper-clearfix ui-corner-all") 
     .find(".portlet-header") 
     .addClass("ui-widget-header ui-corner-all") 
     .prepend("<span class='ui-icon ui-icon-minusthick'></span>") 
     .end() 
     .find(".portlet-content"); 

    $(".portlet-header .ui-icon").click(function() { 
     $(this).toggleClass("ui-icon-minusthick").toggleClass("ui-icon-plusthick"); 
     $(this).parents(".portlet:first").find(".portlet-content").toggle(); 
    }); 

    $(".column").disableSelection(); 
    }); 

</script> 

CONTROLLER

/** 
* Update the Users settings and details 
* 
* @return void 
*/ 
public function action_update() 
{ 
    $this->template = NULL; 
    $this->auto_render = FALSE; 

    if ($_POST) 
    { 
     $row = ORM::factory('LinkUser'); 

     // Remove all current Links 
     foreach($row->link->find_all() as $ql) 

      $row->remove('link', $ql); 

     foreach($_POST['link'] as $ql) 
     { 
      $row->add('link', $ql); 
     } 
    } 
} 

МОДЕЛЬ "Ссылка"

<?php defined('SYSPATH') or die('No direct access allowed.'); 

class Model_Link extends ORM { 

    protected $_table_name = 'links'; 

    protected $_has_many = array(
     'qlinkusers' => array(
      'model' => 'LinkUser', 
      'foreign_key' => 'link_id', 
      'through' => 'links_users', 
     ), 
    ); 
} 

МОДЕЛЬ "LinkUser"

<?php defined('SYSPATH') or die('No direct access allowed.'); 

class Model_LinkUser extends ORM { 

    protected $_table_name = 'links_users'; 

    protected $_belongs_to = array(
     'link' => array(
      'model' => 'Link', 
      'foreign_key' => 'link_id', 
      'through' => 'links_users', 
     ), 
     'user' => array(
      'model' => 'user', 
      'foreign_key' => 'user_id', 
     ), 
    ); 
} 

Я невероятно слаб на jQuery, надеюсь, ясно, что мне нужно ... Я хочу перетащить несколько ссылок из левого блока в правый блок, который до сих пор успешный, я не могу сохранить данные в моей базе данных после нажатия "Save Changes", моя ошибка: "Undefined index: link"

Большое спасибо.

ответ

0

Если я где я хотел бы использовать что-то вроде следующего (совершенно другой, то ваш текущий скрипт):

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

В вашем случае это: «action_update»

Вы разместите данные через AJAX путем сбора новые ссылки/сортировки из вашего HTML первых (или все, что вы пытаетесь сохранить в БД). Затем отправьте его по URL-адресу, который вы установили в своей маршрутизации. Вы связать его с текущими действиями контроллера, и вы сделали:

Router::connect('/request/via/ajax/here', array('controller' => 'YourController', 'action' => 'action_update')); 

Вам не нужны предопределенная форма :: кнопка, которую вы используете в настоящее время. Просто зарегистрируйте событие click и выполните функцию ajax.

Не забудьте использовать $ this-> autoRender = false; в вашем действии.

Пример для Ajax запроса:

$('.update_button').on('click',function() 
{ 
    $data = $('#links-form').serializeArray(); 
    $.ajax({ 
     url: '<?php echo Router::url(array('controller'=>'YourController', 'action'=>'action_update'), true); ?>', 
     type: 'post', 
     data: {data:$data}, 
     success: function(result,status) 
     { 
      alert('data saved'); 
     } 
    }); 
}); 

Чтобы проверить дату первой вы можете зарегистрировать ее в консоли:

console.log($data) 
+0

только удосужился увидеть это сейчас Rens. Я ценю, что вы не торопитесь, чтобы посмотреть на мою проблему, я попытаюсь обратиться к вам за советом завтра. – user1839477

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