ググらずには前へ進めないフロントエンドエンジニアが書く、次はググらなくてもできますように…とメモを残すブログです!

EC-CUBE 2.13系で sitemap.php の出力編集方法

2018/04/11
⚠️投稿日または最終更新日から5年以上経過している内容です。

サーチコンソールからの通知で、今更ながら初めて気が付きました。 EC-CUBE が標準提供している sitemap.php に相応しくない URL が含まれているなんて...。 今回は 2.13.4 と 2.13.5 のカスタマイズになります。

http://net-info-square.com/2015/08/22/post-60/ 基本のやり方はググってみるとサクッと見つかりました。 ただしこちらは shopping だけだったので、ちょっと追記してみました。

/data/class_extends/page_extends/LC_Page_Sitemap_Ex.php

php
/**
 * ブロック情報を取得する.
 *
 * @param  string $where  WHERE句
 * @param  array  $arrVal WHERE句の値を格納した配列
 * @return array  $arrPageList ブロック情報
 */
public function getPageData($where = '', $arrVal = '')
{
    $objQuery = SC_Query_Ex::getSingletonInstance();     // DB操作オブジェクト
    $sql = '';                      // データ取得SQL生成用
    $arrPageList = array();              // データ取得用

    // SQL生成(url と update_date 以外は不要?)
    $sql .= ' SELECT';
    $sql .= ' page_id';             // ページID
    $sql .= ' ,page_name';          // 名称
    $sql .= ' ,url';                // URL
    $sql .= ' ,filename';           // ファイル名称
    $sql .= ' ,header_chk ';        // ヘッダー使用FLG
    $sql .= ' ,footer_chk ';        // フッター使用FLG
    $sql .= ' ,author';             // authorタグ
    $sql .= ' ,description';        // descriptionタグ
    $sql .= ' ,keyword';            // keywordタグ
    $sql .= ' ,update_url';         // 更新URL
    $sql .= ' ,create_date';        // データ作成日
    $sql .= ' ,update_date';        // データ更新日
    $sql .= ' FROM ';
    $sql .= '     dtb_pagelayout';

    // where句の指定があれば追加
    if ($where != '') {
        // ↓↓↓書き換え <http://net-info-square.com/2015/08/22/post-60/>
        // $sql .= ' WHERE ' . $where;
        $sql .= ' WHERE NOT url LIKE \\'%shopping%\\' and NOT url LIKE \\'%entry%\\' and NOT url LIKE \\'%regist%\\' and NOT url LIKE \\'%mypage%\\' and NOT url LIKE \\'%cart%\\' and NOT url LIKE \\'%complete\\.php%\\' and ' . $where;
        // ↑↑↑書き換え
    }

    $sql .= ' ORDER BY page_id';

    $arrPageList = $objQuery->getAll($sql, $arrVal);

    // URL にプロトコルの記載が無い場合、HTTP_URL を前置する。
    foreach ($arrPageList as $key => $value) {
        $arrPage =& $arrPageList[$key];
        if (!preg_match('|^https?://|i', $arrPage['url'])) {
            $arrPage['url'] = HTTP_URL . $arrPage['url'];
        }
        $arrPage['url'] = preg_replace('|/' . preg_quote(DIR_INDEX_FILE) . '$|', '/' . DIR_INDEX_PATH, $arrPage['url']);
    }
    unset($arrPage);

    return $arrPageList;
}

/data/class/pages/LC_Page_Sitemap.php ファイルに getPageData という関数があるので丸ごとコピーし、 /data/class_extends/page_extends/LC_Page_Sitemap_Ex.php にペースト。

$sql .= ' WHERE ' . $where; のところに SQL を追記すると良いという具合です。

上記では、

  • /shopping/ 購入処理
  • /entry/ 会員登録
  • /regist/ 会員登録関連
  • /mypage/ マイページ
  • /cart/ カート
  • /complete.php なんらかの完了ページ を除外するようにしています。

これでサーチコンソールに怒られないかな?