EC-CUBEでhreflangタグを設置する

Googleが推奨するhreflangタグ。SEO効果はほとんどないみたいだが、サーチコンソールに出るのが嫌な場合は対策が必要。

タグを設置するのは簡単だが、このタグはサイトごとではなくページ単位で有効なタグなので、ページ毎に設置する必要がある。その為、下層のページにはその下層のページのURLで設置する必要がある。

EC-CUBEの場合は、site_frame.tplに下記のように書くことで、下層を含む全ページに対応可能。(例では言語は’ja’のみ)

/data/Smarty/templates/default(またはsphoneなど)/site_frame.tpl

 

参考URL)

 

WHERE句でキーとなるカラムに値が無ければ別のカラムの値を採用する

SELECTするとき、WHERE句で特定の日付の値を条件として使いたいが、その値が存在しなかったり期待するものと違ったりした時、別の日付をキーにする。

例えば以下は、base_dateカラムの日付をキーにしたいが、base_dateの値がNULLだったりMySQLのデフォルト値(0000-00-00)だったりすると、結果がおかしくなってしまう。

なので、このbase_dateの値が期待するものと違えば、代替として、entryの値を使用したい。

CASEを使って対応。

 

NULLだけを回避するのであれば、COALESCEを使えばいいっぽい。試してないが書くならこんな感じかしら。

 

参考サイト)

 

EC-CUBE2系+PHP5.4でファイル管理を開くとエラーになる場合の対処

エラーの発生条件

  • EC-CUBE2.13.2
  • PHP5.4

管理画面で、「コンテンツ管理」→「ファイル管理」を開くと、下記のエラーがでる。

 

どうやらPHP5.4から、関数のパラメータにスーパーグローバル変数と同じ名前の変数を使用することができなくなったことが原因らしい。

「data/class/pages/admin/contents/LC_Page_Admin_Contents_FileManager.php」を修正して対処する。

 

(参考サイト:https://xoops.ec-cube.net/modules/newbb/viewtopic.php?topic_id=10792&forum=9&post_id=50986

サブドメインで公開していたバーチャルホストをaliasを使ってメインサイトの配下に配置する

例えば、

  • www.hoge.com →サービスのメインサイト
  • help.hoge.com →サービスのヘルプサイト(バーチャルホスト)

のような形で運用していたものを、ファイル構成などを変更せず、

  • www.hoge.com
  • www.hoge.com/help

のように、メインサイト配下に内包して見せたい場合。主にSEO対策。

 

まず、help.hoge.comのapache設定ファイル(httpd.confなど)の内容をコピーしておく。

※今回はPlesk9下のバーチャルホストで動いているので、httpd.includeの内容をコピーしておく。

 

次に、alias用のapache設定ファイルを作成する。Plesk9配下で動いている場合は、confの下にvhost.confという名前で作成する必要がある。

参考にしたサイト)

 

SSL用にもこの設定ファイルをコピーしておく。Pleskの場合SSL用のファイル名は、vhost_ssl.confにする必要がある。内容はとりあえず同じでOK。

 

作成した設定ファイルをapacheに読み込んでもらうようにする。

参考にしたサイト):https://ex-cloud.jp/support/question/g-437

 

ヘルプサイトがワードプレスやCMSを使用している場合、.htaccessでリダイレクト設定(SEF 設定)を行っている場合があるので、静的URLでも動くよう修正する。

参考にしたサイト)

 

最後にWEBサーバをリロード

 

後はGoogleにインデックス登録してもらえるように、Search Console からsitemap.xmlなどを送信しておけばよいでしょう。

 

Chrome使用時にfocusイベント内でalertするとダイアログが延々と繰り返される場合の対策

簡単な処理やデバッグ時などでは、まだまだ重宝するalert()。

例えばよくあるこんな処理。

ところがGoogle Chromeを使用した場合、「Hello!!」のダイアログを消しても消しても、延々とダイアログが表示し続ける無限ループが発生する場合がある。

