글쓴사람 양요한
글쓴시간2004년 12월 7일 오전 9시 4분 27초
    제목종종 사용하는 Template_ 플러그인
누구나 그러시겠지만 저 역시 폼 코딩을 굉장히 '시러라~~~' 합니다.
그래서 생각 날때마다 끄적끄적 메소드를 추가하고 있는
"폼 요소 생성 플러그인" -_-;; 을 소개할까 합니다.
물론, 소개하는 이유는
좀 봐주시고... 나이스 하게 바꿀 점이라던가...추가할 점이 있으면...
같이 고쳐서 나눠 썼으면 하는 맘이죠...

허접한 소스에 주석도 없고 해서 보시기 괴로우시겠지만...
그냥 별 고민없이 생각나는대로 만든거라서 그다지 어렵지 않을거라고 생각됩니다.

---------------------------- object.FORM.php ------------------------------
<?php
class tpl_object_FORM
{

    function tpl_object_FORM(){}
   
    function flagElement($name, $current_value='', $yes_label='YES', $no_label='NO', $type='radio', $yes_value='Y', $no_value='N', $default_value='Y')
    {
        if ($type == 'radio')
        {
            $yes_check = $no_check = '';
            if (empty($current_value) && !empty($default_value))
            {
                if ($default_value == $yes_value) $yes_check = ' checked';
                else $no_check = ' checked';
            }
            else if (empty($current_value) || $current_value == $yes_value) $yes_check = ' checked';
            if ($current_value && $current_value == $no_value) $no_check = ' checked';
            $html = "<input type='radio' style='border-width:0px' name='{$name}' value='{$yes_value}' onFocus='this.blur();' id='{$name}_{$yes_value}'{$yes_check}>";
            $html .= "<label for='{$name}_{$yes_value}' style='cursor:hand'>{$yes_label}</label>";
            $html .= "<input type='radio' style='border-width:0px' name='{$name}' value='{$no_value}' onFocus='this.blur();' id='{$name}_{$no_value}'{$no_check}>";
            $html .= "<label for='{$name}_{$no_value}' style='cursor:hand'>{$no_label}</label>";
        }
        else if ($type == 'checkbox')
        {
            $check = '';
            if ($current_value && $current_value == $yes_value) $check = ' checked';
            else if (empty($current_value) && $default_value == $yes_value) $check = ' checked';

            $html = "<input type='checkbox' name='{$name}' style='border-width:0px;' onFocus='this.blur();' value='{$yes_value}' id='{$name}_{$yes_value}'{$check}>";
            $html .= "<label for='{$name}_{$yes_value}' id='label_{$name}_{$yes_value}' style='cursor:hand'>{$yes_label}</label>";
        }
        return $html;
    }

    function dateElement($prefix = '', $today = '', $start_year = 1900, $end_year = 2100, $seps=array(' 년 ',' 월 ',' 일 '))
    {
        if ($today == '')
        {
            $tod_year = date('Y');
            $tod_month = date('m');
            $tod_day = date('d');
        }
        else
        {
            $tod_year = substr($today, 0, 4);
            $tod_month = substr($today, 5, 2);
            $tod_day = substr($today, 8, 2);
        }

        $name_year = (($prefix!='')?$prefix.'_':'').'year';
        $name_month = (($prefix!='')?$prefix.'_':'').'month';
        $name_day = (($prefix!='')?$prefix.'_':'').'day';
       
        $html = "<select name='$name_year'>";
        for ($i=$start_year; $i<=$end_year; $i++)
        {
            $select = '';
            if ($i==$tod_year) $select=' selected';
            $html .= "<option value='{$i}'{$select}>{$i}</option>";
        }
        $html .= "</select>\n".$seps[0];

        $html .= "<select name='$name_month'>";
        for ($i=1; $i<=12; $i++)
        {
            $v = $i;
            if ($i < 10) $v = '0'.$i;
            $select = '';
            if ($v==$tod_month) $select=' selected';
            $html .= "<option value='{$v}'{$select}>{$v}</option>";
        }
        $html .= "</select>\n".$seps[1];

        $html .= "<select name='$name_day'>";
        for ($i=1; $i<=31; $i++)
        {
            $v = $i;
            if ($i < 10) $v = '0'.$i;
            $select = '';
            if ($v==$tod_day) $select=' selected';
            $html .= "<option value='{$v}'{$select}>{$v}</option>";
        }
        $html .= "</select>\n".$seps[2];
       
        return $html;
    }
   
