Snapshot原田

備忘録

いまさら聞けないフレームワークの追い方ーphp

フレームワークの追い方

もう何からやってよいのか、皆目検討がつかない。。 そんなときの私なりの泥臭いやりかたです。

まずはデータベースから追ってみる方法

f:id:machikoikenouchi:20170414103749j:plain

やりたいこと:このページのフィルタ機能の フィルタ名のデータの流れを追って、改造したい。

f:id:machikoikenouchi:20170413164003j:plain

cvid viewname setdefault setmetrics entitiytype status useid
49 All 1 0 Accounts 0 1
68 顧客名 0 0 Accounts 1 1
70 顧客名称表示 0 0 Accounts 1 1
50 臨床 顧客一覧 0 0 Accounts 3 1
52 動物 顧客一覧 0 0 Accounts 3 1

1.A5M2でデータベースのテーブルを見ます。
今回はviewnameというカラム名を追って行きます。

2.今度はNetBeans起動。
CTRL+SHIFT+F でプロジェクト内検索をかけることができます。 f:id:machikoikenouchi:20170413164539j:plain

3.viewnameで検索をかけます。

f:id:machikoikenouchi:20170413164644j:plain

4.わーーーーっと検索結果が表示されました。
いくつかのphpファイルを見て、宣言されてるところを 探して以下来ます。

f:id:machikoikenouchi:20170413164848p:plain

5.ありました。 ListViewSession.phpです。

<?php
class ListViewSession {
    var $module = null;
    var $viewname = null;
    var $start = null;
    var $sorder = null;
    var $sortby = null;
    var $page_view = null;
//以下複数のfunctionがありましたが省略しています

?>
  • 全ソースを見たい人はこちら。
    http://~~

6.ここで$viewnameが初めて宣言されてきました。 さてこの関数はどのように使用されていくのでしょう。

<?php  // hasViewChanged()メソッド

function hasViewChanged($currentModule) {
  if(empty($_SESSION['lvs'][$currentModule]['viewname']))
    return true;
if(empty($_REQUEST['viewname'])) return false;

if($_REQUEST['viewname'] != $_SESSION['lvs'][$currentModule]['viewname']) 
  return true;
  return false;
    }
?>
<?php //setCurrentView()メソッド

    public static function setCurrentView($module, $viewId) {
        $_SESSION['lvs'][$module]['viewname'] = $viewId;
    }
?>
<?php //getCurrentView()メソッド
public static function getCurrentView($module) {
    if(!empty($_SESSION['lvs'][$module]['viewname'])) {
        return $_SESSION['lvs'][$module]['viewname'];
    }
        }
?>

7.この3つのメソッドが見つかりました。
1つ目以外はゲッターとセッターということがなんとなくわかると思います。

Viewから追って行く方法

f:id:machikoikenouchi:20170413171737j:plain

1.この原田フィルターを追って行きます。 まずはブラウザでお目当てのページ (localhost/プロジェクトフォルダ)を見てください。

f:id:machikoikenouchi:20170413171957j:plain

2.ブラウザでF12キーでデベロッパーツールを開きます。
カーソルを Select an element in the page to inspect itモードにして
対象に触れるとソース部分が選択されます。
※知らなかっf:id:machikoikenouchi:20170413174252j:plainたんですがこれSEPIモードっていうんですね・・

f:id:machikoikenouchi:20170413173129j:plain

3.この<span>~</span>が怪しそうです。
 当然、きれいなHTMLになっていますので、変数名などは見れません。
 なので、クラス名などから芋づる式に追って行きます。

<span>
<img class="filterImage" src="layouts/vlayout/skins/images/filter.png"
style="height: 13px; margin-right: 2px; vertical-align: middle;"
data-pin-nopin="true">原田テストフィルター
</span>

4.生成されたHTMLこのようになっています。 class="filterImage"とあります。

すごーい!このアイコンぽいのを使っているphpファイルを見つければいいんだね!! ・・・と当初は思っておりました。

5.さっきと同じようにNetBeansでCTRL+SHIFT+F class="filterImage"でプロジェクト検索かけます。

f:id:machikoikenouchi:20170413174252j:plain

<span class="customFilterMainSpan row-fluid">
 {if $CUSTOM_VIEWS|@count gt 0}
  <select id="recordsFilter" class="span12" data-placeholder="{vtranslate('LBL_SELECT_TO_LOAD_LIST', $RELATED_MODULE_NAME)}">
 <option></option>
 {foreach key=GROUP_LABEL item=GROUP_CUSTOM_VIEWS from=$CUSTOM_VIEWS}
 <optgroup label=' {if $GROUP_LABEL eq 'Mine'} &nbsp; {else if} {vtranslate($GROUP_LABEL)} {/if}' >
  
  {foreach item="CUSTOM_VIEW" from=$GROUP_CUSTOM_VIEWS}
  
   <option id="filterOptionId_{$CUSTOM_VIEW->get('cvid')}" value="{$CUSTOM_VIEW->get('cvid')}" class="filterOptionId_{$CUSTOM_VIEW->get('cvid')}" data-id="{$CUSTOM_VIEW->get('cvid')}">
  
  {if $CUSTOM_VIEW->get('viewname') eq 'All'}{vtranslate($CUSTOM_VIEW->get('viewname'), $RELATED_MODULE_NAME)}
  
  {vtranslate($RELATED_MODULE_NAME, $RELATED_MODULE_NAME)}{else}{vtranslate($CUSTOM_VIEW->get('viewname'), $RELATED_MODULE_NAME)}
  
  {/if}
  
  {if $GROUP_LABEL neq 'Mine'}
    [ {$CUSTOM_VIEW->getOwnerName()} ]
    
   {/if}
   
  </option>
 {/foreach}
 </optgroup>
{/foreach}
</select>
 <img class="filterImage" src="{'filter.png'|vimage_path}" style="display:none;height:13px;margin-right:2px;vertical-align: middle;">
     {else}
     <input type="hidden" value="0" id="customFilter" />
     {/if}
</span>

6.このように謎しか生みませんでした。しかしあきらめたらそこで試合終了ですよね! 3.で貼り付けたコードと見比べてみます。 そこでなんとなくどの位置なのかわかったら、とりあえず画面になんかだして確認しちゃいましょう。

<img class="filterImage" src="{'filter.png'|vimage_path}" style="display:none;height:13px;margin-right:2px;vertical-align: middle;">
//このあとがなんとなくそれっぽいので、入れてみます。

はらだでございます!

伝家の宝刀var_dump()を使おう

さてここまできました。なんとなく勘でやっても無理なので、 var_dump()使って検証していきますよ。