プラグイン使用時に<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の勉強会資料を公開

過去3回EC-CUBE3向けの勉強会を開催しているのですが、要望が多かったのでスライド資料を公開しました。

少しでもEC-CUBE3の理解の手助けになれば嬉しいです。

最後の資料はプラグイン作成用の簡単な説明資料となっていますので、プラグインを作る方にとっては少しでも手助けになるのではないかなと思います。

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にログインして許可して確認してみてください。

安全性の低いアプリがアカウントにアクセスするのを許可する - 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 とします。

  1. インストール
    http://ドメイン名/html/install.php から普通にインストールを行ってください。

  2. ファイルの配置場所変更
    /home/hoge/EC-CUBEROOT/htmlにある以下の3つのファイル
    index.php
    .htaccess
    robot.txt
    /home/hoge/EC-CUBEROOT 直下へ移動させるかコピーしてください。

  3. index.phpの書き換え
    require __DIR__ . '/../autoload.php'; と記述されている箇所を require __DIR__ . '/autoload.php'; に変更します。

  4. 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の知識が必須となってきます。

Symfony2 ドキュメントポータル

TOPページ - Silex ユーザーガイド

を一通り読めば理解は出来るのですが、基礎知識を作る上では以下の本が参考になります。

効率的なWebアプリケーションの作り方 ~PHPによるモダン開発入門

効率的なWebアプリケーションの作り方 ~PHPによるモダン開発入門

日本語で読めるSymfony2の本はこれ以外には残念ながら見当たりません。

但し、Symfony2.1を対象にしているため現行のバージョンと大分乖離がありますが、
基礎となる部分は理解出来ると思いますのでまずはここからSymfony2の知識を仕入れるのが近道になると思いますのでぜひ一度参考にしてください。

Symfony2.7に対応した本を誰か出してくれないんですかね。。。

EC-CUBE3のURL設定について2

前回はEC-CUBE3のURLの設定方法について書きました。

amidaike.hatenablog.com

今回は

http://localhost:8001/store

みたいに書く方法です。

これは非常に簡単で、

/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>

こうすることで、

http://localhost:8001/store

とサブディレクトリとして扱えるようになります。

非常に簡単に設定できますね。 サイトトップは企業サイトとして作成し、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

http://localhost:8001/

だけで接続できるようにしましょう。

httpd.confに対して、最終行に以下の内容を追加してください。

Listen 8001

<virtualhost *:8001>
  DocumentRoot "/Applications/MAMP/htdocs/eccube/html"
  <IfModule dir_module>
    DirectoryIndex index.html index.php
  </IfModule>
</virtualhost>

これを追加後、MAMPを再起動すると、

http://localhost:8001/

だけで接続できるようになります。

設定変更後、

/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/storehttp://localhost:8001/shop などのサブディレクトリとしてEC-CUBE3を利用できる方法も書きますので、設定したいという方はコメントください。