■ユーザーズフォーラム リニューアルのお知らせ
新規投稿は新ユーザーズフォーラムにお願いします。

グローバルメニューに外部URLを設定すると、スマートフォンサイトでURLがリンクが正常に生成されない

tksy > グローバルメニューに外部URLを設定すると、スマートフォンサイトでURLがリンクが正常に生成されない @ 2014/4/29 17:39
■ BaserCMSのバージョン:3.0.2
■ レンタルサーバー名:さくらスタンダード
■ スマートURLの利用: ON
■ 設置フォルダ: サブフォルダ
■ 利用しているデータベース: MySQL
■ PHPスキル(自己評価): D(Java等は読めるがPHPは専門外)

メニュー編集のリンクURLにて外部URLを設定しています。
このとき、PCサイトでは正しくリンクが機能するのですが、スマートフォンでは外部サイトへのリンクが正しく機能しません。
 http://hogehoge/fugafuga

 shttp://hogehoge/fugafuga
のように「s」が付加されてしまいます。

で、使用中レイアウトのLayouts/smartphone/default.php の該当箇所と思われるところに
 <?php $this->BcBaser->element('global_menu') ?>
とあったのでElements/global_menu.phpをいろいろ編集したのですが、
スマートフォンで確認しても何も変化無しでした。
(グローバルメニューが全部表示されないように修正しても、PCのみの反映でスマートフォンで変化無し)

テーマは「Bootstrap baserCMS バージョン:2.0.0」です。

リンクURLに「s」が付加される事自体はlink呼び出し時の第二引数で$prefixが付いているためだと推測したのですが、
それ以上の事が分かりませんでした。。。
よろしくお願いします。
n1215 > Re: グローバルメニューに外部URLを設定すると、スマートフォンサイトでURLがリンクが正常に生成されない @ 2014/5/1 14:06
tksy 様

こんにちは。
2点に分けて説明させていただきます。

●スマートフォン閲覧時にglobal_menu.phpの変更が反映されない件
------------------------------------------------------

こちらはテンプレートファイルの優先順位の仕様ですね。

$this->BcBaser->elment('global_menu.php')


としてエレメントを読み込むと、baserCMSは下記の順でテンプレートを検索します。

▼クライアントがPCの場合
1.テーマのElementsディレクトリ以下の該当ファイル
app/webroot/theme/bootstrap_baser/Elements/global_menu.php

2.baserコアの該当ファイル
lib/Baser/Baser/View/Elements/global_menu.php

▼スマートフォンの場合
1.テーマのElementsディレクトリにあるsmartphoneディレクトリ以下の該当ファイル
app/webroot/theme/bootstrap_baser/Elements/smartphone/global_menu.php

2.baserコアのスマートフォン版の該当ファイル
lib/Baser/Baser/View/Elements/smartphone/global_menu.php

このため、PC版に用意したglobal_menu.phpは利用されないようになっています。
(スマートフォン版が見つからなければPC版も探してほしいとは思いますが)

参考)ファイル読み込みの優先順位
http://basercms.net/manuals/3/programmers/3.html


▼解決策
テーマディレクトリにスマートフォン用のglobal_menu.phpを用意します。
app/webroot/theme/bootstrap_baser/Elements/smartphone/global_menu.php

PC版と同じものを使いたければ、単純にファイルをコピーしてもいいですし、下記のようにPC版のファイルをインクルードする形でも構いません
<?php
/**
 * スマートフォン版グローバルメニュー
 *
 */
include(dirname(__FILE__) . '/../global_menu.php');
?>



●外部サイトのURLの頭にprefixがついてしまう件
---------------------------------------------------------
再現を確認しました。
根本的には、baserコアのBcBaserヘルパーのlinkメソッドにおける、外部URLの取り扱いを改善すべきと思います。
また、PC版トップのURLの扱いがテンプレートに漏れ出しているのもあまり好ましくないですね。

ただ修正するとしても次のバージョンになるので、
暫定の解決策としてはテーマのほうで手直しするしかなさそうですね。

29行目〜36行目付近
					<?php if(!Configure::read('BcRequest.agent') && $this->base == '/index.php' && $globalMenu['Menu']['link'] == '/'): ?>
	<?php /* PC版トップページ */ ?>
	<li<?php echo $class ?>><?php echo str_replace('/index.php','',$this->BcBaser->link($globalMenu['Menu']['name'],$globalMenu['Menu']['link'])) ?></li>
					<?php else: ?>
	<li<?php echo $class ?>>
	<?php $this->BcBaser->link($globalMenu['Menu']['name'], $prefix.$globalMenu['Menu']['link']) ?>
	</li>
					<?php endif ?>


こちらを書き換えて外部URLを処理する分岐を追加します。
  • タグの記述をDRYにするためにifブロックの外に出しています。
    					<li<?php echo $class ?>>
    					<?php if(preg_match('|^(https?:)?//|', $globalMenu['Menu']['link'])): ?>
    						<?php /* 外部URL */ ?>
    						<?php echo $this->BcHtml->link($globalMenu['Menu']['name'], $globalMenu['Menu']['link'], array('target' => '_blank')) ?>
    					<?php elseif(!Configure::read('BcRequest.agent') && $this->base == '/index.php' && $globalMenu['Menu']['link'] == '/'): ?>
    						<?php /* PC版トップページ */ ?>
    						<?php echo str_replace('/index.php','',$this->BcBaser->link($globalMenu['Menu']['name'],$globalMenu['Menu']['link'])) ?>
    					<?php else: ?>
    						<?php $this->BcBaser->link($globalMenu['Menu']['name'], $prefix.$globalMenu['Menu']['link']) ?>
    					<?php endif ?>
    					</li>
  • Twitter: @n_1215

    tksy > Re: グローバルメニューに外部URLを設定すると、スマートフォンサイトでURLがリンクが正常に生成されない @ 2014/5/1 16:11
    n1215様

    回答ありがとうございました。
    リンクの不正状態は解決されました!
    たしかに、・・・Elements/smartphone/global_menu.php が存在していなかったため、コアのglobal_menu.phpが使用されていました。
    ログイン
    ユーザー名:
    パスワード:


      新規登録 / パスワード紛失

    検索

    facebook
    フォーラムで悩みが解決した場合など、よかったら「いいね!」をポチっとクリックしてください!質問の回答者や開発者の励みになります

    フォーラムガイド


    関連リンク

    オンライン状況
    9 人のユーザが現在オンラインです。 (8 人のユーザが フォーラム を参照しています。)

    登録ユーザ: 0
    ゲスト: 9