管理者部分に(非常に一般的な)グリッドビューを備えた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') ?> );
誰かが私が見落としていることを教えてもらえますか? とても感謝しています!