4

この質問への回答を求めて、このサイトとオンラインを広範囲に調べました。私は自分の問題に多くの例を適用しようとしましたが、役に立ちませんでした。

Links" " & " "という名前の 2 つのブロックがあり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);
        }
    }
}

モデル「リンク」

<?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',
        ),
    );
}

モデル「リンクユーザー」

<?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

どうもありがとう。

4

1 に答える 1

0

私があなたの場合、次のようなものを使用します(現在のスクリプトとはまったく異なります):

リンクまたはログに記録したいものの並べ替えが変更されたとき。直接 ajax リクエストを介して試すことをお勧めします。あなたがする必要があるのは、アクションを決定することです。

あなたの場合、それは「action_update」です

最初にhtmlから新しいリンク/ソートを収集することにより(またはDBに保存しようとしているものは何でも)、ajaxを介してデータを投稿します。次に、ルーティングで設定した URL 経由で投稿します。これを現在のコントローラー アクションにリンクすると、完了です。

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

現在使用している定義済みの Form::button は必要ありません。クリック イベントをログに記録し、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)
于 2013-06-05T20:23:33.593 に答える