質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

Zend Framework

Zend Frameworkは、PHP5で記述されたWebアプリケーションフレームワークです。Zend Frameworkには守らなければならない開発の規定というものは存在せず、MVCなどの複数のコンポーネントを提供しています。

Smarty

Smartyは、PHPアプリケーションで使用されるテンプレートエンジンです。

Ajax

Ajaxとは、Webブラウザ内で搭載されているJavaScriptのHTTP通信機能を使って非同期通信を利用し、インターフェイスの構築などを行う技術の総称です。XMLドキュメントを指定したURLから読み込み、画面描画やユーザの操作などと並行してサーバと非同期に通信するWebアプリケーションを実現することができます。

HTML

HTMLとは、ウェブ上の文書を記述・作成するためのマークアップ言語のことです。文章の中に記述することで、文書の論理構造などを設定することができます。ハイパーリンクを設定できるハイパーテキストであり、画像・リスト・表などのデータファイルをリンクする情報に結びつけて情報を整理します。現在あるネットワーク上のほとんどのウェブページはHTMLで作成されています。

Q&A

解決済

2回答

1962閲覧

modal内のリダイレクト処理

ms5025

総合スコア292

PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

Zend Framework

Zend Frameworkは、PHP5で記述されたWebアプリケーションフレームワークです。Zend Frameworkには守らなければならない開発の規定というものは存在せず、MVCなどの複数のコンポーネントを提供しています。

Smarty

Smartyは、PHPアプリケーションで使用されるテンプレートエンジンです。

Ajax

Ajaxとは、Webブラウザ内で搭載されているJavaScriptのHTTP通信機能を使って非同期通信を利用し、インターフェイスの構築などを行う技術の総称です。XMLドキュメントを指定したURLから読み込み、画面描画やユーザの操作などと並行してサーバと非同期に通信するWebアプリケーションを実現することができます。

HTML

HTMLとは、ウェブ上の文書を記述・作成するためのマークアップ言語のことです。文章の中に記述することで、文書の論理構造などを設定することができます。ハイパーリンクを設定できるハイパーテキストであり、画像・リスト・表などのデータファイルをリンクする情報に結びつけて情報を整理します。現在あるネットワーク上のほとんどのウェブページはHTMLで作成されています。

0グッド

0クリップ

投稿2019/05/29 01:11

編集2019/05/29 02:44

前提・実現したいこと

①メインのシステムのコントローラーの基底側に共通のログインチェックがある

②ログインチェックが走り、ログイン状態がチェックできない場合はログイン画面にリダイレクトしている

このような処理がある前提で、
modal内で入力、登録するような処理の中で、ログインチェック後、ログイン画面にリダイレクトしたいです。

このmodalが、ajax(これも①②の基底クラスを継承しているコントローラで記述している)でtplを返却してできている画面で、
ajax(コントローラー)でログインチェックをするとmodal内にログイン画面が表示されるようになってしまいます。

これをmodal内ではなく、ログイン画面にそのままリダイレクトさせたいのですが、
どうしてもmodal内に表示されてしまいます。
(コントローラ側で返却するviewがログイン画面になり、呼び出し元(返却viewを埋めたい場所)に埋め込まれてしまう。
よく考えたら当たり前の事なのですが)

全ての処理を中断し、元画面ごとログイン画面にリダイレクトするには
どのようにすればよいでしょうか?

