2

管理者部分に(非常に一般的な)グリッドビューを備えたJoomlaコンポーネントを開発しています。グリッド内のアイテムの公開アイコンをクリックすると、ページが再読み込みされ、公開状態が公開/非公開に変わります。しかし、ページがリロードされた後、発行アイコンをクリックしたときのスクロール位置までグリッドをスクロールして、変更したばかりのアイテムを表示したいと考えています。

このスクロール位置の保存と復元を、ページの読み込み間で検索フィルターを保存/復元する方法とほぼ完全に類似させようとしました。

1) テンプレート (views/mygrid/tmpl/default.php) に隠しフィールドを追加しました:

<input type="hidden" name="page_scroll" value="0" id="page_scroll" />

2) 同じファイルで、フォームの onsubmit 属性にいくつかのコードを追加して、このフィールドに入力しました。

<form id="adminForm" name="adminForm" method="post" onsubmit="document.getElementById('page_scroll').value = window.pageYOffset;">

3) モデル (models/mygrid.php、JModelList から拡張されたクラス) で、次の行を populateState 関数に追加しました。

protected function populateState($ordering = null, $direction = null) {
  ..
  $pageScroll = $app->getUserStateFromRequest( $this->context.'.page.scroll', 'page_scroll', '0', 'string');
  $this->setState( 'page.scroll', $pageScroll );
  ..
}

4) ビュー (views/mygrid/view.html.php、JView から拡張されたクラス) で、表示関数に次の行を追加しました。

function display($tpl = null) {
..
  $this->state = $this->get('State');
..
}

5) 最後に、テンプレート (views/mygrid/tmpl/default.php) に戻り、ファイルの最後に次の小さなスクリプトを追加しました。

<script type="text/javascript">
  window.scrollTo( 0, <?php echo $this->state->get('page.scroll') ?> );
</script>

それはとても素晴らしく、きれいで、私には正しいように見えますが、うまくいきません。次のデバッグ行を最後のスクリプトに追加すると、常に 0 になります。

alert( <?php echo $this->state->get('page.scroll') ?> );

誰かが私が見落としていることを教えてもらえますか? とても感謝しています!

4

1 に答える 1