    function selectElement($name, $array, $current_value = false, $value_field = false, $name_field = false, $style = "size='1'")
    {
        $html = "<select name='{$name}' {$style}>";
        foreach ($array as $key=>$element)
        {
            $value = $element;
            $name = $element;
            $select = '';
            if (is_array($element) && $value_field) $value = $element[$value_field];
            if ($value_field == 'key_') $value = $key;
            if (is_array($element) && $name_field) $name = $element[$name_field];
            if ($current_value && $current_value == $value) $select = ' selected';

            $html .= "<option value='{$value}'{$select}>{$name}</option>";           
        }
        return $html.'</select>';
    }
}
---------------------------- object.FORM.php ------------------------------


아래 나열된 템플릿 코드(▶)는 각각 그 다음에 나오는 html(▷) 을 생성합니다.


▶ {p.FORM->flagElement('is_mailing', data.is_mailing)}

▷ <input type='radio' style='border-width:0px' name='is_mailing' value='Y' onFocus='this.blur();' id='is_mailing_Y' checked><label for='is_mailing_Y' style='cursor:hand'>YES</label><input type='radio' style='border-width:0px' name='is_mailing' value='N' onFocus='this.blur();' id='is_mailing_N'><label for='is_mailing_N' style='cursor:hand'>NO</label>

▶ {p.FORM->flagElement('is_mailing2', data.is_mailing, '예, 메일을 받습니다.', '아니오, 메일을 받지않습니다.')}

▷ <input type='radio' style='border-width:0px' name='is_mailing2' value='Y' onFocus='this.blur();' id='is_mailing2_Y' checked><label for='is_mailing2_Y' style='cursor:hand'>예, 메일을 받습니다.</label><input type='radio' style='border-width:0px' name='is_mailing2' value='N' onFocus='this.blur();' id='is_mailing2_N'><label for='is_mailing2_N' style='cursor:hand'>아니오, 메일을 받지않습니다.</label>

▶ {p.FORM->flagElement('is_mailing3', data.is_mailing, '예, 메일을 받습니다.', '아니오, 메일을 받지않습니다.', 'checkbox')}

▷ <input type='checkbox' name='is_mailing3' style='border-width:0px;' onFocus='this.blur();' value='Y' id='is_mailing3_Y' checked><label for='is_mailing3_Y' id='label_is_mailing3_Y' style='cursor:hand'>예, 메일을 받습니다.</label>

▶ {p.FORM->flagElement('is_male', data.is_male, '남', '여', 'radio', 'M', 'F', 'M')}

▷ <input type='radio' style='border-width:0px' name='is_male' value='M' onFocus='this.blur();' id='is_male_M' checked><label for='is_male_M' style='cursor:hand'>남</label><input type='radio' style='border-width:0px' name='is_male' value='F' onFocus='this.blur();' id='is_male_F'><label for='is_male_F' style='cursor:hand'>여</label>

▶ {p.FORM->dateElement('birthday', data.birthday)}

