1. Мы продолжаем публиковать интересные статьи на тему SocialEngine 4. Одна из статей посвящена правильному выбору сервера для вашей социальной сети, а другая содержит советы по увеличению производительности платформы. Также мы добавили большую статью о пользовательских уровнях. Ознакомиться со статьями вы можете в разделе Вопросы и Ответы SocialEngine 4.
  2. Вам кажется, что ваша версия SocialEngine 4, работает медленно?

    Голосуйте. Пишите свою версию системы, железо на чем работает и количество пользователей. Будем увеличивать производительность :-) Подробнее

  3. В связи с участившимися случаями попыток продажи пользователями форума различных "сборок" коммерческих социальных платформ, обычно основанных на SocialEngine 3, вводится новое правило для форума. Запрещается создание тем или размещение в уже созданных предложений о продаже или размещение ссылок на сайты, где происходит продажа "сборок". Пользователи, которые продолжат свою коммерческую деятельность в данном направлении, будут заблокированы. Подробнее.

Занятие №2

Discussion in 'Подготовка' started by SpartakuS, Mar 22, 2011.

  1. SpartakuS Thread starter User


    Offline
    • Знаменитый
    Message Count:
    797
    Likes Received:
    82
  2. Pchol Novice member


    Offline
    Message Count:
    3
    Likes Received:
    0
    Вот что у меня получилось.

    Index.php
    PHP:
    <?php 
    require_once "lib.php";
    //Создаем массив вида число=>результат 
    for ($i=1;$i<10;$i++)
    $array[$i] = $i*$i;  
    mylib::loadTpl('template.php'); //Говорим, что будем юзать файл template.php 
    mylib::setVar('match'$array); //Передаем перменную $array в шаблон 
    mylib::displayTpl(); //Ну и прорисовываем шаблон

    lib.php
    PHP:
    <?php class mylib 
    function 
    loadTpl($pthfile) {
        global 
    $view
        
    $view=$pthfile;
    }

    function 
    setVar($mat$array) {
        global $
    $mat;
        $
    $mat=$array;
    }

    function 
    displayTpl() {
        global 
    $view;
        require_once 
    $view;
    }
    }
    template.php
    PHP:
    <html> 
    <head> 
        <meta charset="utf-8" /> 
    </head>
    <body>
    <div>Какой нибудь хеадер с кавычками `"' и не экранируем :)</div>
    <ul>
    <?php
    global $match;
    foreach (
    $match as $key=>$value) {
    ?>
        <li>Квадрат числа <?=$key?> равен <?= $value?></li>
    <?php
    }
    ?>
    </ul>
    а тут и футер
    </body>
  3. SpartakuS Thread starter User


    Offline
    • Знаменитый
    Message Count:
    797
    Likes Received:
    82
    первый раз у кого то получилось что то напоминающее.
    Раз мы уже полезли в классы, то давайте договоримся, что глобал для нас под запретом. Глобал зло.
    У функций класса своя область вилимости. И тебе надо было создать переменную класса.
    в php4 это делалось так:
    PHP:
    <?php
    class MyLib {
    var 
    $vars = array();
    }
    Но мы то с вами пишем не как неандертальцы, а правильно.
    Так что слово вар мы заменяем ключевым словом указывающим на область видимости. public, protected, private. Про них несложно почитать. Так же области видимости стоило указать в функциях. Так как ты сделал функции статическими :):), то нужно было явно указать, что они статические. Но на самом деле чисто статические классы подходят лишь для хелперов. Нам как раз стоит сделать объект.

    PHP:
    <?php
    class Template {
        public function ... (
    $name$value) {
             
    $this->_vars['name']=$value;
        }
        
    //////////////////////////
        
    protected $_vars = array;
    }
    Как предоставишь нечто подобное, начнем усовершенствовать наш мегашаблонищатор дальше.
  4. nikolas25 Novice member


    Offline
    Message Count:
    21
    Likes Received:
    0
    Через классы я тоже реализовывал, но хочется увидеть решение изначального задания, ведь в условии о классах речь не шла:))
    SpartakuS, натолкини на мысль в реализации функций ведь хочется понять как реализовать этот шаблонизатор!
  5. SpartakuS Thread starter User


    Offline
    • Знаменитый
    Message Count:
    797
    Likes Received:
    82
    Да также. Вот глянь класс юзера пчол. На класс забей и оставь тупа функции. В сетвар записывай глоьальный массив. А в дисплейтпл перед инклюдам в цикле преобразуй массив в переменные двумя баксами.
    Но так делать не стоит в реальных проектах.
  6. Pchol Novice member


    Offline
    Message Count:
    3
    Likes Received:
    0
    index.php

    PHP:
    <?php

    require_once "libtemplate.php";

    for (
    $i=1;$i<10;$i++)
    $array[$i] = $i*$i;


    $obj=new Template;
    $obj->loadTpl('template.php');//Говорим, что будем юзать файл template.php  
    $obj->setVar('match',$array);//Передаем перменную $array в шаблон 
    $obj->displayTpl();//Ну и прорисовываем шаблон

    libtemplate.php

    PHP:
    <?php
    class Template 
        protected 
    $view;
        protected 
    $path;
        
        public function 
    loadTpl($pthfile){
            
    $this->path=$pthfile;
        }
        
        public function 
    setVar($name,$value) {
            
    $this->view["$name"]=$value;
        }
        
        public function 
    displayTpl() {
            
    extract($this->view);
            require_once 
    $this->path;
        }

    }

    template.php

    PHP:
    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
    <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="ru">
    <head>
        <meta http-equiv="content-type" content="text/html; charset=utf-8" />
    </head>
    <body>
    <div>Какой нибудь хеадер с кавычками `"' и не экранируем :)</div>
    <ul>
    <?php
    foreach ($match as $key=>$value) {
    ?>
        <li>Квадрат числа <?=$key?> равен <?= $value?></li>
    <?php
    }
    ?>
    </ul>
    а тут и футер
    </body>
    вроде так)
  7. nikolas25 Novice member


    Offline
    Message Count:
    21
    Likes Received:
    0
    А вот мой вариант без классов
    index.php
    PHP:
    <?php
    include 'template.function.php';
    //Создаем массив вида число=>результат
    for($i=1;$i<=10;$i++){
        
    $array[$i] = pow($i2);//возведение в степень
    }
    loadTpl('template.php'); //Говорим, что будем юзать файл template.php
    setVar('math'$array); //Передаем перменную $array в шаблон
    displayTpl();
    ?>
    template.function.php
    PHP:
    <?php
    function loadTpl($file){
        
    $tempname=$file;
    }
    function 
    setVar($math,$array){
        global 
    $match;
        
    $match $array;
    }
    function 
    displayTpl(){
            require_once 
    "template.php";
    }
    ?>
    template.php
    PHP:
    <div>Какой нибудь хеадер с кавычками `"' и не экранируем :)</div>
    <ul>
    <?php
    foreach($GLOBALS['match'] as $key=>$value) {
    ?>
        <li>Квадрат числа <?php echo $key?> равен <?php echo $value?></li>
    <?php
    }
    ?>
    </ul>
    а тут и футер
  8. SpartakuS Thread starter User


    Offline
    • Знаменитый
    Message Count:
    797
    Likes Received:
    82
    А зачем math в сетвар?
    И мне не нравятся ваши глобался в шаблоне

Share This Page

All rights reserved SocEngine.ru ©