Часовой пояс: UTC + 3 часа




Начать новую тему Новая тема / Ответить на тему Ответить  Сообщений: 1267 • Страница 9 из 64<  1 ... 6  7  8  9  10  11  12 ... 64  >
  Пред. тема | След. тема 
В случае проблем с отображением форума, отключите блокировщик рекламы
Автор Сообщение
 

Member
Статус: Не в сети
Регистрация: 28.03.2005
Откуда: Латвия, Рига
Гы, влез :lol:
Ссылки на официальный ман надо давать а не на форумы! На форумах вечно один то, второй то, третий ещё что-то... ман это бог! :D



Партнер
 

_Psih :beer:


 

Member
Статус: Не в сети
Регистрация: 18.11.2002
Откуда: не вернуться
Кстати как кто относится к шаблонизации "а-ля Ламерс едишын" ?
example.php
Код:
<?php
$title = 'Sample title';
$content = 'Sample content';

$array[] = 'Sample list item 1';
$array[] = 'Sample list item 2';
$array[] = 'Sample list item 3';

include "example_tpl.php";
?>

example_tpl.php
Код:
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01//EN"
   "http://www.w3.org/TR/html4/strict.dtd">
<html>
   <head>
      <title>Template</title>
   </head>
   <body>
      <h1><?=$title?></h1>
      <p><?=$content?></p>
      <ul>
<?foreach($array as $item):?>
         <li><?=$item?></li>
<?endforeach?>
      </ul>
   </body>
</html>

(ветка затухает а не хотелось бы)
Просто я нигде не встречал "хороших" отзывов об этом методе шаблонизации.
Между тем у него много достоинств, среди них как простота, так и доступность и даже скорость.
Более того свою задачу он выполняет на все сто (разделяет понятие логики приложения от логики представления) кто что об этом думает...

_________________
Летели гуси-лебеди, а им навстречу - воробьи-пингвины и соловьи-страусы...


 

Member
Статус: Не в сети
Регистрация: 28.03.2005
Откуда: Латвия, Рига
Просто потом труднее разобратся, когда очень много всего. Да и переносимость просто не очень. Большинство уже сущестующих шаблонизаторов написанны в виде классов и имеют схему $this->assign() и $this->display(). Т.к. функции обозванны именно так, что можно легко сменить шаблонизатор и поменять ТОЛЬКО шаблоны, не трогая код самого приложения :) (всё сводится лишь к тому, что вместо одного класса мы вызываем другой).

Да и к тому же когда мы используем шаблонизатор в виде класса, не может возникнуть конфликта имен переменных с глобальными переменными скрипта, поскольку все они создаются внутри класса и локальны для него :) Помоему это очень даже важно :)
Единственный минус при использовании PHP4 - это то, что надо масивы и прочие данные большого объёма передавать по ссылке, что бы они не дублировались. PHP5 от этого недостатка избавлен, там идёт работа чисто с дескрипторами :)


 

Member
Статус: Не в сети
Регистрация: 23.06.2004
Откуда: Минск
Вопрос такой: Как в середину php кода врезать именно этот html код, собственно само обращение к css ?

Код:
<div class="now"><span class="zag">TEXT1</span><br>
TEXT2
</div><br>

_________________
MESS WITH THE BEST
DIE LIKE THE REST


 

Member
Статус: Не в сети
Регистрация: 05.01.2004
Откуда: Москва
Всем привет, нужна помощь с PHP скриптом, вернее с функцией одной!
Нам в универе задали сделать сайтик не большо(интерент магазин типа)).
Естественно в интернет магазине должен присутствовать поиск товаров по названию, я это реализовал с помощью функции
Код:
stristr()
которая ищет строки в строках и она не чувствительна к регистру.
Список товаров храниться в файле и все они у меня были записанны на английском языке и поиск отлично работал, я ввел товар на русском языке и поиск не пашет...
Похоже
Код:
stristr()
не понимает русский язык...
Что делать?


 

Member
Статус: Не в сети
Регистрация: 28.03.2005
Откуда: Латвия, Рига
не факт что не понимает. Уверен что у тебя он нормально сохраняется в фаиле. Ты какую кодировку используешь? Желательно приведи тот кусок кода, где поиск и что в фаиле у тебя хранится :) Думаю проблема в кодировках где-то.


 

Member
Статус: Не в сети
Регистрация: 18.11.2002
Откуда: не вернуться
_Psih
_Psih писал(а):
Большинство уже сущестующих шаблонизаторов написанны в виде классов и имеют схему $this->assign() и $this->display().

Что мешает сделать класс ?
Код:
Class Template {
   function display($fullname, $array) {
      ob_start();
      extract($array);
      include $fullname;
      $output = ob_get_clean();
      echo $output;
   }
}

Я просто пишу упрощённо до ужаса, только чтоб передать только смысл...

