2013-06-04 53 views
4

我已經在網上廣泛查看了此網站&以獲得對此問題的答案。我試圖用一些例子來解決我的問題,但無濟於事。保存到數據庫的jQuery Portlets

我有兩個塊,名爲「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> 

控制器

/** 
* 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); 
     } 
    } 
} 

MODEL 「鏈接」

<?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排序第一(或任何你想保存到您的DB)。然後通過您在路由中設置的URL發佈。將其鏈接到當前的控制器操作,即可完成:

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

您不需要現在使用的預定義Form ::按鈕。只需登錄點擊事件並執行您的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

只有抽時間去看望這個現在倫斯。我很感激你花時間看看我的問題,我會盡量明天應用你的建議。 – user1839477