埋め込み元 <div class="modal-content" id="hogehogebox" > </div> 埋め込むmodal(hogehoge.tpl) <div class="modal "role="dialog" id="hogehogedialog"> </div>
$(function() { // ポップアップ $("#btn_message").click(function() { // postデータ形成 var postData = {}; postData['hogehoge'] = hoge; $.ajax({ type: "POST", url: "/hogehoge/hagehage", data: postData, dataType: 'html', }).done(function(html) {      var $body = $("#hogehogebox");      $body.empty();       $body.append(html);       // 表示      $("#hogehogedialog").modal(); }).fail(function() { alert("ここにエラー"); }); }); });
phpのコントローラ側(ajaxのアクション本体)このコントローラの基底クラスのinitでログインチェックをして ログイン状態でない場合はログイン画面にリダイレクトの処理が入っている。 public function hagehageAction() { ここでなんやかんやデータ取得してこねこね smartyでデータつめつめ // tpl返却 $this->view->display( 'パス/hogehoge.tpl' ); }

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

m.ts10806

2019/05/29 01:16

そもそもどのように組んでいるか「前提」だけでは判断できませんので実際のコードをご提示ください。 色々とタグをつけられていますがこの質問内容だけではそれぞれのタグがどのように関係するかも判断できませんので。
ms5025

2019/05/29 02:04

大きなシステムなので切り取って貼り付けるわけにはいかない為、 その辺は「よくあるやり方」という前提で結構です。 どのシステムも大体画面表示時にログインチェックをして、 ログイン状態でなければ(それはセッションなのか何なのかは それぞれのシステムによりますが) ログイン画面にリダイレクト、という一連のよくある流れです。
ms5025

2019/05/29 02:10 編集

>それぞれのタグがどのように関係 Zend Frameworkで組まれたPHP 画面表示はsmarty データ取得は非同期のajax(今回データ返却ではなくsmartyのtpl返却です) というよくあるお決まりパターンです
guest

回答2

0

ベストアンサー

modalが、ajax(これも①②の基底クラスを継承しているコントローラで記述している)でtplを返却してできている画面で、ajax(コントローラー)でログインチェックをするとmodal内にログイン画面が表示されるようになってしまいます。

ajaxが未ログインの場合ログイン画面を返すのが間違いですね。
リダイレクト先のURLなどを返すようにしてはいかがでしょうか?

投稿2019/06/10 07:48

hide0128

総合スコア245

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

ms5025

2019/06/10 16:06

ajaxの戻り値はhtmlです(smartyで描画したtpl) なのでエラーの時は・・といったような処理が ajax呼び出し元でできません
hide0128

2019/06/12 06:22

ajaxを新たに作らないとできないと思います。
guest

0

質問者さんの意図がわかりかねるので、私が誤解しているかもしれませんが
もしmodalの処理をメイン画面に反映するという意図なら
それはモーダルではなくモードレス処理では?
modalを閉じない限りメイン画面に反映してはいけません

質問者さんのいうmodalがどの機能を利用したものかわかりません
具体的なmodalの記述とそれに対してどう処理したいか書いてください。

sample

サブ画面からメインをいじる処理

javascript

1<script> 2window.addEventListener('DOMContentLoaded', function(e){ 3 document.querySelector('#btn').addEventListener('click',function(e){ 4 document.querySelector('[name=check]:not(:checked)').checked=true; 5 }); 6}); 7</script> 8<input type="radio" name="check" value="on" checked>on/ 9<input type="radio" name="check" value="off">off 10<dialog open> 11<input type="button" value="on/off" id="btn"> 12</dialog>

投稿2019/05/29 02:10

編集2019/05/29 02:25
yambejp

総合スコア114833

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

ms5025

2019/05/29 02:11

ありがとうございます >modalを閉じない限りメイン画面に反映してはいけません なるほど! ということはmodal内からメイン画面をどうこするのではなく、 modal内で「ログインエラー」という表記だけさせておいて、 あとはメイン画面に挙動をゆだねる、というのが正しい動きということなのでしょうか?
yambejp

2019/05/29 02:24

いや、別にサブ画面からメイン画面をどうにかしたいという 選択肢はあってもいいのですが、それは制御を奪うmodalとは ちょっと違うのかなということです。(sample参照) あとは前回書いたとおり質問者さんの想定するmodalが なにかわからないので具体的に書いてください
ms5025

2019/05/29 02:46

構成が違うのですが いわゆるphpのフレームワーク (モデル、コントローラ、view)のセットで作られた 大きなシステムです。 一応ソースはおいておきましたが、 他と足並みそろえる必要もあったり、基底クラスの処理等があり 全てをのせることはできないのですが、 ajaxのhtml返却時、 メインの画面をリダイレクトさせたいという質問のほうがいいのかもしれません。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問