Boris Зарание предупреждаю что говорю глупость, но это настолько глупо что может сработать...
Почему бы для уверенности что это виноват stristr() не попробовать хранить название не просто на русском, а в закодированном виде ? (base64_encode например)

_________________
Летели гуси-лебеди, а им навстречу - воробьи-пингвины и соловьи-страусы...


 

Member
Статус: Не в сети
Регистрация: 05.01.2004
Откуда: Москва
_Psih и virus

Сама страничка:
Код:
<?php
   $price_left=$_POST['price_left'];
   $price_right=$_POST['price_right'];
   $product_name=$_POST['product_name'];
   $product_position=$_POST['product_position'];
   $ok=$_POST['ok'];
   $temp=$_POST['temp'];
?>

<html>

   <head>
      <meta http-equiv="content-type" content="text/html;charset=utf-8">
      <title>Интеренет магазин.</title>
   </head>

   <body>
      <form action="index.php" method="post">
         <table border="1" align="center">
            <tr>
               <td bgcolor ="#CCCCFF" align="center">Найти по названию</td>
               <td bgcolor ="#CCCCFF" align="center">Найти по месту положения</td>
               <td bgcolor ="#CCCCFF" align="center">Цена, от:</td>
               <td bgcolor ="#CCCCFF" align="center">Цена, до:</td>
            </tr>
            <tr>
               <td align="center"><input type="text" name="product_name" size="30" maxlength="30"></td>
               <td align="center"><input type="text" name="product_position" size="30" maxlength="30"></td>
               <td align="center"><input type="text" name="price_left" size="10" maxlength="10"></td>
               <td align="center"><input type="text" name="price_right" size="10" maxlength="10"></td>
            </tr>
            <tr>
               <td colspan="5" align="center"><input type="submit" name="ok" value="OK"></td>
            </tr>
         </table>
      </form>
      
      <?php
         if(!file_exists("price.txt"))
         {
            echo '<p align="center">Прайс лист не заполнет.</p>';
            echo '</body></html>';
            exit;
         }          
         $price=file("price.txt");
         $num_lines=count($price);
         for($row=0; $row<$num_lines; $row++)
         {
            $line[$row] = explode("\t", $price[$row]);
            $line[$row][2] = intval( $line[$row][2] );
            $line[$row][3] = intval( $line[$row][3] );
            $line[$row][4] = intval( $line[$row][4] );
         }
         
            
         if(!empty($product_name))
         {
            if(is_numeric($product_name))
            {
               echo "<p>Не верный формат данных</p>";
               $product_name_error=false;
            }
            else $product_name_error=true;
         }
         else $product_name_error=true;
         
         if(!empty($product_position))
         {   
            if(is_numeric($product_position))
            {
               echo "<p>Не верный формат данных</p>";
               $product_position_error=false;
            }
            else $product_position_error=true;
         }
         else $product_position_error=true;
         
         if(!empty($price_left))   
         {
            if(!is_numeric($price_left))
            {
               echo "<p>Не верный формат данных</p>";
               $price_left_error=false;
            }
            else $price_left_error=true;
         }
         else $price_left_error=true;
         
         if(!empty($price_right))
         {   
            if(!is_numeric($price_right))
            {
               echo "<p>Не верный формат данных</p>";
               $price_right_error=false;
            }
            else $price_right_error=true;
         }
         else $price_right_error=true;
         
         if($product_name_error==false || $product_position_error==false || $price_left_error==false || $price_right_error==false)
         {
            echo "</body></html>";
            exit;
         }
         echo '<form action="index.php" method="post">';
         echo '<table border=1 align="center">';
         echo '<tr>'.
                '<td bgcolor ="#CCCCFF">Наименование товара</td>' .
                 '<td bgcolor ="#CCCCFF">Место положения</td>' .
                 '<td bgcolor ="#CCCCFF">Контактный телефон</td>' .
                 '<td bgcolor ="#CCCCFF">Цена товара</td>' .
                 '<td bgcolor ="#CCCCFF">Количество товара</td>' .
                 '<td bgcolor ="#CCCCFF">Купить шт.</td>' .
              '<tr>';
         
         for($row=0; $row<$num_lines; $row++)
         {
            //Поиск по названию.
            if(!empty($product_name))
            {
               if(stristr($line[$row][0],$product_name))
                  $name_product=true;
               else $name_product=false;
            }               
            else $name_product=true;
            
            //Поиск по месту нахождения.
            if(!empty($product_position))
            {
               if(stristr($line[$row][1],$product_position))
                  $position_product=true;
               else $position_product=false;
            }               
            else $position_product=true;
            
            //Сортировка товара по цене.
            if(!empty($price_left))
            {
               if($line[$row][3]>=$price_left)
                  $left_price=true;
               else $left_price=false;
            }
            else $left_price=true;
            
            if(!empty($price_right))
            {
               if($line[$row][3]<=$price_right)
                  $right_price=true;
               else $right_price=false;
            }
            else $right_price=true;
            
            if($left_price==true && $right_price==true && $name_product==true && $position_product==true)
            {
               echo '<tr><td>'.$line[$row][0].'</td>'.
                   '<td align="right">'.$line[$row][1].'</td>'.
                   '<td align="right">'.$line[$row][2].'</td>'.
                   '<td align="right">'.$line[$row][3].'</td>'.
                   '<td align="right">'.$line[$row][4].'</td>';
               echo '<td align="center"><input type="text" name="temp[]" size="3" maxlength="3"></td></tr>';
            }                     
         }
         echo '<tr><td colspan="6" align="center"><input type="submit" name="buy" value="Buy"></td></tr>';
         echo '</table>';
         echo '</form></br>';
      ?>      
   </body>
