zen-mobile + WordPress on ZenCartができないだろうか。

上記のジャンルにあてはまらない話題、雑談など
アバター
sumida

zen-mobile + WordPress on ZenCartができないだろうか。

投稿記事by sumida » 2009/11/07 15:58

ZenCartにzen-mobileを適用しても、ブログ(woz)に適用できないので、
何とかならないか試してみました。
結果として、実現できていません。
現在の状況です。

環境
ZenCart 1.3.8a(ver.3.1)
WordPress 2.7
woz(強引に上記に対応させたもの)
zen-mobile(snapshot-2009-07-01を、強引に上記に対応させ、バグ修正したもの)
共用SSL(nonSSLとSSLで、ドメイン名が異なる)
PCは、ZenCart全体をSSLで運用、携帯は、ZenCart全体をnonSSLで運用

考え方
zen-mobileは、テンプレートを動的に変更することで、携帯に対応していたので、
wozも、WordPressのテーマを動的に変更することで、携帯に対応させる。

修正内容
WordPressがDBから取得する情報を、決め打ちで変更する。
ファイル名:wp-includes/functions.php
関数名:get_option
内容:
コメント行「// If home is not set use siteurl.」の前に、以下を追加する。

コード: 全て選択

// zen-mobile
   if ( class_exists( 'Net_UserAgent_Mobile' ) &&
        Net_UserAgent_Mobile::isMobile() ) {
      if ( 'home' == $setting )
         $value = 'http://127.0.0.1:8080/store';
      if ( 'siteurl' == $setting )
         $value = 'http://127.0.0.1:8080/blog';
      if ( 'template' == $setting )
         $value = 'default-mobile';
      if ( 'stylesheet' == $setting )
         $value = 'default-mobile';
   }
// zen-mobile

上記修正による残りの作業
(1) 携帯のメニュー等に、ブログへのリンクを追加する。
(2) zenidをURLに付加しないため、ログイン状態でブログを表示すると、ログアウト状態になる。
     テーマとは、関係のない共通部分の修正が必要なようです。
(3) 強制ログアウト画面への遷移をどうするか。
(4) 携帯用の画面デザイン
     テーマのディレクトリを、「default-mobile」にしているので、ここを修正すれば多分できると思う。
(5) コメントの投稿時、クッキーを使用する場合があるようなので、ここをどうするか。
とりあえず、分かっている範囲です。
アバター
sumida

お試し手順

投稿記事by sumida » 2009/11/07 21:34

お試し手順
1. WordPressの携帯用テーマ
・テーマディレクトリのdefaultをコピーし、default-mobileにする。
・cssファイルに記述されているテーマ名を、WordPress Default Mobileにする。(コピー元と区別するため)