アラートを出した後に、自動的に要素に対してフォーカスが行われ、その結果処理の繰り返しになるらしい。

なので、単純な解決策としては、アラートを出した後に、フォーカスを外してやればよい。

 

なお、アラート後、また同じ要素にフォーカスさせ、かつ無限ループさせない方法はこちらを参照。

 

phpmyadminで大きなサイズのファイルをインポートする

.sqlファイルをインポートするときなど、制限があるとアップロードが途中で止まってしまう。

エラー:「アップロードしようとしたファイルが大きすぎるようです。…」など。

解決法としては、

  • エクスポート時にファイルを圧縮しておく。
  • Bigdumpを利用する。
  • sshで接続し、SCP転送する。

などがあるが、VPSやクラウド環境などの場合は、php.iniを編集した方が早いかも。

編集後、このままだと反映されないので、WEBサーバを再起動する必要があります。

以上。

参考サイト)

 

EC-CUBE(2系)で管理者権限の設定

動作確認はEC-CUBE2.13.2。結構古いけど。

例えば一部のメンバーは、商品管理メニューしか操作できないようにしたい時とか。

    1. まず「システム設定」→「マスターデータ設定」から「mtb_authority」を選択。
    2. 「追加のデータ」欄に、IDを指定(例えば2)し、値に権限名(例えば「商品管理者」)を入力。→「この内容で登録する」
    3. 「システム設定」→「マスターデータ設定」から「mtb_permission」を選択。
    4. 「基本情報管理」以下にアクセスできなくする場合、「追加のデータ」欄に、ID「/admin/basis/」、値「1」を設定。(この値が、ログインしたメンバーのID以下ならアクセス可能になる。ここを「2」にすれば追加した商品管理者もアクセス可能になる。)
    5. 他にもアクセス不可にしたいページがあれば、同様に「mtb_permission」に追加する。
    6. 「/data/class/SC_Session.php」を編集。
    7. 「/data/class/pages/error/LC_Page_Error_DispError.php」を編集。
    8.  「/data/Smarty/templates/admin/login_error.tpl」を編集。

以上。

  1. さらにメニューを非表示にしたい場合は、こちらなどを参照。

 

参考URL)

CentOS5環境に yum を使って sysstat を導入する

CentOS5はEOL(End of Life)で yum を使っての更新が出来ません。
例えば「yum install -y sysstat」というコマンドがエラーとなってしまいます。
yum での更新が必要な場合、古いリポジトリを参照するようにレポジトリ定義ファイルの設定を変えます。

修正したレポジトリ定義ファイルは下記。
/etc/yum.repos.d/CentOS-Base.repo

修正内容は下記。

ところが、この修正だけでは sysstat を拾ってきてくれませんでした。
エラーの内容は下記の通り。

なぜかRepoForgeに向いてしまっているので、その設定を無効化します。
修正するファイルは下記。
/etc/yum.repos.d/rpmforge.repo
修正内容は
enabled を 1 から 0に変更するだけです。

ここまでの変更で、yum を使った更新作業が可能になりました。

参考資料

Smartyでループ内のindexを得る

Smartyのループの中で、現在何番目の処理かを知りたいときなどは、「index」プロパティを使用します。

 

例)リスト10件おきに広告を表示したいとき

 

参考URL)

GROUP BYしたカラム以外のカラムで優先順位を決める方法

GROUP BY で指定したカラムの値が、同じ値の行はグループ化されるが、GROUP BY で指定していないカラムの値は、どの行の値を優先させるか、通常は決めることができない。

例えば、下記のようなSQLだと、得られるidの優先順位は指定できない。(実際、昇順で最初のものがくる場合が多いが、保証はされない)

 

この場合は、副問い合わせで対応するのが一般的なやり方らしい。

 

ちなみにWHERE句で絞る場合も、副問い合わせの中で絞らないとダメ。なので、下記の場合は失敗する。

 

参考サイト)