</html>


Содержание файла, это к примеру:
Код:
Pupsik   Moscow   554546456   100   5
РџСѓРїСЃРёРє   РњРѕСЃРєРІР°   64565564   200   6
Smupsik   Piter   464564456   300   2
РЁРјСѓРїСЃРёРє   РџРёС‚ер   46564564   400   3


Вот код всей странички, она все прекрасно записывает в файл, но вот русские буквы записывает кракозяброй. :)
И народ, помогите привернуть к этой страничке следующую фичу!
Если вы запустите страничку, то в самом правом столбце таблицы на каждой её строчке будет выведена форма, в которую нужно ввести число, далее вычесть это число из количества товара и измененные данные записать в тот же файл!


 

Member
Статус: Не в сети
Регистрация: 28.03.2005
Откуда: Латвия, Рига
Кракозяблы из-за того, что кодировка другая. пользуйся iconv и если будешь хранить в UTF-8 всё, пользуйся mb_string библиотекой, вместо обычных функций работы со строками. Скорее всего у тебя какраз хранится всё в UTF, но ты пользуешься обычными функциями. Примени mb_string библиотеку.


 

Member
Статус: Не в сети
Регистрация: 05.01.2004
Откуда: Москва
_Psih Да, приходится пользоваться UTF, иначе проблеммы с кодировкой на макинтошах, а мы в унивре только за ними и сидим!
А что за mb_string библиотека?


 

Member
Статус: Не в сети
Регистрация: 18.11.2002
Откуда: не вернуться
_Psih Вот ему как раз не помешало бы научиться отделать логику приложения от логики представления

Boris Добрый тебе совет, научись писать красивый код, рано или поздно сам будешь путаться где у тебя ввод а где вывод :)

_________________
Летели гуси-лебеди, а им навстречу - воробьи-пингвины и соловьи-страусы...


 

Member
Статус: Не в сети
Регистрация: 05.01.2004
Откуда: Москва
virus Ты знаешь, я и так стараюсь писать красивый код, с моей точки зрения он красивый и для меня понятый... Но к сожалению у нас в университете большенство преподов тупые и дельный совет дать не могут!

Народ, если вам не сложно, то подскажите как красивый код писать...


 

Member
Статус: Не в сети
Регистрация: 18.11.2002
Откуда: не вернуться
Посмотри мой пост выше (про шаблонизацию "а-ля Ламерс едишын")
а главное не путай то что ты видишь от того что тебе надо...

Там речь идёт не о конкретном решении проблемы, а о самом принципе
что надо разделять логику приложения от логики представления...

_________________
Летели гуси-лебеди, а им навстречу - воробьи-пингвины и соловьи-страусы...


 

Member
Статус: Не в сети
Регистрация: 05.01.2004
Откуда: Москва
virus Извини, но в посте про шаблонизацию "а-ля Ламерс едишын" в плане оформлния ничего нового я не увидил, скажи конкретно что плохо в моем коде! :)
Меня правда это очень интерисует!

А вот твой пост пониже...
Код:
Class Template {
   function display($fullname, $array) {
      ob_start();
      extract($array);
      include $fullname;
      $output = ob_get_clean();
      echo $output;
   }
}

В плане оформления, чего здесь есть. чего нету у еня?

