プラグイン使用時に<html>タグが削除される及び文字化けが発生する問題
現在公開されているEC-CUBE3向けのプラグインではプラグイン対象ページだと
<!doctype html> <html lang="ja"> </html>
のタグが出力されない現象及び文字化けが発生しています。
原因は、
$crawler->html();
を使うとタグが出力されない及び文字化けが発生します。
対処方法として、
public function Hoge(・・・・) { ・・・・ $crawler = new Crawler($response->getContent()); $html = $this->getHtml($crawler); ・・・ } /** * 解析用HTMLを取得 * * @param Crawler $crawler * @return string */ private function getHtml(Crawler $crawler) { $html = ''; foreach ($crawler as $domElement) { $domElement->ownerDocument->formatOutput = true; $html .= $domElement->ownerDocument->saveHTML(); } return html_entity_decode($html, ENT_NOQUOTES, 'UTF-8'); }
というようにgetHtmlを自作してdomElementを1行ずつ取得することで文字化けは直ります。
また、$crawler->filter
も同様に文字化けが発生しますので、
$oldElement = $crawler->filter('#main'); $oldHtml = $oldElement->html(); $oldHtml = html_entity_decode($oldHtml, ENT_NOQUOTES, 'UTF-8');
とすることでこちらも対応可能です。
本来であれば本体側で組み込んで欲しい機能ですね。
EC-CUBE3でGmailを使ったメール送信方法
EC-CUBE3ではメール送信に
と3つのtransportが設定できます。
メールサーバを設定するにはinstall時に設定可能ですが、 インストール後に再設定をし直すには以下の箇所で設定できます。
app/config/eccube/mail.yml
mail: transport: smtp host: localhost port: 25 username: password: encryption: null auth_mode: null
gmailを使って送信したい場合、以下のように設定するとGmailを使って送信できます。
mail: transport: smtp host: smtp.gmail.com port: 465 username: GMAILのユーザー名 password: GMAILのパスワード encryption: ssl auth_mode: login
メールサーバの指定が簡単に設定出来るのは便利ですね。
[追記] Gmailの設定によってはアプリを許可する必要がありますので、 Gmailで送信できないという方は一度Googleにログインして許可して確認してみてください。
レンタルサーバでEC-CUBE3でのURL設定の仕方について
少し間が空いてしまいましたが、 以前にEC-CUBE3のURL設定について記事を書きました。
amidaike.hatenablog.com amidaike.hatenablog.com
通常のURLの設定方法については、 これらの記事に記載されている通りDocumetRootを
/Applications/MAMP/htdocs/eccube/html
として設定してhttp://ドメイン名/
で接続する方法であったり、
htmlというディレクトリ名を
/Applications/MAMP/htdocs/eccube/store
に変更する事でhttp://ドメイン名/store
というURLで接続可能となります。
ところが開発コミュニティーを見ると、
http://xoops.ec-cube.net/modules/newbb/viewtopic.php?topic_id=16212&forum=10&post_id=71962#forumpost71962xoops.ec-cube.net
http://(ドメイン名)/html/index.php
ではじまるものを
http://(ドメイン名)/index.php
というようにレンタルサーバで自由にDocumentRootを設定できないが、
http://(ドメイン名)/
として設定したい時があります。
これらはどのように設定するかというと、 公式にはサポートされていない方法ではありますが以下のように対応する事で実現可能となります。
EC-CUBEをインストールしたディレクトリ先は
/home/hoge/EC-CUBEROOT
とします。
インストール
http://ドメイン名/html/install.php
から普通にインストールを行ってください。ファイルの配置場所変更
/home/hoge/EC-CUBEROOT/html
にある以下の3つのファイル
index.php
.htaccess
robot.txt
を/home/hoge/EC-CUBEROOT
直下へ移動させるかコピーしてください。index.phpの書き換え
require __DIR__ . '/../autoload.php';
と記述されている箇所をrequire __DIR__ . '/autoload.php';
に変更します。path.ymlの書き換え
/home/hoge/EC-CUBEROOT/app/config/eccube/path.yml
にある
root_urlpath: /html
を
root_urlpath:
に変更してください。
上記の設定を行う事で、
http://ドメイン名/
で接続できるようになります。
本来であればインストール時にそういうオプションがあれば良いんですが、 当分用意されなさそうですなので、スクリプトを作成して公開するようにします。
EC-CUBE3を開発する時に参考になる本
前回まではEC-CUBE3のインストールおよびURL構成について説明しました。
今回からはEC-CUBE3を開発する方法を書いていきます。
EC-CUBE3の基本要件としては、
EC CUBE3.0.0の要件 · EC-CUBE/ec-cube Wiki · GitHub
というようになっており、Symfony2コンポーネントであるSilexを使って開発されています。
このSilexを使って開発するためには、Symfony2の知識が必須となってきます。
を一通り読めば理解は出来るのですが、基礎知識を作る上では以下の本が参考になります。
効率的なWebアプリケーションの作り方 ~PHPによるモダン開発入門
- 作者: 小川雄大
- 出版社/メーカー: 技術評論社
- 発売日: 2012/05/26
- メディア: 大型本
- 購入: 6人 クリック: 146回
- この商品を含むブログ (8件) を見る
日本語で読めるSymfony2の本はこれ以外には残念ながら見当たりません。
但し、Symfony2.1を対象にしているため現行のバージョンと大分乖離がありますが、
基礎となる部分は理解出来ると思いますのでまずはここからSymfony2の知識を仕入れるのが近道になると思いますのでぜひ一度参考にしてください。
Symfony2.7に対応した本を誰か出してくれないんですかね。。。
EC-CUBE3のURL設定について2
前回はEC-CUBE3のURLの設定方法について書きました。
今回は
みたいに書く方法です。
これは非常に簡単で、
/Applications/MAMP/htdocs/eccube/html
とhtmlと記載している箇所をstore
というようにディレクトリ名をhtmlからstoreへ変更し、
httpd.conf
を以下のように変更してください。
Listen 8001
<virtualhost *:8001>
DocumentRoot "/Applications/MAMP/htdocs/eccube"
<IfModule dir_module>
DirectoryIndex index.html index.php
</IfModule>
</virtualhost>
こうすることで、
とサブディレクトリとして扱えるようになります。
非常に簡単に設定できますね。 サイトトップは企業サイトとして作成し、ECサイトはサブディレクトリとして扱いたいという方はこちらの方法となります。
EC-CUBE3のURL設定について
前回まではEC-CUBE3のインストール方法について書きました。
今回は、EC-CUBEで使用するURLについて書きます。
MAMPをデフォルトで使っているとEC-CUBEのURLは、
http://localhost:8888/eccube/html/
となり非常にカッコ悪いですね。
EC-CUBEを利用される方は、
http://[ドメイン名]/
として使う方が多いとおもいます。
今回はMAMPでその設定について記述しますが対象はApacheとなりますので、nginxの方はまたどこかで説明できればと思います。
MAMPをデフォルトで使用されている方は、
/Applications/MAMP/htdocs
がDocumentRootになっています。
これは前回から特に変更せずにそのままにしておきます。
/Applications/MAMP/htdocs/eccube
次に必要なのは、Apacheの設定変更になります。
以下のディレクトリにあるhttpd.confを変更する事で,
/Applications/MAMP/conf/apache/httpd.conf
だけで接続できるようにしましょう。
httpd.conf
に対して、最終行に以下の内容を追加してください。
Listen 8001
<virtualhost *:8001>
DocumentRoot "/Applications/MAMP/htdocs/eccube/html"
<IfModule dir_module>
DirectoryIndex index.html index.php
</IfModule>
</virtualhost>
これを追加後、MAMPを再起動すると、
だけで接続できるようになります。
設定変更後、
/Applications/MAMP/htdocs/eccube/app/cache
配下にあるディレクトリを全て削除してください。
その後、以前に設定されていた方は再度インストールが必要となりますので、
http://localhost:8001/install.php/
を再実行してください。
今までであれば、eccube/html
が必要だったのに非常にすっきりしましたね。
http://localhost:8001/ や http://localhost:8001/admin で接続できるか確認してください。
接続できないという方がいれば、再度MAMPを再起動してみてください。
既にインストールされている方は手動で変更する方法もありますが、それは機会があった時に書きます。
別にeccube/html
があっても構いませんが人それぞれの好みになりますのでそこはご自由にしてください。
要望がありましたら、
http://localhost:8001/store や http://localhost:8001/shop などのサブディレクトリとしてEC-CUBE3を利用できる方法も書きますので、設定したいという方はコメントください。