HtmlTemplateFramework
[ class tree: HtmlTemplateFramework ] [ index: HtmlTemplateFramework ] [ all elements ]

Source for file htf_frm_frameconfig.phl

Documentation is available at htf_frm_frameconfig.phl

  1. <?php
  2. /**
  3.  * htf_frm_frameconfigクラス
  4.  *
  5.  * 作成するhtfフレーム全体の情報を管理するクラス
  6.  *
  7.  * @package HtmlTemplateFramework
  8.  * @subpackage frame
  9.  * @access  public
  10.  * @author    Yamauchi Shogo <htf@as-prj.com>
  11.  * @version $Id: htf_frm_htmlconfig.phl ,v 1.0 $
  12.  ***/
  13. require_once("htf_com_initialize.inc");        //共通初期処理
  14. require_once("htf_tag_element.phl");        //タグオブジェクト
  15. require_once("htf_frm_getcss.phl");            //CSS取得
  16. require_once("htf_frm_headconfig.phl");        //ヘッダ
  17. require_once("htf_frm_bodyconfig.phl");        //ボディ
  18.  
  19. /**
  20.  * 作成するhtfフレーム全体の情報を保持するクラス。
  21.  *
  22.  * コンストラクタに引数で渡されるframeconfig要素のDOMノードを参照し、
  23.  * htfフレーム全体の情報を保持します。<br>
  24.  * <br>
  25.  * 保持する内容は、htfフレーム定義xmlファイルのルート要素(frameconfig)に記述される
  26.  * 属性と、配下の子要素の情報(headconfig要素/bodyconfig要素)の内容です。
  27.  * headconfig要素・bodyconfig要素が存在しない場合には、初期値で各保有インスタンスを生成します。<br>
  28.  * <br>
  29.  * また、HTMLタグを構成する際には、子要素のCSS記述のheadタグへの設定や、
  30.  * CSS設定ファイルをサーチして、使用するCSSファイルの決定・headタグへの設定も行います。
  31.  * 
  32.  * @access  public
  33.  * @author    Yamauchi Shogo <htf@as-prj.com>
  34.  ***/
  35.    /**
  36.     * 言語
  37.     * 
  38.     * コンストラクタで渡されたframeconfig要素のlang属性に指定された値を保有します。
  39.     * 初期値は'ja'で、htmlタグのlang属性として設定されます。
  40.     * 
  41.     * @access public
  42.     * @var string 
  43.     */
  44.     var $lang;
  45.    /**
  46.     * 文書型
  47.     * 
  48.     * コンストラクタでframeconfig要素のdoctype属性に指定された値を保有します。
  49.     * 初期値は'HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"'で、文書のDOCTYPE宣言に使用されます。
  50.     * 
  51.     * @access public
  52.     * @var string 
  53.     */
  54.     var $doctype;
  55.    /**
  56.     * CSSのOS/ブラウザ判別属性
  57.     * 
  58.     * コンストラクタでframeconfig要素のbrowser_distinct_css属性に指定された値を保有します。
  59.     * 初期値は'off'で、この場合はOS/ブラウザ判別によるCSSの判別は行いません。判別する場合には、
  60.     * 'on'を設定します。
  61.     * 
  62.     * @access public
  63.     * @var string 
  64.     */
  65.     var $browser_distinct_css;
  66.    /**
  67.     * headconfig
  68.     * 
  69.     * frameconfig要素の子要素のheadconfig要素の内容を保持します。
  70.     * 
  71.     * @access public
  72.     * @var htf_frm_headconfig 
  73.     */
  74.     var $headconfig;
  75.    /**
  76.     * bodyconfig
  77.     * 
  78.     * frameconfig要素の子要素のbodyconfig要素の内容を保持します。
  79.     * 
  80.     * @access public
  81.     * @var htf_frm_bodyconfig 
  82.     */
  83.     var $bodyconfig;
  84.    /**
  85.     * htfフレームで管理するイメージ格納パス(デフォルトは空文字)。
  86.     * ex)/htf/sample/images
  87.     * @access public
  88.     * @var string 
  89.     */
  90.     var $imagepath;
  91.    /**
  92.     * htfフレームで管理するCSSファイル格納パス(デフォルトは空文字)。
  93.     * ex)/htf/sample/css
  94.     * @access public
  95.     * @var string 
  96.     */
  97.     var $csspath;
  98.    /**
  99.     * htfフレームで管理するJavaScriptファイル格納パス(デフォルトは空文字)。
  100.     * ex)/htf/sample/js
  101.     * @access public
  102.     * @var string 
  103.     */
  104.     var $jspath;
  105.    /**
  106.     * htfフレームで管理するルートパス(デフォルトは空文字)。
  107.     * ex)/htf/sample
  108.     * @access public
  109.     * @var string 
  110.     */
  111.     var $rootpath;
  112.  
  113.     /**
  114.      * 引数のDOMノードから、htf_frm_frameconfigクラスのインスタンスを生成します。
  115.      * 各属性値や子要素が存在しない場合には、初期値で生成します。
  116.      *
  117.      * @param     object    $objnode  frameconfigのDOMノード
  118.      * @return    void 
  119.      ***/
  120.     function htf_frm_frameconfig($objnode=NULL{
  121.         //属性配列・ノード配列取得
  122.         if (!is_null($objnode)) {
  123.             $arrattr $objnode->attributes();
  124.             $arrnodes $objnode->child_nodes();
  125.         else {
  126.             $arrattr array();
  127.             $arrnodes array();
  128.         }
  129.         //プロパティ初期化
  130.         $this->initialize_property();
  131.         //各プロパティ上書き
  132.         $this->override_property($arrattr);
  133.         //bodyconfig配下の子ノード取得
  134.         $this->get_childnodes($arrnodes);
  135.         //pageconfigが生成されない場合は初期値で生成
  136.         $this->initialize_nullnodes();
  137.  
  138.     }
  139.  
  140.     /**
  141.      * htfフレーム全体のHTMLタグを文字列として取得します。
  142.      *
  143.      * ただし、配下のページエリアのタイプがinclude指定の場合には、その部分はincludeを記述したphpスクリプト文字列となります。
  144.      * 
  145.      * @access     public
  146.      * @return    string 
  147.      ***/
  148.     function get_htmltag({
  149.         //htmlタグ作成
  150.         $htmltag $this->make_htmltag();
  151.         //DOCTYPE設定
  152.         if (htf_is_existsval($this->doctype)) {
  153.             $strret htf_add_cr('<!DOCTYPE '.$this->doctype.'>');
  154.         }
  155.         $strret.= $htmltag->get_htmltag();
  156.  
  157.         return $strret;
  158.     }
  159.  
  160.     /**
  161.      * htfフレーム全体のHTMLタグを出力します。
  162.      *
  163.      * @access     public
  164.      * @return    void 
  165.      ***/
  166.     function print_htmltag({
  167.         //htmlタグ作成
  168.         $htmltag $this->make_htmltag();
  169.         //DOCTYPE設定
  170.         if (htf_is_existsval($this->doctype)) {
  171.             print(htf_add_cr('<!DOCTYPE '.$this->doctype.'>'));
  172.         }
  173.         $htmltag->print_htmltag();
  174.  
  175.         return;
  176.     }
  177.  
  178.     /**
  179.      * 出力するタグオブジェクトを生成します。
  180.      *
  181.      * @access     private
  182.      * @return    htf_tag_element 
  183.      ***/
  184.     function make_htmltag({
  185.         //htmlオブジェクト生成
  186.         $htmlobj new htf_tag_element("html"TRUEHTF_ITEMCASE_ELEMENT);
  187.         //CSS文字列取得&ヘッダ設定
  188.         $strcss $this->bodyconfig->get_cssformat();
  189.         $this->headconfig->cssstr.= $strcss;
  190.         //カスタムCSS取得&ヘッダ設定
  191.         $strcssfname $this->get_cssfname(HTF_CSS_FNAME);
  192.         $this->headconfig->cssfilename = $strcssfname;
  193.  
  194.         //lang設定
  195.         if (htf_is_existsval($this->lang)) {
  196.             $htmlobj->add_attribute('lang' ,$this->langHTF_ITEMCASE_ATTRIUTE);
  197.         }
  198.         //head設定
  199.         $ret $htmlobj->add_content($this->headconfig);
  200.         //body設定
  201.         $htmlobj->add_content($this->bodyconfig);
  202.         
  203.         return $htmlobj;
  204.     }
  205.     
  206.     /**
  207.      * 各種プロパティを初期化します。
  208.      *
  209.      * @access     private
  210.      * @return    void 
  211.      ***/
  212.     function initialize_property({
  213.         //プロパティ初期化
  214.         $this->lang = HTF_LANG_JA;
  215.         $this->doctype = HTF_HTML401TRANSITIONAL;
  216.         $this->browser_distinct_css = HTF_CONF_OFF;
  217.         $this->headconfig = NULL;
  218.         $this->bodyconfig = NULL;
  219.         $this->imagepath = "";
  220.         $this->csspath = "";
  221.         $this->jspath = "";
  222.         $this->rootpath = "";
  223.     }
  224.     
  225.     /**
  226.      * 各種プロパティを引数の属性内容によって上書きします。
  227.      *
  228.      * @param     array    $arrattr  属性情報(htf_tag_attribute)配列
  229.      * @access     private
  230.      * @return    void 
  231.      ***/
  232.     function override_property($arrattr{
  233.         //各プロパティ取得
  234.         for ($i=$i<count($arrattr$i++{
  235.             if (htf_comp_xmlattrname(HTF_ATTR_HTMLCONFIG_DOCTYPE$arrattr[$i]->name)) {
  236.                 //doctype属性
  237.                 $this->doctype = htf_get_encoded_attr($arrattr[$i]->value);
  238.             else if (htf_comp_xmlattrname(HTF_ATTR_HTMLCONFIG_LANG$arrattr[$i]->name)) {
  239.                 //lang属性
  240.                 $this->lang = htf_get_encoded_attr($arrattr[$i]->value);
  241.             else if (htf_comp_xmlattrname(HTF_ATTR_HTMLCONFIG_BROWSER_DISTINCT_CSS$arrattr[$i]->name)) {
  242.                 //browser_distinct_css属性
  243.                 $this->browser_distinct_css = htf_get_encoded_attr($arrattr[$i]->value);
  244.             else if (htf_comp_xmlattrname(HTF_ATTR_HTMLCONFIG_IMAGEPATH$arrattr[$i]->name)) {
  245.                 //imagepath属性
  246.                 $this->imagepath = htf_get_encoded_attr($arrattr[$i]->value);
  247.             else if (htf_comp_xmlattrname(HTF_ATTR_HTMLCONFIG_CSSPATH$arrattr[$i]->name)) {
  248.                 //csspath属性
  249.                 $this->csspath = htf_get_encoded_attr($arrattr[$i]->value);
  250.             else if (htf_comp_xmlattrname(HTF_ATTR_HTMLCONFIG_JSPATH$arrattr[$i]->name)) {
  251.                 //jspath属性
  252.                 $this->jspath = htf_get_encoded_attr($arrattr[$i]->value);
  253.             else if (htf_comp_xmlattrname(HTF_ATTR_HTMLCONFIG_ROOTPATH$arrattr[$i]->name)) {
  254.                 //rootpath属性
  255.                 $this->rootpath = htf_get_encoded_attr($arrattr[$i]->value);
  256.             }
  257.         }
  258.         return;
  259.     }
  260.  
  261.     /**
  262.      * 引数のノード情報から子要素オブジェクトを生成する。
  263.      *
  264.      * @param     array    $arrcnode  子ノード配列配列
  265.      * @access     private
  266.      * @return    void 
  267.      ***/
  268.     function get_childnodes($arrcnode{
  269.         for ($i=0$i<count($arrcnode$i++{
  270.             if ($arrcnode[$i]->node_type(!= XML_TEXT_NODE{
  271.                 if (htf_comp_xmlelementname($arrcnode[$i]->node_name(),HTF_CONF_XML_HEADCONFIG)) {
  272.                     //headconfig
  273.                     $this->headconfig = new htf_frm_headconfig($arrcnode[$i]);
  274.                 else if (htf_comp_xmlelementname($arrcnode[$i]->node_name(),HTF_CONF_XML_BODYCONFIG)) {
  275.                     //bodyconfig
  276.                     $this->bodyconfig = new htf_frm_bodyconfig($arrcnode[$i]);
  277.                 }
  278.             }
  279.         }
  280.         return;
  281.     }
  282.  
  283.     /**
  284.      * 存在しない要素について、子要素を初期値で生成する。
  285.      *
  286.      * @access     private
  287.      * @return    void 
  288.      ***/
  289.     function initialize_nullnodes({
  290.         if (is_null($this->headconfig)) {
  291.             $this->headconfig = new htf_frm_headconfig();
  292.         }
  293.         if (is_null($this->bodyconfig)) {
  294.             $this->bodyconfig = new htf_frm_bodyconfig();
  295.         }
  296.         return;
  297.     }
  298.  
  299.     /**
  300.      * 引数のCSS定義xmlファイルをサーチして、使用するCSSファイルを返します。
  301.      *
  302.      * @param     string   $strxml  CSS定義xmlファイル名(cssdef.xml)
  303.      * @access     private
  304.      * @return    void 
  305.      ***/
  306.     function get_cssfname($strxml{
  307.         //css定義xmlファイルパス取得
  308.         //カレントから上位ディレクトリをサーチ
  309.         $strfpath htf_get_filepath(realpath('.')$strxml);
  310.         if (!htf_is_existsval($strfpath)) {
  311.             //見つからなかったらインクルードパスをサーチ
  312.             $strfpath htf_get_fileincludepath($strxml);
  313.         }
  314.         //css定義xmlファイルが見当たらない場合は空文字を返して終了
  315.         if (!htf_is_existsval($strfpath)) {
  316.             return "";
  317.         }
  318.         //使用するCSSファイルを判別
  319.         $objgetcss new htf_frm_getcss($strfpath$_SERVER['HTTP_USER_AGENT']$this->browser_distinct_css);
  320.         $strcsspath $objgetcss->cssname;
  321.  
  322.         return $strcsspath;
  323.         
  324.     }
  325.  
  326.  
  327.     /**
  328.      * 配下の子ノードに記載されているhtfフレーム置換タグを置換します。
  329.      * 
  330.      * @access     public
  331.      * @return    void 
  332.      ***/
  333.     function replace_defintag_childnodes()
  334.     {
  335.         //bodyconfig->bgimage
  336.         if (!is_null($his->bodyconfig)) {
  337.             $this->bodyconfig->bgimage = $this->replace_definetag($this->bodyconfig->bgimage);
  338.             //bodyconfig->pageconfig->bgimage
  339.             if (!is_null($this->bodyconfig->pageconfig)) {
  340.                 $this->bodyconfig->pageconfig->bgimage $this->replace_definetag($this->bodyconfig->pageconfig->bgimage);
  341.                 //bodyconfig->pageconfig->pageheader->bgimage
  342.                 if (is_null($this->bodyconfig->pageconfig->pageheader)) {
  343.                     $this->bodyconfig->pageconfig->pageheader->bgimage $this->replace_definetag($this->bodyconfig->pageconfig->pageheader->bgimage);
  344.                 }
  345.                 //bodyconfig->pageconfig->indexbar->bgimage
  346.                 if (is_null($this->bodyconfig->pageconfig->indexbar)) {
  347.                     $this->bodyconfig->pageconfig->indexbar->bgimage $this->replace_definetag($this->bodyconfig->pageconfig->indexbar->bgimage);
  348.                 }
  349.                 //bodyconfig->pageconfig->leftarea->bgimage
  350.                 if (is_null($this->bodyconfig->pageconfig->leftarea)) {
  351.                     $this->bodyconfig->pageconfig->leftarea->bgimage $this->replace_definetag($this->bodyconfig->pageconfig->leftarea->bgimage);
  352.                 }
  353.                 //bodyconfig->pageconfig->contentarea->bgimage
  354.                 if (is_null($this->bodyconfig->pageconfig->contentarea)) {
  355.                     $this->bodyconfig->pageconfig->contentarea->bgimage $this->replace_definetag($this->bodyconfig->pageconfig->contentarea->bgimage);
  356.                 }
  357.                 //bodyconfig->pageconfig->rightarea->bgimage
  358.                 if (is_null($this->bodyconfig->pageconfig->rightarea)) {
  359.                     $this->bodyconfig->pageconfig->rightarea->bgimage $this->replace_definetag($this->bodyconfig->pageconfig->rightarea->bgimage);
  360.                 }
  361.                 //bodyconfig->pageconfig->pagefooter->bgimage
  362.                 if (is_null($this->bodyconfig->pageconfig->pagefooter)) {
  363.                     $this->bodyconfig->pageconfig->pagefooter->bgimage $this->replace_definetag($this->bodyconfig->pageconfig->pagefooter->bgimage);
  364.                 }
  365.             }
  366.             
  367.         }
  368.         //headconfig->cssfilename
  369.         if (!is_null($this->headconfig)) {
  370.             $this->headconfig->cssfilename = $this->replace_definetag($this->headconfig->cssfilename);
  371.         }
  372.         
  373.         return;
  374.     }
  375.         
  376.     /**
  377.      * htfフレームで設定された各種パス情報(イメージパス・CSSパス・JavaScriptパス・ルートパス)
  378.      * で引数内の置換タグを変換します。置換タグ定義は次の通り。
  379.      * %FRAME_IMAGEPATH%→イメージパス %FRAME_CSSPATH%→CSSパス %FRAME_JSPATH%→JavaScriptパス %FRAME_ROOTPATH%→ルートパス
  380.      * 
  381.      * @access     public
  382.      * @param     string    $srcstr 
  383.      * @return    string 
  384.      ***/
  385.     function replace_definetag($srcstr{
  386.         $repstr1st str_replace(HTF_REPLACE_FRAME_IMAGEPATH$this->imagepath$srcstr);
  387.         $repstr2nd str_replace(HTF_REPLACE_FRAME_CSSPATH$this->csspath$repstr1st);
  388.         $repstr3rd str_replace(HTF_REPLACE_FRAME_JSPATH$this->jspath$repstr2nd);
  389.         $repstr4th str_replace(HTF_REPLACE_FRAME_ROOTPATH$this->rootpath$repstr3rd);
  390.         
  391.         return $repstr4th;
  392.     }    
  393. }
  394.  
  395. ?>

Documentation generated on Tue, 19 Sep 2006 06:20:52 +0900 by phpDocumentor 1.3.0