Код:
Class Template {
   function display($fullname, $array) {


Вот маленький кусочек, ты пишешь открывающуюся фигурную скобку на той же строчке, что и имя функции, но мне такой стиль не нравится, мне как-то приятнее видеть код, отредактированный следующим образом:
Код:
Class Template
{
    function display($fullname, $array)
   {
 
   }
}

Если выше показанный мною подход к оформлению кода не верен или не удобочитаем, то скажите в чем моя ошибка, я буду рад рости над собой)

Цитата:
$output = ob_get_clean();

Советутете ставить пробел слева и справа от знака присваивания и наверное от знаков логических операций?


 

Member
Статус: Не в сети
Регистрация: 18.11.2002
Откуда: не вернуться
Я говорю не про оформление конкретно текста кода, а про логику скрипта...
У тебя скрипт выводит результат одновременно с его получением...

А нужно чтоб было как минимум 2 скрипта...
Один (как у меня example.php) получает (расчитывает, сравнивает итд) данные
Другой (как мой example_tpl.php) выводит их в браузер.

Причём в первом не должно быть HTML (абсолютно) !!! (Это важно, в этом вся суть)
Второй должен содержать только упрощённый РНР код,
необходимый только для отображения (никаких вычислений, проверок итд, только вывод)

_________________
Летели гуси-лебеди, а им навстречу - воробьи-пингвины и соловьи-страусы...


 

Member
Статус: Не в сети
Регистрация: 05.01.2004
Откуда: Москва
virus Аааа, понял тебя!
А почему в первом не должно быть ШТМЛ абсолютно, если первый скрипт получает данные, которые вводит пользователь, то ШТМЛ быть обязан!

Ладно, я в универ побежал... Но есть куча вопросов, буду дома напишу!


 

Member
Статус: Не в сети
Регистрация: 18.11.2002
Откуда: не вернуться
Boris писал(а):
если первый скрипт получает данные, которые вводит пользователь, то ШТМЛ быть обязан!

Он быть может, но находиться должен в другом файле и например подключаться с помощью include()

(хотя многие для этого используют профессиональные шаблонизаторы,
"Smarty", "PHPLib", "TemplateIT" и.т.д.)

Таким образом простая схема

Код:
<?php
   $price_left=$_POST['price_left'];
   $price_right=$_POST['price_right'];
   $product_name=$_POST['product_name'];
   $product_position=$_POST['product_position'];
   $ok=$_POST['ok'];
   $temp=$_POST['temp'];

   // форма
   include "form_tpl.php";

   if ( ..... )
   {
       $result = "............";
       include "output_tpl.php";
   }
   else
   {
      $error = 'Fuck you';
       include "error_tpl.php";
   }
?>


А всё что касается вывода HTML в отдельных файлах
(в данном примере form_tpl.php output_tpl.php error_tpl.php)

_________________
Летели гуси-лебеди, а им навстречу - воробьи-пингвины и соловьи-страусы...


 

Member
Статус: Не в сети
Регистрация: 28.03.2005
Откуда: Латвия, Рига
Boris писал(а):
Код:
Class Template {
   function display($fullname, $array) {


Вот маленький кусочек, ты пишешь открывающуюся фигурную скобку на той же строчке, что и имя функции, но мне такой стиль не нравится, мне как-то приятнее видеть код, отредактированный следующим образом:
Код:
Class Template
{
    function display($fullname, $array)
   {
 
   }
}

Если выше показанный мною подход к оформлению кода не верен или не удобочитаем, то скажите в чем моя ошибка, я буду рад рости над собой)

Цитата:
$output = ob_get_clean();

Советутете ставить пробел слева и справа от знака присваивания и наверное от знаков логических операций?

В данном случае это Объектно-Орентированный подход к программированию. Смысл шаблонизации в том, что в коде своего приложения ты вызываешь функции, которые присваивают шаблону переменные, а потом выводят шаблон. Тоесть шаблонизатор получается как бы отдельным приложением, для которого ядро сайта готовит данные и потом их передаёт ему. А шаблонизатор потом их выводит уже после того, как ядро сайта даёт команду на вывод. Самый яркий пример шаблонизатора (не лучший на мой взгляд, но всё же его юзают милионы) это Smarty (http://smarty.php.net). Взгляни как он работает и можешь написать что-то простенькое на его примере и поймёшь насколько это удобно. Что бы понять - надо попробовать.


 

Member
Статус: Не в сети
Регистрация: 18.11.2002
Откуда: не вернуться
Кстати именно на тему разделения логики я сейчас пишу статью,
и уже веду переговоры с одним популярным сайтом на счёт публикации.

Если там меня пошлют нафик, то помещу на хомячёк, и дам вам всем почитать,
пока что мне сказали что реализация статьи хромает и требуется доработка,
однако как раз для такого случая информация в ней очень даже ценная.

Как говорится пожелайте мне удачи... (это может стать моим звёздным часом)

_________________
Летели гуси-лебеди, а им навстречу - воробьи-пингвины и соловьи-страусы...


Показать сообщения за:  Поле сортировки  
Начать новую тему Новая тема / Ответить на тему Ответить  Сообщений: 1267 • Страница 9 из 64<  1 ... 6  7  8  9  10  11  12 ... 64  >
-

Часовой пояс: UTC + 3 часа


Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 1


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Перейти:  
Создано на основе phpBB® Forum Software © phpBB Group
Русская поддержка phpBB | Kolobok smiles © Aiwan