cakephp views/pagesにイメージファイルを置きたい

このQ&Aのポイント
  • cakephpのviews/pagesディレクトリにイメージファイルを置く方法について教えてください
  • サイトで共通に使用するイメージファイルはwebroot/imgディレクトリに入れていますが、1つのページでしか使わない細々としたファイルをviews/pages以下の各ディレクトリに入れたいです
  • しかし、ブラウザで表示する際にpages_controllerと解釈されてしまい、正しく表示されません。views/pages以下にイメージファイルを置くことはできないのでしょうか
回答を見る
  • ベストアンサー

cakephp views/pagesの中にイメージファイルを置きたい

サイトで共通に使用するイメージファイルは、webroot/imgの中に入れていますが、 1つのページでしか使わない細々としたファイルはviews/pages/以下の各ディレクトリに入れたいたいんです。 (デザイナーからあがってくる構造がそうなっていることが多いので) しかしながら、ブラウザで表示する際にpages_controllerとかで勝手に解釈されるのか、種類がtext/htmlになってしまい、正しく表示してくれません。 やはり/views/pages/以下にイメージファイルを置くことは無理なんでしょうか。 ご存じのかたいらっしゃいましたら、よろしくお願いいたします。

  • PHP
  • 回答数1
  • ありがとう数1

質問者が選んだベストアンサー

  • ベストアンサー
noname#94983
noname#94983
回答No.1

>種類がtext/htmlになってしまい これは、違うと思う。単純にアクセス先が強制的にリライトされているからだろう。 CakePHPでは、.htaccessで強制的にindex.phpにリライトしている。CakePHP内にある.htaccessと、「app」内にある.htaccessでそのサーバー設定を行っている。だから、これらを書き換えれば可能だ。例えば、「app」内にある.htaccessの、 RewriteRule (.*) webroot/$1 [L] この部分のルール設定を変更する。例えば、(.*)を(.php)とかに変更すればviews内にある.php拡張子以外のファイルにアクセスできるはず。 ただし、この場合、ビューの.ctpファイル内に用意する<img>タグのリンクは、 <img src="/hoge/app/views/pages/sample.jpg"> こんな感じでアドレスを指定することになる。つまり、デザイン段階で、ビューファイルのある階層の外に「views」フォルダをおき、その中に更に「pages」フォルダを用意して、そこにファイルを配置してデザインを作っていることになる。本当にこんなわけわからないフォルダ構成でデザインをしているのか?と疑問に思う。これは、ありえないだろう。たぶん、どこかで何か錯覚をしているような気がする。 「webroot」の「img」を使えば、(.htaccessの変更などしないでデフォルトの設定のままで) <img src="sample.jpg"> たったこれだけですむ。例えば、デザイナーが、ビューファイルの階層に「images」フォルダをおき、その中にイメージを用意して<img src="./images/sample.jpg">とリンクを張っていたとするなら、それは「webroot」の「img」内に「images」フォルダを作成し、そこにsample.jpgをおくことでリンクできる。要するに、ファイルの場所を機械的に移動するだけで済む。したがって、webroot下に配置したほうが圧倒的にデザインは楽になるはずなんだが。それではまずいんだろうか?

seiroku55
質問者

お礼

ありがとうございます。 お礼が遅れてすみませんでした。 はじめの段階で画像のおき方を指定しておかなかったのは問題でした・・・ コンテンツ数が多いので、デザイナーから渡されたディレクトリ構造で相対パスでできないかな~と思ったんですが、後々にも問題になりそうなので、webroot/imgに移動させようと思います。 すっきりしました。 ありがとうございました。