▷ <select name='birthday_year'><option value='1900'>1900</option><option value='1901'>1901</option><option value='1902'>1902</option><option value='1903'>1903</option><option value='1904'>1904</option><option value='1905'>1905</option><option value='1906'>1906</option><option value='1907'>1907</option><option value='1908'>1908</option><option value='1909'>1909</option><option value='1910'>1910</option><option value='1911'>1911</option><option value='1912'>1912</option><option value='1913'>1913</option><option value='1914'>1914</option><option value='1915'>1915</option><option value='1916'>1916</option><option value='1917'>1917</option><option value='1918'>1918</option><option value='1919'>1919</option><option value='1920'>1920</option><option value='1921'>1921</option><option value='1922'>1922</option><option value='1923'>1923</option><option value='1924'>1924</option><option value='1925'>1925</option><option value='1926'>1926</option><option value='1927'>1927</option><option value='1928'>1928</option><option value='1929'>1929</option><option value='1930'>1930</option><option value='1931'>1931</option><option value='1932'>1932</option><option value='1933'>1933</option><option value='1934'>1934</option><option value='1935'>1935</option><option value='1936'>1936</option><option value='1937'>1937</option><option value='1938'>1938</option><option value='1939'>1939</option><option value='1940'>1940</option><option value='1941'>1941</option><option value='1942'>1942</option><option value='1943'>1943</option><option value='1944'>1944</option><option value='1945'>1945</option><option value='1946'>1946</option><option value='1947'>1947</option><option value='1948'>1948</option><option value='1949'>1949</option><option value='1950'>1950</option><option value='1951'>1951</option><option value='1952'>1952</option><option value='1953'>1953</option><option value='1954'>1954</option><option value='1955'>1955</option><option value='1956'>1956</option><option value='1957'>1957</option><option value='1958'>1958</option><option value='1959'>1959</option><option value='1960'>1960</option><option value='1961'>1961</option><option value='1962'>1962</option><option value='1963'>1963</option><option value='1964'>1964</option><option value='1965'>1965</option><option value='1966'>1966</option><option value='1967'>1967</option><option value='1968'>1968</option><option value='1969'>1969</option><option value='1970'>1970</option><option value='1971'>1971</option><option value='1972'>1972</option><option value='1973'>1973</option><option value='1974'>1974</option><option value='1975'>1975</option><option value='1976'>1976</option><option value='1977'>1977</option><option value='1978'>1978</option><option value='1979'>1979</option><option value='1980'>1980</option><option value='1981'>1981</option><option value='1982'>1982</option><option value='1983'>1983</option><option value='1984'>1984</option><option value='1985'>1985</option><option value='1986'>1986</option><option value='1987'>1987</option><option value='1988'>1988</option><option value='1989'>1989</option><option value='1990'>1990</option><option value='1991'>1991</option><option value='1992'>1992</option><option value='1993'>1993</option><option value='1994'>1994</option><option value='1995'>1995</option><option value='1996'>1996</option><option value='1997'>1997</option><option value='1998'>1998</option><option value='1999'>1999</option><option value='2000'>2000</option><option value='2001'>2001</option><option value='2002'>2002</option><option value='2003'>2003</option><option value='2004' selected>2004</option><option value='2005'>2005</option><option value='2006'>2006</option><option value='2007'>2007</option><option value='2008'>2008</option><option value='2009'>2009</option><option value='2010'>2010</option><option value='2011'>2011</option><option value='2012'>2012</option><option value='2013'>2013</option><option value='2014'>2014</option><option value='2015'>2015</option><option value='2016'>2016</option><option value='2017'>2017</option><option value='2018'>2018</option><option value='2019'>2019</option><option value='2020'>2020</option><option value='2021'>2021</option><option value='2022'>2022</option><option value='2023'>2023</option><option value='2024'>2024</option><option value='2025'>2025</option><option value='2026'>2026</option><option value='2027'>2027</option><option value='2028'>2028</option><option value='2029'>2029</option><option value='2030'>2030</option><option value='2031'>2031</option><option value='2032'>2032</option><option value='2033'>2033</option><option value='2034'>2034</option><option value='2035'>2035</option><option value='2036'>2036</option><option value='2037'>2037</option><option value='2038'>2038</option><option value='2039'>2039</option><option value='2040'>2040</option><option value='2041'>2041</option><option value='2042'>2042</option><option value='2043'>2043</option><option value='2044'>2044</option><option value='2045'>2045</option><option value='2046'>2046</option><option value='2047'>2047</option><option value='2048'>2048</option><option value='2049'>2049</option><option value='2050'>2050</option><option value='2051'>2051</option><option value='2052'>2052</option><option value='2053'>2053</option><option value='2054'>2054</option><option value='2055'>2055</option><option value='2056'>2056</option><option value='2057'>2057</option><option value='2058'>2058</option><option value='2059'>2059</option><option value='2060'>2060</option><option value='2061'>2061</option><option value='2062'>2062</option><option value='2063'>2063</option><option value='2064'>2064</option><option value='2065'>2065</option><option value='2066'>2066</option><option value='2067'>2067</option><option value='2068'>2068</option><option value='2069'>2069</option><option value='2070'>2070</option><option value='2071'>2071</option><option value='2072'>2072</option><option value='2073'>2073</option><option value='2074'>2074</option><option value='2075'>2075</option><option value='2076'>2076</option><option value='2077'>2077</option><option value='2078'>2078</option><option value='2079'>2079</option><option value='2080'>2080</option><option value='2081'>2081</option><option value='2082'>2082</option><option value='2083'>2083</option><option value='2084'>2084</option><option value='2085'>2085</option><option value='2086'>2086</option><option value='2087'>2087</option><option value='2088'>2088</option><option value='2089'>2089</option><option value='2090'>2090</option><option value='2091'>2091</option><option value='2092'>2092</option><option value='2093'>2093</option><option value='2094'>2094</option><option value='2095'>2095</option><option value='2096'>2096</option><option value='2097'>2097</option><option value='2098'>2098</option><option value='2099'>2099</option><option value='2100'>2100</option></select>
년 <select name='birthday_month'><option value='01'>01</option><option value='02'>02</option><option value='03'>03</option><option value='04'>04</option><option value='05'>05</option><option value='06'>06</option><option value='07'>07</option><option value='08'>08</option><option value='09'>09</option><option value='10'>10</option><option value='11'>11</option><option value='12' selected>12</option></select>
월 <select name='birthday_day'><option value='01'>01</option><option value='02'>02</option><option value='03'>03</option><option value='04'>04</option><option value='05'>05</option><option value='06'>06</option><option value='07' selected>07</option><option value='08'>08</option><option value='09'>09</option><option value='10'>10</option><option value='11'>11</option><option value='12'>12</option><option value='13'>13</option><option value='14'>14</option><option value='15'>15</option><option value='16'>16</option><option value='17'>17</option><option value='18'>18</option><option value='19'>19</option><option value='20'>20</option><option value='21'>21</option><option value='22'>22</option><option value='23'>23</option><option value='24'>24</option><option value='25'>25</option><option value='26'>26</option><option value='27'>27</option><option value='28'>28</option><option value='29'>29</option><option value='30'>30</option><option value='31'>31</option></select>