2. wp-includes/functions.phpの修正
・if ( class_exists( 'Net_UserAgent_Mobile' ) &&
    WordPressの管理画面からも呼ばれる関数のため、wozから呼ばれたか否かを判定
・Net_UserAgent_Mobile::isMobile() ) {
    携帯での表示か否かを判定
・if ( 'home' == $setting )及びif ( 'siteurl' == $setting )
    共用SSLのため、PCと携帯でURLが異なる。
    そのため、wp-includes/canonical.phpで整形される際、2つのURLが合体し、正しいURLにならないので、WordPressに、携帯用URLを設定
・if ( 'template' == $setting )及びif ( 'stylesheet' == $setting )
    使用するテーマのディレクトリに、携帯用を設定

3. 携帯で表示
・URLにmain_page=wordpressを追加
    (コメントの投稿:Shift_JISでの投稿のため、文字化けします。)
アバター
sumida

Re: zen-mobile + WordPress on ZenCartができないだろうか。

投稿記事by sumida » 2009/11/08 16:57

sumida さんが書きました:(2) zenidをURLに付加しないため、ログイン状態でブログを表示すると、ログアウト状態になる。
     テーマとは、関係のない共通部分の修正が必要なようです。

リンク用のパスを生成する関数を変更することで、主なリンクにzenidを付加できました。

コメント投稿ボタンは、form文により、WordPressのwp-comment-post.phpを呼びます。この部分で、zenidを展開できます。

また、投稿ユーザ名・コメントの文字コードをwp-comment-post.phpで変更できます。

ところが、画面遷移が
ZenCart(woz)-->WordPress-->ZenCart(woz)
になるため、後半部分で、zenidを引き継げないことが分かりました。

一筋縄ではいかないようです。
アバター
sumida

Re: zen-mobile + WordPress on ZenCartができないだろうか。

投稿記事by sumida » 2009/11/11 22:10

あれこれ、やってみました。
・ZenCart(woz)へのリンク
  zenidをURLへ付加する。-->できました。
・コメント投稿のリンク
  zenidをURLへ付加し、文字コードを変更する。-->できました。
・RSSのリンク
  携帯で、xmlを表示できないと勝手に判断した。-->RSSのリンクを表示しない。
・トラックバックのリンク
  zenidをURLへ付加できたが、アドレスをコピペで使用された場合、zenidも含まれてしまう。-->トラックバックのリンクを表示しない。

・画像を含む投稿記事
  画像サイズを携帯に合わせる。-->対応できない。
  (画像は、記事内にimgタグで記述され、文章とbrタグと画像の混在により、画像サイズ=携帯の表示サイズにもならない。)


やはり、無理か縲怐B
アバター
sumida

Re: zen-mobile + WordPress on ZenCartができないだろうか。

投稿記事by sumida » 2009/11/29 21:51

その後。
記事内の画像について、結論は、150x150の画像を使用する事にしました。

WordPressは、記事の画像について、元画像の他に3サイズの画像を持っているので、
imgタグは、強制的に150x150の画像ファイル名に固定する。

と、気を良くして、今度は、サイドバーを表示させました。
レイアウトは、themes/defaultをコピーして作成したthemes/default-mobileのsidebar.phpで調整します。

ここで、新たな問題が出てきました。

検索を行うと、正しく検索できません。
まだ、解決に至っていません。

原因は、携帯から検索を行うと、URLに検索文字列(s=)をURLエンコードして付加します。

検索文字列入力(SJIS)-->URL(SJISをエンコード)-->$_GET['s'](UTF-8としてデコードされている)
検索が成立しない場合、再検索文字列に$_GET['s'](UTF-8としてデコードされている)を使用-->携帯表示(zen-mobileにより、UTF-8からSJISへ文字コードを変換)

例:
検索文字列入力(「消防署」)-->URL(「s=%8F%C1%96h%8F%90」)-->$_GET['s'](「???h??」)
再検索文字列(「???h??」)-->zen-mobile(「%E6%B6%88%E9%98%B2%E7%BD%B2」)-->携帯表示(「豸磯亟鄂イ」)
アバター
sumida

Re: zen-mobile + WordPress on ZenCartができないだろうか。

投稿記事by sumida » 2009/11/29 22:49

sumida さんが書きました:検索を行うと、正しく検索できません。

回避策として、検索用formタグをgetからpostにすると動作するようです。
(URLエンコードを行わないようにする。)
wp-content/themes/default-mobile/searchform.php
<form method="post" id="searchform" action="<?php bloginfo('url'); ?>/">
アバター
sumida

Re: zen-mobile + WordPress on ZenCartができないだろうか。

投稿記事by sumida » 2009/12/01 16:17

結局、やってみました。
携帯で、
http://sumidaya.com/store/
を表示し、アカウントメニューの「ブログ」を選択してください。

なお、wozのサイドボックスは、サイドバーだけ有効にしています。
アバター
日美子

Re: zen-mobile + WordPress on ZenCartができないだろうか。

投稿記事by 日美子 » 2010/9/24 20:46

上記の件、同じような環境で使用したいのですが、
現状は、出来ないのでしょうか?

つまり、この件はこの掲示板で終わっている?
または、どこかでコード修正情報が公開されている?


いかがでしょうか?


よろしくです。
アバター
sumida

Re: zen-mobile + WordPress on ZenCartができないだろうか。

投稿記事by sumida » 2010/9/24 21:32

結局、前述のサイトのようになっています。

ただ、修正箇所があちらこちらになり、公開できそうにありません。
(最初にも書いたように、zen-mobileそのものも、UTF-8化し、さらに、v1.3.8a用にしているので。)
アバター
日美子

Re: zen-mobile + WordPress on ZenCartができないだろうか。

投稿記事by 日美子 » 2010/9/25 16:26

大変な作業だったと思います。
お疲れ様でした!


現在、同じくzenモバイルは、utf-8化他修正して何とか稼動しているところまで来ています。

残るは、wordpress側だけになるのでしょうか?


と、やっぱり無理は無理なんですよね(..................?
アバター
sumida

私の行った変更です。

投稿記事by sumida » 2010/9/25 18:14

私の行った変更です。携帯対応に関するものです。

手元のメモを整理したものです。テスト環境などで試してください。
また、思いあたったものに対し、その都度変更しているので、他の部分で変更が必要かもしてません。
この点については、ご容赦ください。

1. 事前準備
WOZ経由で表示するWordPressのテーマをコピーして作成します。
   コピー元 default
   コピー先 default-mobile
        好きな名称で良いですが、その場合、以降の記述を読み替えてください。
        また、元のテーマ名と判別するために、default-mobile内のテーマ名を変更してください。
WOZ経由で表示するサイドバーサイドボックスをコピーして作成します。
   コピー元 includes/modules/sideboxes/wp_sidebar.php
   コピー先 includes/modules/sideboxes/zen_mobile/wp_sidebar.php

2. WordPress本体の変更
(0) 予備知識
   ( class_exists( 'Net_UserAgent_Mobile' ) && Net_UserAgent_Mobile::isMobile() )
     ZenCart経由WordPressの場合、携帯か否かの判定
   function_exists( 'WOZMobile' )
     WordPress直接の場合、携帯か否かの判定
   共有SSLのサーバーで、PCでは、ZenCart全体をSSLで運用、携帯では、ZenCart全体を非SSLで運用
     携帯では、強制的に、WordPressの'home', 'siteurl'を非SSLのドメインに変更

(1) wp-includes/functions.php
   function get_option内に追加

// zen-mobile
if ( ( class_exists( 'Net_UserAgent_Mobile' ) &&
Net_UserAgent_Mobile::isMobile() ) ||
( function_exists( 'WOZMobile' )) ) {
if ( 'home' == $setting )
$value = 'http://ZenCartのドメイン名';
if ( 'siteurl' == $setting )
$value = 'http://WordPressのドメイン名';
if ( 'template' == $setting )
$value = 'default-mobile';
if ( 'stylesheet' == $setting )
$value = 'default-mobile';
}
// zen-mobile
// If home is not set use siteurl.
if ( 'home' == $setting && '' == $value )
return get_option( 'siteurl' );

(2) wp-comments-post-mobile.php
   新規ファイル(携帯からのコメント入力をSJISからUTF-8に変更し、既存のwp-comments-post.phpで処理)

<?php
// zen-mobile
function WOZMobile() {}

$_POST['author'] = mb_convert_encoding($_POST['author'], 'UTF-8', 'SJIS');
$_POST['comment'] = mb_convert_encoding($_POST['comment'], 'UTF-8', 'SJIS');
require( './wp-comments-post.php' );
// zen-mobile
?>


3. WordPress本体と携帯用テーマの変更
(0) 予備知識
   携帯の時だけ、
<?php echo zen_session_name() . '=' . zen_session_id(); ?>
   を付加する。

(1) wp-content/themes/default-mobile/header.php
   変更

<h1><a href="<?php echo get_option('home'); ?>/?<?php echo zen_session_name() . '=' . zen_session_id(); ?>"><?php bloginfo('name'); ?></a></h1>

(2) wp-includes/link-template.php
function get_permalink内に追加

} else { // if they're not using the fancy permalink option
// zen-mobile
if ( class_exists( 'Net_UserAgent_Mobile' ) &&
Net_UserAgent_Mobile::isMobile() ) {
$permalink = get_option('home') . '/?' . zen_session_name() . '=' . zen_session_id() . '&p=' . $post->ID;
} else {
if ( function_exists( 'WOZMobile' )) {
$permalink = get_option('home') . '/?zenid=' . (empty($_POST['zenid']) ? $_GET['zenid'] : $_POST['zenid']) . '&p=' . $post->ID;
} else {
$permalink = get_option('home') . '/?p=' . $post->ID;
}
}
// zen-mobile
return apply_filters('post_link', $permalink, $post, $leavename);
}

(3) wp-includes/category-template.php
   function get_category_link内に追加

if ( empty( $catlink ) ) {
// zen-mobile
if ( class_exists( 'Net_UserAgent_Mobile' ) &&
Net_UserAgent_Mobile::isMobile() ) {
$file = get_option( 'home' ) . '/';
$catlink = $file . '?' . zen_session_name() . '=' . zen_session_id() . '&cat=' . $category_id;
} else {
if ( function_exists( 'WOZMobile' )) {
$file = get_option( 'home' ) . '/';
$catlink = $file . '?zenid=' . $_POST['zenid'] . '&cat=' . $category_id;
} else {
$file = get_option( 'home' ) . '/';
$catlink = $file . '?cat=' . $category_id;
}
}
// zen-mobile
} else {

(4) wp-content/themes/default-mobile/comments.php
   変更

<form action="<?php echo get_option('siteurl'); ?>/wp-comments-post-mobile.php?<?php echo zen_session_name() . '=' . zen_session_id(); ?>" method="post" id="commentform">

   コメント欄を適当な大きさに

<p><textarea name="comment" id="comment" cols="22" rows="10" tabindex="4"></textarea></p>

4. その他いろいろ
(1) wp-content/themes/default-mobile/single.php
   コメント本文下のRSSリンクを非表示に変更

<!--
<?php printf(__("You can follow any responses to this entry through the <a href='%s'>RSS 2.0</a> feed.", "kubrick"), get_post_comments_feed_link()); ?>
-->

(2) wp-content/themes/default-mobile/footer.php
   フッターのRSSリンクを非表示に変更

<!--
<br /><?php printf(__('%1$s and %2$s.', 'kubrick'), '<a href="' . get_bloginfo('rss2_url') . '">' . __('Entries (RSS)', 'kubrick') . '</a>', '<a href="' . get_bloginfo('comments_rss2_url') . '">' . __('Comments (RSS)', 'kubrick') . '</a>'); ?>
-->

(3) wp-includes/post-template.php
   投稿記事内ので参照する画像ファイル名を強制的に'-150x150.jpg'に変更

$content = $pages[$page-1];
// zen-mobile
if ( class_exists( 'Net_UserAgent_Mobile' ) &&
Net_UserAgent_Mobile::isMobile() ) {
$content = str_replace("https://SSLサーバのドメイン名", "http://非SSLサーバのドメイン名", $content);
$content = preg_replace("/ width=?\"[0-9]+?\"/e", "", $content);
$content = preg_replace("/ height=?\"[0-9]+?\"/e", "", $content);
$content = preg_replace("/-[0-9]+x[0-9]+.jpg/e", "'-150x150.jpg'", $content);
}
// zen-mobile

(4) wp-includes/comment-template.php
   アバターを非表示に変更

<?php
// zen_mobile
if ( class_exists( 'Net_UserAgent_Mobile' ) &&
Net_UserAgent_Mobile::isMobile() ) {
} else {
?>
<?php if ($args['avatar_size'] != 0) echo get_avatar( $comment, $args['avatar_size'] ); ?>
<?php
}
// zen_mobile
?>

(5) wp-content/themes/default-mobile/sidebar.php
   とりあえず、ulタグを非表示に変更

<div id="sidebar">
<!-- <ul>-->

<!-- </ul>-->
</div>

(6) wp-content/themes/default-mobile/searchform.php
   検索キーワードをgetからpostに変更

<form method="post" id="searchform" action="<?php bloginfo('url'); ?>/">

5. zen-mobileの変更
5.1 アカウントメニューへ追加
(1) includes/languages/japanese/zen_mobile/header.php
   追加

define('MOBILE_WORDPRESS','ブログ');

(2) includes/modules/sideboxes/zen_mobile/account_menu.php
   追加

<br>
&#xE670;<a href="<?php echo zen_href_link('wordpress'); ?>"><?php echo MOBILE_WORDPRESS; ?></a>

5.2 サイドボックス
(1) includes/modules/sideboxes/zen_mobile/wp_sidebar.php
   main_page=wordpressの場合、サイドバーを表示

if ($_GET['main_page'] == 'wordpress') {
$title = BOX_HEADING_WP_SIDEBAR;
$left_corner = false;
$right_corner = false;
$right_arrow = false;
$title_link = false;
}

(2) サイドボックスの設定
wp_archives.php 「Blogアーカイブ」 オフ
wp_cats.php 「Blogカテゴリー」 オフ
wp_links.php 「Blogリンク」 オフ
wp_pages.php 「Blogページ」 オフ
wp_sidebar.php 「Blogサイドバー」 オン
アバター
日美子

Re: zen-mobile + WordPress on ZenCartができないだろうか。

投稿記事by 日美子 » 2010/10/04 09:49

ご返信、遅れてすみませんでした。


ありがとうございます。


TRYしてみます!

“Zen Cart 雑談処「禅亭」” へ戻る