関連するQ&A

  • [CakePHP1.3] viewとlayouts

    view配下のファイルとlayout配下のファイルとでは以下の違いがあるかと思います。 layout配下 ・コントローラから渡された変数を表示できる ・php関数が利用できる view配下 ・コントローラから渡された変数を表示できない ・htmlタグで表示する viewはlayoutの中で利用するようできていることからすると、定形的なもの(たとえばTOPの紹介文など)を書き込んで利用するかと思いますが、使い方としては正しいでしょうか。 また、場合によっては(layoutの中でviewを)切り替える必要性が出てくると思いますが、できるとすればどのように制御するのでしょうか? ※例文などあると助かります。 ご存じの方、アドバイスをお願いします。

    • ベストアンサー
    • PHP
  • cakephpでのダウンロード機能の実装について

    cakephpで画像のダウンロード機能を実装しています。 webroot/imgに画像は入っています。 controllerで public function download($filename = null){ $this->autoRender = false; $this->response->file('img/' . $filename); $this->response->download($filname); } とし、 viewで <?php echo $this->Html->link('ダウンロード', array('controller' => 'images','action' => 'download', $image['Model']['filename'])); ?> このようにリンクしています。 ファイル名が英語の画像は問題なくダウンロードできるのですが、ファイル名が日本語の画像がダウンロードできません。 The requested file img/日本語ファイル名.jpg was not found or not readable Error: The requested address '/illusts/image/%~.jpg' was not found on this server. リンクをクリックするとこのように表示されます。 webroot/imgにはちゃんと画像は入っているのですが・・・。 どのようにしたら、日本語名のファイルもダウンロードできるようになるのでしょうか。 どなたかご教授ください。 よろしくお願いいたします。

    • ベストアンサー
    • PHP
  • CakePHPでモデルを共有する複数のアプリ

    Cake初心者です。お手柔らかにお願いします。 会員制のサイトを作るときに会員用のページと非会員用のページをアプリ単位で分けてしまいたいのですが、同じファイルを両方に用意することが多くなってしまいます。 実際はControllerとViewがそれぞれわかれていればいいだけなので、うまく拡張して複数のアプリを管理しやすくできないでしょうか? 理想としては [非会員用] apps/public/Controller apps/public/View apps/public/Webroot [会員用] apps/user/Controller apps/user/View apps/user/Webroot という風にして、それ以外のものを共有するというものです。 ヒントだけでも良いのでよろしくお願いします。

    • ベストアンサー
    • PHP
  • CakePHPの .htaccess設定について

    CakePHPをVPSで構築したサーバー(Linux)にインストールしました。 .htaccess(mod_rewrite)の設定がうまくいっていないようなので対処の方法を教えてください。 [環境] PHP 5.3.3 Apache 2.3.3 CakePHP 1.3.15 mod_rewriteが動いてるのはチェック用のプログラムで確認しました。 controllerとViewファイルを作り、文字の表示は成功しています。 フォームの実験を行った時にフォーム送信後のURL表示がうまくいっていません。(get/post共に) [書籍を参考にしたプログラム] Sampleコントローラーを作り、Viewの中にSampleディレクトリを作りその中にindex.ctpファイルを設置。フォームにテキストを入力して送信ボタンを押すと、テキストが表示されるプログラムです。 [コントローラー]sample_controller.php class HelloController extends AppController { public $name = 'Hello'; public $uses = null; public $layout = "hello"; function index(){} function sendForm(){ ~フォームで送られたテキストを表示(プログラムは省略)~ } } [index.ctp]のフォームのHTML <form method="post" action="./sendForm"> ~省略~ <input type="submit" /> </form> http://www.example.com/sampleでフォームを開きテキストを入力して送信ボタンを押すと http://www/example.com/sample/sendForm というURLになるはずなのですが、 http://www.example.com/sendForm となってしまいます。 試しにブラウザから「http://www/example.com/sample/sendForm」というURLを入力してみますと、フォームで入力したデータは表示されませんが、ページ自体は表示されます。 もう一つ、index.ctpの<form method="post" action="./sendForm">のアクションのパスを /sample/sendForm に変更してみますとデータも表示され、求めた結果になります。 以前、別の環境でこのプログラムを動かしたときは、<form method="post" action="./sendForm">のままでうまくいったので、.htaccessのファイルの設定に問題があると予想されます。 下記にcakePHPの設定情報を記載しますので、間違っている部分を指摘していただければと思います。 ※ディレクトリの構成は下記のページの「3.4.3. 高度なセットアップ:その他のインストール方法」を参考にしています。 http://cakephp.jp/old_doc/ch03s04.html [アプリケーションディレクトリ] /home ____/me ________/mysite ____________/config ____________/controllers ____________/models ____________/plugins ____________/tmp ____________/vendors ____________/views ____________index.php ____________.htaccess→「htaccessファイル1」● [公開ディレクトリ] /var ____/www ________/html ____________/example.com→ドキュメントルート _______________/css _______________/files _______________/img _______________/js _______________.htaccess→「htaccessファイル2」● _______________css.php _______________favicon.ico _______________index.php [コアファイルディレクトリ] /usr ____/lib ________/cake ____________/cake ________________/config ________________/docs ________________/libs ________________/scripts ________________app_controller.php ________________app_model.php ________________basics.php ________________bootstrap.php ________________dispatcher.php ____________/vendors ____________/plugins ____________index.php ____________.htaccess→「htaccessファイル3」● 「htaccessファイル1」(アプリケーション) -------------------------------------------------- <IfModule mod_rewrite.c> RewriteEngine on   RewriteBase /cake/app→■追加  RewriteRule ^$ webroot/ [L] RewriteRule (.*) webroot/$1 [L] </IfModule> ------------------------------------------------- 「htaccessファイル2」(公開) -------------------------------------------------- <IfModule mod_rewrite.c> RewriteEngine On   RewriteBase / →■追加  RewriteCond %{REQUEST_FILENAME} !-d RewriteCond %{REQUEST_FILENAME} !-f RewriteRule ^(.*)$ index.php?url=$1 [QSA,L] </IfModule> -------------------------------------------------- 「htaccessファイル3」(コア) -------------------------------------------------- <IfModule mod_rewrite.c> RewriteEngine on   RewriteBase /cake→■追加 RewriteRule ^$ app/webroot/ [L] RewriteRule (.*) app/webroot/$1 [L] </IfModule> -------------------------------------------------- 疑問点は下記のようになっています。 (1)追加した部分のRewriteBaseはこれで良いのか? (2)RewriteRule ^$ webroot/ [L] RewriteRule (.*) webroot/$1 [L] の部分はこのままで良いのか?webroot部分の変更は必要か? (3)RewriteRule ^(.*)$ index.php?url=$1 [QSA,L]の部分はこのままで良いのか?

    • ベストアンサー
    • PHP
  • ページビューの意味

    サイトの人気を表すものとしてページビューというものがありますが、具体的にはどのような数値になるのでしょうか。 訪問者にてリクエストされた=閲覧されたHTMLのファイル数という解釈でもよいのでしょうか?(ページ内の画像ファイルもカウントされるのでしょうか?) そうするとページの多いサイトは相対的にトータルのページビューは多くなりますよね。 それとも一般に言われているページビューとはトップページだけということでしょうか? どうもページビューの意味するところがハッキリと分からないので誰か教えていただけませんか?

  • CakePHPのディレクトリ構成について(app)

    CakePHPのapp内のディレクトリ名について教えてください。 CakePHPを使ってみたいと思いインストールまで実行しました。 作成したプログラムはappディレクトリ内に配置するようですが、 公式ドキュメントとapp内のディレクトリ名が違います。 バージョン:CakePHP ver 2.0.3 安定版 Cookbook(公式ドキュメント)を見ると 「2.3 CakePHPのフォルダ構造」 http://book.cakephp.org/ja/view/899/CakePHP%E3%81%AE%E3%83%95%E3%82%A9%E3%83%AB%E3%83%80%E6%A7%8B%E9%80%A0 Appフォルダは controllers libs models views ・・・ と記載してあります。 実際にappディレクトリを見てみると Controller Lib Model View ・・・ というように始めの文字が大文字になっていて複数形がなくなっています。 これはバージョンの違いによるものなのでしょうか? 公式ドキュメントでappのcontrollerディレクトリにファイルを作ってアップロードとなっていたら、実際にはappのControllerディレクトリにファイルをアップロードすれば良いのでしょうか? それとも、Controllerディレクトリとは別にマニュアルと同じ名前controllerディレクトリを作成してその中にファイルをアップロードするのでしょうか?

    • ベストアンサー
    • PHP
  • CakePHP のディレクトリの構成について

    現在 CakePHP を勉強しています。 最初から壁にぶち当たってしまいました。 参考にしているサイトの内容は以下のようになっているのですが apps/app1 と www/app1 の関係がよくわかりません。 シロート的なイメージとして、CakePHP では apps/app1 で色々と作成したものが(自動的に)www/app1 に複写される。 そしてブラウザからのアクセスは www/app1 になる???? そんなイメージなのですが、その辺を含めて勘違いしていると思います。 この2つのディレクトリの意味と用途?を教えてもらえないでしょうか? +/home/example ・・・ ホームディレクトリ   |   +cake ・・・ cake ディレクトリ   |   +apps ・・・ CakePHPで作成するアプリケーション用ディレクトリ   | |   | +app1 ・・・ CakePHPで作成するアプリ1のappディレクトリ   | | |   | | +config, docs, libs, scriptsディレクトリとファイル   | |   | +app2 ・・・ CakePHPで作成するアプリ2のappディレクトリ   |   |   |   +config, docs, libs, scriptsディレクトリとファイル   |   +www ・・・ ウェブで公開されるディレクトリ(DocumentRoot)     |     +app1 ・・・ CakePHPで作成するアプリ1 の webroot     |     +app2 ・・・ CakePHPで作成するアプリ2 の webroot     |     +other ・・・ CakePHP以外のアプリを使う場合のディレクトリ

    • ベストアンサー
    • PHP
  • cakephpのデフォルトのページ設定

    cakephp初心者です。 色々なサイトのインストール手順を見て、 apacheでドキュメントルートを設定した、 /var/www/html/cakephpとして、cakephpのファイルを配置しました。 ブラウザからアクセスすると http://localhost/cakephp/自分の作成したディレクトリ というアクセス方法になります。 今は自宅の仮想サーバに入れていますが、もし外部のサーバに入れてドメイン名がついた場合、 http://ドメイン名/cakephp になってしまいますよね? http://ドメイン名 で、/var/www/html/cakephpにアクセスできるようにするには、 どのようにしたらいいのでしょうか。 現在、 http://ドメイン名 を打つと、cakephpのデフォルトの Release Notes for CakePHP 2.5.8. がタイトルのページが表示されています。 ここをデフォルトのページではなく、こちらで用意したViewのctpファイルを表示させてControllerで制御したいのです。

    • 締切済み
    • PHP
  • MVC構造で、各コントローラで共通な動的ページを表示するにはajaxが一般的なのでしょうか?

    MVC構造に不慣れなものです。(zendフレームワークを利用しています) コントローラAContololler.phpで、ビューA.htmlを表示しています。 ビューA.htmlの中では、共通のビューhead.htmlを最初に読み込んでいます。 コントローラB,Cでも同様にビューB,Cを表示し、共通のビューhead.htmlを最初に読み込んでいます。 このビューhead.htmlの中身を条件ごとに動的表示したいのです。 1個のコントローラ限定であれば、 コントローラ内で条件分けして結果をビューに渡してしまうだけなんですが、 複数のコントローラで呼ばれることを考えると、 それぞれのコントローラ内に同じ処理を書かなければなりません。 これを忘れてたまたまhead.htmlを読み込んでしまった時にエラーとなってしまいます。 ようするに、head.htmlを読み込む上で、コントローラ側に設定が必要という二手間かかる部分が腑に落ちません。 MVC構造でないのであれば、動的部分をhead.phpとして作っておき、 必要なページでそれを読み込むだけでいいのにって思ってしまいました。 この二手間かかるのを回避するには、 head.htmlの中で、動的データを取りにいくというajax化するしかないのでしょうか? それともhead.htmlの中にphpのコード、ここでいえばDBに繋ぐ部分や条件分けなどまで書いてしまうのもありなんですか? でもMVCの考え方としてビューの中に処理をだらだら書くのはちょっと筋違いかなぁと思うのですがどうなんでしょう。。。

    • ベストアンサー
    • PHP
  • cakephp1.2で画像が出力できない!

    お世話になります。cakephp1.2で解決できないことがあります。 それは画像の出力です。 app/webroot/img配下にtest.jpgがある場合、 どのように表記したらビューで出力できるでしょうか? <?php echo $html->image('test.jpg') ; ?> や絶対パス、cake.power.pngなどの出力テスト をいろいろ試しましたが、どうしても解決できません>< どうかみなさま宜しくお願い致します。 暫くプログラマの方と連携がとれないので、 こちらに質問させて頂きました。。。

    • ベストアンサー
    • PHP

専門家に質問してみよう