▶ {p.FORM->selectElement('job', job_list, data.job)}

▷ <select name='job' size='1'><option value='aaa'>aaa</option><option value='bbb'>bbb</option><option value='ccc'>ccc</option><option value='ddd'>ddd</option></select>

▶ {p.FORM->selectElement('job2', job_list2, data.job, 'key_')}

▷ <select name='job2' size='1'><option value='aaa'>학생</option><option value='bbb'>공무원</option><option value='ccc'>전문직</option></select>


※ 위에서 job_list 와 job_list2 는 다음과 같은 배열입니다.
$TEMPLATE->assign(array(
    'job_list' => array('aaa','bbb','ccc','ddd'),
    'job_list2' => array(
        'aaa' => '학생',
        'bbb' => '공무원',
        'ccc' => '전문직',
    ),
));
이가금 편해보이긴 한데 디자인의 자율성이 떨어지겠네요.. ^^;
04-12-13 11:33
관리자 양요한님 안녕하세요^^ 답변이 늦었네요

자주쓰이는 부분을 플러그인으로 만들어두고 쓰는 것도 편한 방법인거 같네요. 나름대로 용도에 맞게 일반화해서 작성하신거 같은데요.^^ 양요한님 팁이나 로직은 저도 검색해서 참고하곤 합니다.
04-12-15 14:26
    이름
비밀번호
 
Since 2003-03-03 hosted on vultr.com