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

Source for file htf_frm_pageconfig.phl

Documentation is available at htf_frm_pageconfig.phl

  1. <?php
  2. /**
  3.  * htf_frm_pageconfigクラス
  4.  *
  5.  * pageconfig情報を保持しページエリア全体を管理するクラス
  6.  *
  7.  * @package HtmlTemplateFramework
  8.  * @subpackage frame
  9.  * @access  public
  10.  * @author    Yamauchi Shogo <htf@as-prj.com>
  11.  * @version $Id: htf_frm_pageconfig.phl ,v 1.0 $
  12.  ***/
  13. require_once("htf_com_initialize.inc");        //共通初期処理
  14. require_once("htf_tag_table.phl");                //tableタグ生成クラス
  15. require_once("htf_frm_pageheader.phl");        //pageheader保有クラス
  16. require_once("htf_frm_indexbar.phl");        //indexbar保有クラス
  17. require_once("htf_frm_leftarea.phl");        //leftarea保有クラス
  18. require_once("htf_frm_rightarea.phl");        //rightarea保有クラス
  19. require_once("htf_frm_contentarea.phl");    //contentarea保有クラス
  20. require_once("htf_frm_pagefooter.phl");        //pagefooter保有クラス
  21.  
  22. /**
  23.  * pageconfig情報を保持しページエリア全体を管理するクラス
  24.  *
  25.  * コンストラクタに引数で渡されるpageconfig要素のDOMノードを参照し、
  26.  * pageconfig要素の属性情報・配下のページエリア情報を保持します。<br>
  27.  * 
  28.  * @access  public
  29.  * @author    Yamauchi Shogo <htf@as-prj.com>
  30.  ***/
  31.    /**
  32.     * align属性
  33.     * 
  34.     * tdタグでブロッキングされたページエリア全体での横位置を指定します。
  35.     * この値は、そのままブロッキングしたtdタグのalign属性となります。
  36.     * 'left','center','right'等を指定してください。
  37.     * 
  38.     * @access public
  39.     * @var string 
  40.     ***/
  41.     var $align;            //配置(横)
  42.       /**
  43.     * valign属性
  44.     * 
  45.     * tdタグでブロッキングされたページエリア全体の縦位置を指定します。
  46.     * この値は、そのままブロッキングしたtdタグのvalign属性となります。
  47.     * 
  48.     * @access public
  49.     * @var string 
  50.     ***/
  51.     var $valign;        //配置(縦)
  52.       /**
  53.     * width属性
  54.     * 
  55.     * ページエリア全体の幅を指定します。
  56.     * この値はCSSのwidthプロパティの値としてそのまま出力されます。
  57.     * CSSの記述方法に沿って指定してください。
  58.     * 
  59.     * @access public
  60.     * @var string 
  61.     */
  62.     var $width;            //幅
  63.       /**
  64.     * border属性
  65.     * 
  66.     * ページエリア全体の枠線の太さを指定します。
  67.     * この値はCSSのborder-widthプロパティの値としてそのまま出力されます。
  68.     * CSSの記述方法に沿って指定してください。
  69.     * 
  70.     * @access public
  71.     * @var string 
  72.     */
  73.     var $border;        //枠線
  74.       /**
  75.     * bordercolor属性
  76.     * 
  77.     * ページエリア全体の枠線の色を指定します。
  78.     * この値はCSSのborder-colorプロパティの値としてそのまま出力されます。
  79.     * CSSの記述方法に沿って指定してください。
  80.     * 
  81.     * @access public
  82.     * @var string 
  83.     */
  84.     var $bordercolor;    //枠線色
  85.       /**
  86.     * bgcolor属性
  87.     * 
  88.     * ページエリア全体の背景の色を指定します。
  89.     * この値はCSSのbackground-colorプロパティの値としてそのまま出力されます。
  90.     * CSSの記述方法に沿って指定してください。
  91.     * 
  92.     * @access public
  93.     * @var string 
  94.     */
  95.     var $bgcolor;        //背景色
  96.       /**
  97.     * bgimage属性
  98.     * 
  99.     * ページエリア全体の背景イメージを指定します。
  100.     * この値はCSSのbackground-colorプロパティの値として出力されます。
  101.     * ただし、CSS記述の際に必要な url() の記述は必要ありません。
  102.     * また、DOMノードからの生成時、このプロパティ内容にHTFフレームの置換タグがあった場合には、置換されて設定されます。
  103.     * 
  104.     * @access public
  105.     * @var string 
  106.     */
  107.     var $bgimage;        //背景イメージ
  108.       /**
  109.     * fontcolor属性
  110.     * 
  111.     * ページエリア全体の文字色を指定します。
  112.     * この値はCSSのcolorプロパティの値として出力されます。
  113.     * CSSの記述方法に沿って指定してください。
  114.     * 
  115.     * @access public
  116.     * @var string 
  117.     */
  118.     var $fontcolor;        //フォントの色
  119.       /**
  120.     * linkcolor属性
  121.     * 
  122.     * ページエリア全体のリンクの文字色を指定します。
  123.     * この値はCSSのcolorプロパティの値として出力されます。
  124.     * CSSの記述方法に沿って指定してください。
  125.     * 
  126.     * @access public
  127.     * @var string 
  128.     */
  129.     var $linkcolor;        //リンクのフォント色
  130.       /**
  131.     * visitedcolor属性
  132.     * 
  133.     * ページエリア全体の既に見たリンクの文字色を指定します。
  134.     * この値はCSSのcolorプロパティの値として出力されます。
  135.     * CSSの記述方法に沿って指定してください。
  136.     * 
  137.     * @access public
  138.     * @var string 
  139.     */
  140.     var $visitedcolor;    //リンクの訪問済フォント色
  141.       /**
  142.     * activecolor属性
  143.     * 
  144.     * ページエリア全体のクリック時リンクの文字色を指定します。
  145.     * この値はCSSのcolorプロパティの値として出力されます。
  146.     * CSSの記述方法に沿って指定してください。
  147.     * 
  148.     * @access public
  149.     * @var string 
  150.     */
  151.     var $activecolor;    //リンクのクリック時フォント色
  152.       /**
  153.     * hovercolor属性
  154.     * 
  155.     * ページエリア全体のカーソルが乗った時のリンク文字色を指定します。
  156.     * この値はCSSのcolorプロパティの値として出力されます。
  157.     * CSSの記述方法に沿って指定してください。
  158.     * 
  159.     * @access public
  160.     * @var string 
  161.     */
  162.     var $hovercolor;    //リンクのマウスオーバ時フォント色
  163.       /**
  164.     * use_pageheader属性
  165.     * 
  166.     * ページヘッダを出力対象とするかどうかを定義します。設定可能な値は以下です。<br>
  167.     * 'on'→出力する<br>
  168.     * 'off'→出力しない(デフォルト)<br>
  169.     * 
  170.     * @access public
  171.     * @var string 
  172.     */
  173.     var $use_pageheader;    //ページヘッダon/off属性
  174.       /**
  175.     * use_indexbar属性
  176.     * 
  177.     * インデックスバーを出力対象とするかどうかを定義します。設定可能な値は以下です。<br>
  178.     * 'on'→出力する<br>
  179.     * 'off'→出力しない(デフォルト)<br>
  180.     * 
  181.     * @access public
  182.     * @var string 
  183.     */
  184.     var $use_indexbar;        //インデックスバーon/off属性
  185.       /**
  186.     * use_leftarea属性
  187.     * 
  188.     * レフトエリアを出力対象とするかどうかを定義します。設定可能な値は以下です。<br>
  189.     * 'on'→出力する<br>
  190.     * 'off'→出力しない(デフォルト)<br>
  191.     * 
  192.     * @access public
  193.     * @var string 
  194.     */
  195.     var $use_leftarea;        //左エリアon/off属性
  196.       /**
  197.     * use_contentarea属性
  198.     * 
  199.     * コンテンツエリアを出力対象とするかどうかを定義します。設定可能な値は以下です。<br>
  200.     * 'on'→出力する(デフォルト)<br>
  201.     * 'off'→出力しない<br>
  202.     * <br>
  203.     * ただし、use_contentarea属性を'off'に設定した場合、正しくタグが出力されない場合があります。<br>
  204.     * 
  205.     * @access public
  206.     * @var string 
  207.     */
  208.     var $use_contentarea;    //コンテンツエリアon/off属性
  209.       /**
  210.     * use_rightarea属性
  211.     * 
  212.     * ライトエリアを出力対象とするかどうかを定義します。設定可能な値は以下です。<br>
  213.     * 'on'→出力する<br>
  214.     * 'off'→出力しない(デフォルト)<br>
  215.     * 
  216.     * @access public
  217.     * @var string 
  218.     */
  219.     var $use_rightarea;        //右エリアon/off属性
  220.       /**
  221.     * use_pagefooter属性
  222.     * 
  223.     * ページフッタを出力対象とするかどうかを定義します。設定可能な値は以下です。<br>
  224.     * 'on'→出力する<br>
  225.     * 'off'→出力しない(デフォルト)<br>
  226.     * 
  227.     * @access public
  228.     * @var string 
  229.     */
  230.     var $use_pagefooter;    //ページフッタon/off属性
  231.       /**
  232.     * overwrap_leftarea属性
  233.     * 
  234.     * レフトエリアとインデックスバーを両方出力可能とした場合、どちらがオーバーラップして出力するかを指定します。設定可能な値は以下です。<br>
  235.     * 'indexbar'→インデックスバーをオーバーラップする(デフォルト)<br>
  236.     * 'leftarea'→レフトエリアをオーバーラップする<br>
  237.     * 
  238.     * @access public
  239.     * @var string 
  240.     */
  241.     var $overwrap_leftarea;        //インデックスバーと左エリアのオーバーラップ指定
  242.     //var $overwrap_rightarea;    //インデックスバーと右エリアのオーバーラップ指定
  243.  
  244.     //CSSクラス名
  245.       /**
  246.     * 適用CSSクラス名
  247.     * 
  248.     * ページエリアのテーブルに適用されるCSSクラス名です。
  249.     * 
  250.     * @access public
  251.     * @var string 
  252.     */
  253.     var $classname;            //CSSクラス名
  254.  
  255.     //子ノード
  256.       /**
  257.     * ページヘッダ
  258.     * 
  259.     * ページヘッダの情報を格納します。
  260.     * 
  261.     * @access public
  262.     * @var htf_frm_pageheader 
  263.     */
  264.     var $pageheader;        //ページヘッダ保有クラス
  265.       /**
  266.     * インデックスバー
  267.     * 
  268.     * インデックスバーの情報を格納します。
  269.     * 
  270.     * @access public
  271.     * @var htf_frm_indexbar 
  272.     */
  273.     var $indexbar;            //インデックスバー保有クラス
  274.       /**
  275.     * レフトエリア
  276.     * 
  277.     * レフトエリアの情報を格納します。
  278.     * 
  279.     * @access public
  280.     * @var htf_frm_leftarea 
  281.     */
  282.     var $leftarea;            //左エリア保有クラス
  283.       /**
  284.     * ライトエリア
  285.     * 
  286.     * ライトエリアの情報を格納します。
  287.     * 
  288.     * @access public
  289.     * @var htf_frm_rightarea 
  290.     */
  291.     var $rightarea;            //右エリア保有クラス
  292.       /**
  293.     * コンテンツエリア
  294.     * 
  295.     * コンテンツエリアの情報を格納します。
  296.     * 
  297.     * @access public
  298.     * @var htf_frm_contentarea 
  299.     */
  300.     var $contentarea;        //コンテンツエリア保有クラス
  301.       /**
  302.     * ページフッタ
  303.     * 
  304.     * ページフッタの情報を格納します。
  305.     * 
  306.     * @access public
  307.     * @var htf_frm_pagefooter 
  308.     */
  309.     var $pagefooter;        //ページフッタ保有クラス
  310.     
  311.     //出力タグオブジェクト
  312.         var $tabletag;            //出力するタグ生成オブジェクト
  313.     
  314.         
  315.     /**
  316.      * 引数のDOMノードから、htf_frm_pageconfigクラスのインスタンスを生成します。
  317.      * 
  318.      * 引数のDOMノードに各属性値・子ノード(各ページエリア情報)が存在しない場合には、それぞれを初期値で生成します。
  319.      * 設定初期値はそれぞれ以下の通りです。<br>
  320.      * <br>
  321.      * 【属性値】
  322.      * align属性→空文字<br>
  323.      * valign属性→空文字<br>
  324.      * width属性→空文字<br>
  325.      * border属性→空文字<br>
  326.      * bordercolor属性→空文字<br>
  327.      * bgcolor属性→空文字<br>
  328.      * bgimage属性→空文字<br>
  329.      * fontcolor属性→空文字<br>
  330.      * linkcolor属性→空文字<br>
  331.      * visitedcolor属性→空文字<br>
  332.      * activecolor属性→空文字<br>
  333.      * hovercolor属性→空文字<br>
  334.      * use_pageheader属性→'off'(使用しない)<br>
  335.      * use_indexbar属性→'off'(使用しない)<br>
  336.      * use_leftarea属性→'off'(使用しない)<br>
  337.      * use_contentarea属性→'on'(使用する)<br>
  338.      * use_rightarea属性→'off'(使用しない)<br>
  339.      * use_pagefooter属性→'off'(使用しない)<br>
  340.      * overwrap_leftarea属性 = 'indexbar'(indexbarがオーバラップする)<br>
  341.      * classname属性 = 'page'<br>
  342.      * <br>
  343.      * 【子ノード(ページエリア情報)】<br>
  344.      * pageheaderノード = htf_frm_pageheaderクラス初期値<br>
  345.      * indexbarノード = htf_frm_indexbarクラス初期値<br>
  346.      * leftareaノード = htf_frm_leftareaクラス初期値<br>
  347.      * rightareaノード = htf_frm_rightareaクラス初期値<br>
  348.      * contentareaノード = htf_frm_contentareaクラス初期値<br>
  349.      * pagefooterノード = htf_frm_pagefooterクラス初期値<br>
  350.      *
  351.      * @param     object    $objnode  pageconfigのDOMノード
  352.      * @return    void 
  353.      ***/
  354.     function htf_frm_pageconfig($objnode=NULL{
  355.         //属性配列・ノード配列取得
  356.         if (!is_null($objnode)) {
  357.             $arrattr $objnode->attributes();
  358.             $arrnodes $objnode->child_nodes();
  359.         else {
  360.             $arrattr array();
  361.             $arrnodes array();
  362.         }
  363.         //プロパティ初期化
  364.         $this->initialize_property();
  365.         //各プロパティ上書き
  366.         $this->override_property($arrattr);
  367.         //pageconfig配下の子ノード取得
  368.         $this->get_childnodes($arrnodes);
  369.         //生成されていないノードを初期値で生成
  370.         $this->initialize_nullnodes();
  371.     }
  372.     
  373.     /**
  374.      * 各ページエリアに適用するCSS書式を生成し、文字列を返します。
  375.      *
  376.      * @access  public
  377.      * @return    string    CSS書式文字列
  378.      ***/
  379.     function get_cssformat({
  380.         $strret $this->get_cssformat_pageconfig();            //pageconfigのcss書式を取得
  381.         $strret.= $this->get_cssformat_pageconfig_anchor();        //pageconfigのanchor用css書式を取得
  382.         $strret.= $this->get_cssformat_childnodes();            //pageconfigの子ノードのcss書式を取得
  383.         return $strret;
  384.     }
  385.     
  386.     /**
  387.      * ページエリア全体のHTMLタグを文字列として取得します。
  388.      *
  389.      * ただし、配下のページエリアのタイプがinclude指定の場合、その部分はincludeを記述したphpスクリプト文字列となります。
  390.      * 
  391.      * @access  public
  392.      * @return    string  ボディ部HTMLタグ文字列
  393.      ***/
  394.     function get_htmltag({
  395.  
  396.         //HTMLタグ生成
  397.         $this->make_htmltag();
  398.  
  399.         //HTMLタグ取得
  400.         $strret $this->tabletag->get_htmltag();
  401.         
  402.         return $strret;
  403.  
  404.     }
  405.     
  406.     /**
  407.      * ページエリア全体のHTMLタグを出力します。
  408.      *
  409.      * @access  public
  410.      * @return    void 
  411.      ***/
  412.     function print_htmltag({
  413.         
  414.         //HTMLタグ生成
  415.         $this->make_htmltag();
  416.         //HTMLタグ出力
  417.         $this->tabletag->print_htmltag();
  418.  
  419.         return;
  420.  
  421.     }
  422.  
  423.     /**
  424.      * Htmlタグオブジェクトを作成します。
  425.      *
  426.      * @access  private
  427.      * @return    void 
  428.      ***/
  429.     function make_htmltag()
  430.     {
  431.         //pagearea全体テーブルタグ属性設定
  432.         if (htf_is_existsval($this->classname)) {
  433.             $this->tabletag->add_attribute('class'$this->classnameHTF_ITEMCASE_ATTRIBUTE);
  434.         }
  435.         if (htf_is_existsval($this->width)) {
  436.             $this->tabletag->add_attribute('width'$this->widthHTF_ITEMCASE_ATTRIBUTE);
  437.         }
  438.         if (htf_is_existsval($this->valign)) {
  439.             $this->tabletag->add_attribute('valign'$this->valignHTF_ITEMCASE_ATTRIBUTE);
  440.         }
  441.         if (htf_is_existsval($this->align)) {
  442.             $this->tabletag->add_attribute('align'$this->alignHTF_ITEMCASE_ATTRIBUTE);
  443.         }
  444.         $this->tabletag->add_attribute('cellpadding''0'HTF_ITEMCASE_ATTRIBUTE);
  445.         $this->tabletag->add_attribute('cellspacing''0'HTF_ITEMCASE_ATTRIBUTE);
  446.         
  447.         //pageheaderタグ属性設定
  448.         if (htf_comp_property($this->use_pageheaderHTF_CONF_ON)) {
  449.             $tr_pageheader new htf_tag_tr(HTF_ITEMCASE_ELEMENT);
  450.             $td_pageheader new htf_tag_td(HTF_ITEMCASE_ELEMENT);
  451.             if (htf_is_existsval($this->pageheader->valign)) {
  452.                 $td_pageheader->add_attribute('valign'$this->pageheader->valignHTF_ITEMCASE_ATTRIBUTE);
  453.             }
  454.             if (htf_is_existsval($this->pageheader->align)) {
  455.                 $td_pageheader->add_attribute('align'$this->pageheader->alignHTF_ITEMCASE_ATTRIBUTE);
  456.             }
  457.             $td_pageheader->add_content($this->pageheader);
  458.             $tr_pageheader->add_column($td_pageheader);
  459.             $this->tabletag->add_row_tbody($tr_pageheader);
  460.         }
  461.  
  462.         //indexbar,leftarea,rightarea,contentareaの該当タグオブジェクト設定
  463.         $this->set_tag_dynamicarea();
  464.  
  465.         //pagefooterタグ属性設定
  466.         if (htf_comp_property($this->use_pagefooterHTF_CONF_ON)) {
  467.             $tr_pagefooter new htf_tag_tr(HTF_ITEMCASE_ELEMENT);
  468.             $td_pagefooter new htf_tag_td(HTF_ITEMCASE_ELEMENT);
  469.             if (htf_is_existsval($this->pagefooter->valign)) {
  470.                 $td_pagefooter->add_attribute('valign'$this->pagefooter->valignHTF_ITEMCASE_ATTRIBUTE);
  471.             }
  472.             if (htf_is_existsval($this->pagefooter->align)) {
  473.                 $td_pagefooter->add_attribute('align'$this->pagefooter->alignHTF_ITEMCASE_ATTRIBUTE);
  474.             }
  475.             $td_pagefooter->add_content($this->pagefooter);
  476.             $tr_pagefooter->add_column($td_pagefooter);
  477.             $this->tabletag->add_row_tbody($tr_pagefooter);
  478.         }
  479.  
  480.         return;
  481.     }
  482.  
  483.     /**
  484.      * pageconfigに定義されているプロパティ内容からcss書式を取得します。
  485.      *
  486.      * @access  private
  487.      * @return    string 
  488.      ***/
  489.     function get_cssformat_pageconfig({
  490.         $cssstyle new htf_css_style();
  491.         $cssstyle->class_name=$this->classname;
  492.         //border
  493.         if (htf_is_existsval($this->border)) {
  494.             $cssstyle->add_property('border-width'$this->border);
  495.             $cssstyle->add_property('border-style''solid');
  496.         }
  497.         //bordercolor
  498.         if (htf_is_existsval($this->bordercolor)) {
  499.             $cssstyle->add_property('border-color'$this->bordercolor);
  500.         }
  501.         //bgcolor
  502.         if (htf_is_existsval($this->bgcolor)) {
  503.             $cssstyle->add_property('background-color'$this->bgcolor);
  504.         }
  505.         //bgimage
  506.         if (htf_is_existsval($this->bgimage)) {
  507.             $cssstyle->add_property('background-image''url('.$this->bgimage.')');
  508.         }
  509.         //fontcolor
  510.         if (htf_is_existsval($this->fontcolor)) {
  511.             $cssstyle->add_property('color'$this->fontcolor);
  512.         }
  513.         //CSS書式文字列取得
  514.         $strret htf_add_cr($cssstyle->get_css_style(HTF_CSS_STYLE_USE_CLASS));
  515.         return $strret;
  516.     }
  517.  
  518.     /**
  519.      * pageconfigに定義されているプロパティ内容からcss書式を取得します。(anchor関係)
  520.      *
  521.      * @access  private
  522.      * @return    string 
  523.      ***/
  524.     function get_cssformat_pageconfig_anchor({
  525.         $strret "";
  526.         //指定クラス・A要素のCSS作成
  527.         //linkcolor
  528.         if (htf_is_existsval($this->linkcolor)) {
  529.             $cssstyle_linkcolor new htf_css_style();
  530.             $cssstyle_linkcolor->classname $this->classname;
  531.             $cssstyle_linkcolor->anchor_name 'A:link';
  532.             $cssstyle_linkcolor->add_property('color',$this->linkcolor);
  533.             $strret.= htf_add_cr($cssstyle_linkcolor->get_css_style(HTF_CSS_STYLE_USE_CLASS +HTF_CSS_STYLE_USE_ANCNAME));
  534.         }
  535.  
  536.         //visitedcolor
  537.         if (htf_is_existsval($this->visitedcolor)) {
  538.             $cssstyle_visitedcolor new htf_css_style();
  539.             $cssstyle_visitedcolor->classname $this->classname;
  540.             $cssstyle_visitedcolor->anchor_name 'A:visited';
  541.             $cssstyle_visitedcolor->add_property('color',$this->visitedcolor);
  542.             $strret.= htf_add_cr($cssstyle_visitedcolor->get_css_style(HTF_CSS_STYLE_USE_CLASS +HTF_CSS_STYLE_USE_ANCNAME));
  543.         }
  544.  
  545.         //activecolor
  546.         if (htf_is_existsval($this->activecolor)) {
  547.             $cssstyle_activecolor new htf_css_style();
  548.             $cssstyle_activecolor->classname $this->classname;
  549.             $cssstyle_activecolor->anchor_name 'A:active';
  550.             $cssstyle_activecolor->add_property('color',$this->activecolor);
  551.             $strret.= htf_add_cr($cssstyle_activecolor->get_css_style(HTF_CSS_STYLE_USE_CLASS +HTF_CSS_STYLE_USE_ANCNAME));
  552.         }
  553.  
  554.         //hovercolor
  555.         if (htf_is_existsval($this->hovercolor)) {
  556.             $cssstyle_hovercolor new htf_css_style();
  557.             $cssstyle_hovercolor->classname $this->classname;
  558.             $cssstyle_hovercolor->anchor_name 'A:hover';
  559.             $cssstyle_hovercolor->add_property('color',$this->hovercolor);
  560.             $strret.= htf_add_cr($cssstyle_hovercolor->get_css_style(HTF_CSS_STYLE_USE_CLASS +HTF_CSS_STYLE_USE_ANCNAME));
  561.         }
  562.         return $strret;
  563.     }
  564.  
  565.     /**
  566.      * pageconfigの子ノードに適用するcss書式文字列を取得します。
  567.      *
  568.      * @access  private
  569.      * @return    string 
  570.      ***/
  571.     function get_cssformat_childnodes({
  572.         $strret "";
  573.         //子ノードのCSS取得
  574.         //pageheader
  575.         if (!strcmp($this->use_pageheaderHTF_CONF_ON&& !is_null($this->