Bug(バグ) #2984
完了スマホ版において,PC版のスキンプラグインを変更するとスマホ版でスキンプラグインのCSSが読み込まれてしまう
0%
説明
現象¶
スマホ版において,PC版のデフォルトスキンプラグイン(opSkinBasicPlugin)から別のスキンプラグイン(opSkinBootstrapPluign等)に変更すると
変更したスキンプラグインのCSSがスマホ版においても読み込まれてしまう
発生バージョン: OpenPNE 3.8beta1, OpenPNE3.8RC1
原因¶
理由としては,スマホ版テンプレートに以下のようなコードの記述がなされていて,
opSkinBasicPluginに依存するような書き方がされているからである.
- apps/pc_frontend/templates/smtLayoutHome.php
1. <?php use_helper('Javascript') ?> 2. <?php $sf_response->removeStylesheet('/opSkinBasicPlugin/css/main.css') ?> 3.
修正内容¶
opSkinBasicPlugin以外におけるスキンプラグインのmain.cssを,スマホ版でロードされないようにする
Yuya Watanabe さんが12年以上前に更新
変更対象ファイル群.
apps/pc_frontend/templates/smtLayoutMember.php 2:<?php $sf_response->removeStylesheet('/opSkinBasicPlugin/css/main.css') ?> apps/pc_frontend/templates/smtLayoutHome.php 2:<?php $sf_response->removeStylesheet('/opSkinBasicPlugin/css/main.css') ?> apps/pc_frontend/templates/smtLayoutSns.php 2:<?php $sf_response->removeStylesheet('/opSkinBasicPlugin/css/main.css') ?> apps/pc_frontend/templates/smtLayoutGroup.php 2:<?php $sf_response->removeStylesheet('/opSkinBasicPlugin/css/main.css') ?>
Yuya Watanabe さんが12年以上前に更新
修正方針¶
response に addStylesheet() している部分は view.yml のキャッシュ部分であるため直接追加部分のソースの変更を行うことはできない.
よって修正方針としては以下の3つが考えられる.
- ビュー部分で不必要な css や js をすべて $response->removeStylesheet() や $response->removeJavascript() などで使用しないようにする
- include_stylesheet() や include_javasript() のスマートフォンを対象とした処理を追加して不必要な css や js を読み込まないようにする
- view.yml のキャッシュ生成時に不必要な css や js を読み込まないようにする.
1 の方法だと,各ビューで同じような処理を追加する必要があり,そうでなくても不必要なファイルを読み込んでから削除するという処理が発生する無駄があるので取りうるべきではない.
2 の方法も無難ではあるが,Symfony の作法とは別に OpenPNE での作法となるため,カスタマイズなどでスマートフォン対応をする際に実装ミスの原因となる可能性がある.また,PC版と共通のファイルを読み込みたい場合などであっても,PC版とスマートフォン版でそれぞれ読み込む処理を追加しなければならない.これらはすべてソースコードで設定を行わなければならないため,PC版のように view.yml から設定を行うことができない.
3 の方法が最も適切であると思うが,PC版と同じアプリケーションで実装されているためキャッシュがPC版と混在してしまう.これを避けるため,2のようにスマートフォンで必要な css や js を得る手段が必要であると考えられる.
2 または 3 の方法を選択する場合にはいずれにせよスマートフォン用のファイルを得る手段が必要なため,今回は実装が簡単な 2 の方法を選択することにする. 3 の方法は今後の改善要求として 別チケットで作成しておくこととする.( #3043 )
その他¶
本チケットではPC版のスキンプラグインが読み込まれてしまうという問題であるが, 管理画面で設定したカスタマイズCSSもPC版用として設定されたものが適用されてしまう.この問題については別チケットで対応する.( #3040 )
Yuya Watanabe さんが12年以上前に更新
- ステータス を Accepted(着手) から Pending Review(レビュー待ち) に変更
- 進捗率 を 0 から 50 に変更
更新履歴 f479f7cd9b065f2f718d3c5bf6b534580cad48e8 で適用されました。
Rimpei Ogawa さんが12年以上前に更新
- ステータス を Pending Review(レビュー待ち) から Rejected(差し戻し) に変更
sfWebResponse のいくつかのメソッドで stylesheets/javascripts プロパティは対応しているが、 smtStylesheets/smtJavascripts プロパティは対応できていないものがあります。
- initialize() で smt* のプロパティが初期化されない(array_combine() 使っているところ)
- copyProperties() / merge() で smt* のプロパティが反映されない
- serialize() / unserialize() で smt* のプロパティが保存・復元されない
また、使用されていないプロパティ displayMember/displayCommunity が残っていますが、これについては別チケットで扱うということでこのチケットでのレビュー対象とはしませんでした。
Yuya Watanabe さんが12年以上前に更新
- ステータス を Rejected(差し戻し) から Accepted(着手) に変更
- 進捗率 を 50 から 0 に変更
Yuya Watanabe さんが12年以上前に更新
「使用されていないプロパティ displayMember/displayCommunity が残っていますが、これについては別チケットで扱う」としていましたが,対象チケットがなく,影響範囲もないということで本チケットで同時に修正を行います.
Yuya Watanabe さんが12年以上前に更新
- ステータス を Accepted(着手) から Pending Review(レビュー待ち) に変更
- 進捗率 を 0 から 50 に変更
更新履歴 91b09bbae018ed73bdc621504d87c6acf1d30300 で適用されました。
Rimpei Ogawa さんが12年以上前に更新
- ステータス を Pending Review(レビュー待ち) から Pending Testing(テスト待ち) に変更
- 進捗率 を 50 から 70 に変更