Модераторы: skyboy, MoLeX, Aliance, ksnk

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Движок для сайта, Пишем с нуля 
:(
    Опции темы
Alexey007
Дата 2.5.2007, 14:48 (ссылка) |   (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 129
Регистрация: 30.3.2007

Репутация: 1
Всего: 1



Решил написать новый движок, буду очень признателен за советы и полезные линки, по ходу дела smile .. CMS, вроде так теперь называется smile 
Это может выглядеть как и урок для начинающих програмистов smile 
1. Пути к папкам и их значения:
site/                               Главная директория сайта, собственно
site/configuration.php   Файл главных настроек сайта
site/install                      Файлы инсталяции движка
site/administrator          Админ-центр
site/includes                  Различные модификации(сначала будет только новости)
site/class                       Различные классы
site/logs                        Файлы, в которых будут сохранены ошибки различных кодовsmile
site/pages                     Файлы текстов
site/templates               Файлы шаблонов
site/templates/images   Картинкиsmile
P.S. Скажу сразу, делаю постепенно.. install и administrator буду делать в конце

2. Настройки: site/configuration.php:
Код

//База данных
$Config_host = 'localhost';
$Config_database = 'site';
$Config_user = 'root';
$Config_password = '';
//Путь к главной директории
$Config_absolute_path = '/home/localhost/WWW/site';

P.S. Данный файл будет в создаваться автоматически в инсталяции.

3. Первый класс, подключение к БД: site/class/mysql.php:
Код

class mysql
{
     var $Row;                                   // Current row number
     var $Link_ID    = 0;                     // Result of mysql_connect()
     var $Query_ID   = 0;                  // Result of most recent mysql_query()
     var $Record     = array();            // Current mysql_fetch_array()-result
     var $error_file = 'logs/log.txt';    //Save logs error to...
     var $Errno      = 0;                      // Error state of query
     var $Error      = "";

     //Сохранение ошибок
     function add_error_log ($msg){
        $file = fopen($this->error_file, "a");
        fwrite($file,
"[".date('D M j G:i:s Y')."] [DATABASE ERROR] $msg
                                  [ERRNO] $this->Errno
                                  [ERROR] $this->Error
");
          fclose($file);
     }

     //соединение с БД
     function connect($Config_host, $Config_user, $Config_password, $Config_database) {
          if($this->Link_ID == 0) {
               $this->Link_ID = mysql_pconnect($Config_host, $Config_user, $Config_password);
               if (!$this->Link_ID) {
                    $this->add_error_log("Link_ID == false, connect failed");
                    header();
               }
               $SelectResult = mysql_select_db($Config_database, $this->Link_ID);
               if(!$SelectResult) {
                    $this->Errno = mysql_errno($this->Link_ID);
                    $this->Error = mysql_error($this->Link_ID);
                    $this->add_error_log("База данных ".$Config_database." не существует");
                    exit;
               }
          }
     }

     //отправка запроса
     function query($Query_String) {
          $this->connect();
          $this->Query_ID = mysql_query($Query_String,$this->Link_ID);
          $this->Row = 0;
          $this->Errno = mysql_errno();
          $this->Error = mysql_error();
          if (!$this->Query_ID){
                 $this->add_error_log("Invalid SQL: ".$Query_String);
          }
          return $this->Query_ID;
     }

     //Отключение от БД 
     function close(){
          if($this->Link_ID != 0) mysql_close($this->Link_ID);
     }
}

P.S. Сразу вопрос к знатокам: Как брать значение пути к ЛОГ файлам брать из файла настроек?

4. Файл site/index.php:
Код

  define( '_VALID_MOS', 1 );

  // Если файл configuration.php не создан, нужно для инсталяции
  if (!file_exists( 'configuration.php' )) {
    //Заносим в переменную $self путь к каталогу в котором размещен скрипт, относительно localhost
     $self = rtrim( dirname( $_SERVER['PHP_SELF'] ), '/\\' ) . '/';
     //Перенаправляем пользователя в модуль инсталяции CMS.
     header("Location: http://" . $_SERVER['HTTP_HOST'] . $self . "install/index.php" );
     exit();
  }

  // Загрузка конфигурации сайта
   include_once( 'configuration.php' );

  // Загрузка классов сайта
   include_once( 'class/mysql.php' );

  // Подключение класса MYSQL и подключение к базе
  $mysql = new mysql($Config_host, $Config_user, $Config_password, $Config_database);
  $mysql->connect($Config_host, $Config_user, $Config_password, $Config_database);

  //Вставка страниц
  if(isset($_GET[ 'page' ])){
    // Открываем файл
    $fd = @fopen("pages/".$_GET[ 'page' ].".html", "r");
    // если файл не может быть открыт, сообщаем
    // об этом предупреждением в окне браузера
    if(!$fd) exit ( '404. Данной страницы не существует.
                     <br>
                     Проверьте правильность введенного URL.
                     <br>
                     <a href="/">На главную страницу сайта</a></center>' );
    // Помещаем содердимое файла в переменную $file
    $file = fread($fd, filesize("pages/".$_GET[ 'page' ].".html"));
    // Закрываем файл
    fclose($fd);
    //вставляем содержимое файла
    echo $file;
  }

  $mysql->close();

P.S. Вопрос к знатокам:
а)Как сделать, чтобы можно было вставлять не только файлы с разрешение .html, но и с другими?
б)Если ничего не передается(в поле $_GET), то подгружать index.html
в)Новости будут не в этой папке, как сделать критерий на новости?
г)Как разбить файл на 2 вывода, т.е. содержимое файла:
Код

Товары Товары Товары Товары Товары
##############
Цены Цены Цены Цены Цены Цены 
##############
Кол-во Кол-во Кол-во Кол-во Кол-во

Требуется примерно такое вывод:
Код

Наши товары:
Товары Товары Товары Товары Товары
Наши цены:
Цены Цены Цены Цены Цены Цены 
Кол-во всего:
Кол-во Кол-во Кол-во Кол-во Кол-во

Много уважаемые начинающие програмисты, спрашивайте, не стесняйтесьsmile Топик для всех smile 

Это сообщение отредактировал(а) Alexey007 - 2.5.2007, 15:02
PM MAIL   Вверх
WolfON
Дата 2.5.2007, 15:42 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 604
Регистрация: 19.7.2004

Репутация: 6
Всего: 8



2. лучше хранить настройки хотя-бы в ассоциативном массиве, хотя о вкусах не спорят
3. 
Код

require_once('site/configuration.php');

...
function ..(..) {
  global $Config_host;
  echo $Config_host;
}

4. а) в чем проблема? )
б) 
Код

if (empty($_GET)) {
//грузим индекс.хтмл
}

в) в смысле критерий? добавь еще одну строчку в бд или сформируй запрос для поиска
г) 
Код

$b = explode('##############', file_get_contents('test.txt'));
print "Наши товары:\n$b[0]\nНаши цены:\n$b[1]\nКол-во всего:\n$b[2]";

PM MAIL ICQ   Вверх
Alexey007
Дата 2.5.2007, 16:02 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 129
Регистрация: 30.3.2007

Репутация: 1
Всего: 1



Цитата(WolfON @  2.5.2007,  15:42 Найти цитируемый пост)
2. лучше хранить настройки хотя-бы в ассоциативном массиве, хотя о вкусах не спорят

Можно поподробнее?

Цитата(WolfON @  2.5.2007,  15:42 Найти цитируемый пост)
4. а) в чем проблема? )

тут надо регулярки использовать?

Цитата(WolfON @  2.5.2007,  15:42 Найти цитируемый пост)
в) в смысле критерий? добавь еще одну строчку в бд или сформируй запрос для поиска

Критерий - не нужно грузить страницу news, т.к. она существует в папке site/includes

Цитата(WolfON @  2.5.2007,  15:42 Найти цитируемый пост)
г)
Код

$b = explode('##############', file_get_contents('test.txt'));
print "Наши товары:\n$b[0]\nНаши цены:\n$b[1]\nКол-во всего:\n$b[2]";

наверное  я не так сформулировал задачуsmile
текст, который находится между #######, должен вставляться в шаблон оформления(в таблицу например для начала)

P.S. Прошу посмотреть с точки зрения безопасности smile 
а global ничего не портит в безопасности?


Это сообщение отредактировал(а) Alexey007 - 2.5.2007, 16:05
PM MAIL   Вверх
Alexey007
Дата 2.5.2007, 19:38 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 129
Регистрация: 30.3.2007

Репутация: 1
Всего: 1



Как можно целые функции запихнуть под определенной переменной, т.е. есть шаблон:
Код

    <head>
            <meta http-equiv="Content-Type" content="text/html; charset=windows-1251">
     <meta http-equiv="Content-Language" content="ru">
     <title>{TITLE}</title>
    </head>
    <body text="{BODY_TEXT}" bgcolor="(BG_COLOR)" link="{LINK}" vlink="{VLINK}" alink="{ALINK}">
 {PAGE}
    </body>
    </html>

нужно:
Заметь {****} на определенные значения...
Как заменить {PAGE}?
В него должна включаться функция
Код

 if(isset($_GET[ 'page' ])){
    // Открываем файл
    $fd = @fopen("pages/".$_GET[ 'page' ].".html", "r");
    // если файл не может быть открыт, сообщаем
    // об этом предупреждением в окне браузера
    if(!$fd) exit ( '404. Данной страницы не существует.
                     <br>
                     Проверьте правильность введенного URL.
                     <br>
                     <a href="/">На главную страницу сайта</a></center>' );
    // Помещаем содердимое файла в переменную $file
    $file = fread($fd, filesize("pages/".$_GET[ 'page' ].".html"));
    // Закрываем файл
    fclose($fd);
    //вставляем содержимое файла
    echo $file;
  }

Тексты наверно примерно так, а всю страницу пихать в переменную $text.:
Код

$text = str_replace('{****}', 'Сама переменная', $text);

Но все это очень громозко, можно как-нибудь облегчить код?

Задача: Совместить структуру и шаблон воедино, но чтобы не потерялась читабельность и быстрота выполнения скриптов.
PM MAIL   Вверх
Alexey007
Дата 2.5.2007, 20:08 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 129
Регистрация: 30.3.2007

Репутация: 1
Всего: 1



Тут назрела идея, записать эту функцию в файл, а потом просто его записывать в переменную и приставлять туда, куда нужно smile 

P.S. Неужели никто не может помочь smile , вроде тема нужная..
PM MAIL   Вверх
Glip
Дата 2.5.2007, 20:18 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 473
Регистрация: 30.12.2006

Репутация: 7
Всего: 18



до fopen() можно проверить is_readable() и "глотать" ошибки @ не есть гуд.


--------------------
user posted image
PM MAIL   Вверх
Alexey007
Дата 2.5.2007, 20:34 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 129
Регистрация: 30.3.2007

Репутация: 1
Всего: 1



Glip, что тогда посоветуешь?
PM MAIL   Вверх
Glip
Дата 2.5.2007, 20:43 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 473
Регистрация: 30.12.2006

Репутация: 7
Всего: 18



лично мне очень нравится
Код

    function error2Exception($code, $string, $file, $line, $context)
    {
        throw new BaseException($string, $code);
    }
    
    error_reporting(E_ALL | E_STRICT);
    set_error_handler('error2Exception', E_ALL | E_STRICT);



--------------------
user posted image
PM MAIL   Вверх
Alexey007
Дата 2.5.2007, 20:46 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 129
Регистрация: 30.3.2007

Репутация: 1
Всего: 1



Обновил, по советам Glip:
Код

  //Проверяем строку ввода на наличие страниц
    if(isset($_GET['page'])){
        //Проверка на отрытие файла
        if (!is_readable("pages/".$_GET['page'].".html")) exit ( $Config_error_404 );
        $fd = fopen("pages/".$_GET['page'].".html", "r");
        // если файл не может быть открыт, сообщаем
        // об этом предупреждением в окне браузера
        if(!$fd) exit ( $Config_error_404 );
        // Помещаем содердимое файла в переменную $file
        $file = fread($fd, filesize("pages/".$_GET[ 'page' ].".html"));
        // Закрываем файл
        fclose($fd);
        //вставляем содержимое файла
        echo $file;
    }


P.S. Сообщение об ошибке внес в файл конфигурации, чтобы код самого скрипта был чище, и не было посторонних текстов:
Код

  $Config_error_404 = '<center><font size="3" color="#D87F00"><b>404. Данной страницы не существует.</b></font>
                       <br>
                       Проверьте правильность введенного URL.
                       <br>
                       <a href="/">На главную страницу сайта</a></center>';


Добавлено через 4 минуты и 55 секунд
Glip, запостил сообщение, не увидев твое сообщениеsmile
можешь чуть-чуть объяснить что это за функция?
А потом как её вставлять?
PM MAIL   Вверх
Glip
Дата 2.5.2007, 20:51 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 473
Регистрация: 30.12.2006

Репутация: 7
Всего: 18



Код

"pages/".$_GET['page'].".html"

можно вынести в отдельную переменную. оно в 3-х местах уже одно и то же.

Добавлено @ 21:01
код взят из этого проекта
там же можно найти и пример использования
Код

    try {
........
some code
    } catch (Exception $e) {
        
        $uri = $_SERVER['HTTP_HOST'].$_SERVER["REQUEST_URI"];
        
        $msg =
            'class: '.get_class($e)."\n"
            .'code: '.$e->getCode()."\n"
            .'message: '.$e->getMessage()."\n\n"
            .$e->getTraceAsString()."\n"
            ."\n_POST=".var_export($_POST, true)
            ."\n_GET=".var_export($_GET, true)
            .(
                isset($_SERVER['HTTP_REFERER'])
                    ? "\nREFERER=".var_export($_SERVER['HTTP_REFERER'], true)
                    : null
            )
            .(
                isset($_SESSION) ? 
                    "\n_SESSION=".var_export($_SESSION, true)
                    : null
            );

        if (defined('__LOCAL_DEBUG__'))
            echo '<pre>'.$msg.'</pre>';
        else {
            mail(BUGLOVERS, $uri, $msg);
            sleep(10);
            
            if (!HeaderUtils::redirectBack())
                HeaderUtils::redirectRaw('/');
        }

отчет об ошибке в отладочной версии получаем на экран.
в рабочей - перенаправляем пользователя на главную страницу, а отчет об ошибке себе в почту.

Это сообщение отредактировал(а) Glip - 2.5.2007, 21:03


--------------------
user posted image
PM MAIL   Вверх
Alexey007
Дата 2.5.2007, 21:09 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 129
Регистрация: 30.3.2007

Репутация: 1
Всего: 1



Glip, это вообще для чего? я не вижу связи!
PM MAIL   Вверх
Glip
Дата 2.5.2007, 21:12 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 473
Регистрация: 30.12.2006

Репутация: 7
Всего: 18



Цитата(Alexey007 @  2.5.2007,  20:46 Найти цитируемый пост)
можешь чуть-чуть объяснить что это за функция?А потом как её вставлять?

про какую функцию вопрос?


--------------------
user posted image
PM MAIL   Вверх
Alexey007
Дата 2.5.2007, 21:20 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 129
Регистрация: 30.3.2007

Репутация: 1
Всего: 1



Glip
Код

    function error2Exception($code, $string, $file, $line, $context)
    {
        throw new BaseException($string, $code);
    }

поточнее надо, что за что отвечает(переменные)
Если менять нужно много значений, как быть?
И вопрос про замену {PAGE} на целую функцию остается нерешенным.
PM MAIL   Вверх
Glip
Дата 2.5.2007, 21:39 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 473
Регистрация: 30.12.2006

Репутация: 7
Всего: 18



Цитата(Alexey007 @  2.5.2007,  21:20 Найти цитируемый пост)
поточнее надо, что за что отвечает(переменные)

Цитата(Glip @  2.5.2007,  20:51 Найти цитируемый пост)
код взят из этого проектатам же можно найти и пример использования

если в двух словах, то:
ошибку (error) которую обрабатывать сложно, преобразуем в исключение (exception) для обработки которого есть конструкция try catch.
это один из варинтов.
при этом не прячем их совсем как @fopen и не показываем клиенту как fopen, а "ловим" и решаем что с ними дальше делать а в итоге фиксим со временем.

можно поискать еще что-нибудь на пердмет использования set_error_handler(). просто данным вариантом я пользуюсь и пока доволен.



--------------------
user posted image
PM MAIL   Вверх
Alexey007
Дата 2.5.2007, 21:50 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 129
Регистрация: 30.3.2007

Репутация: 1
Всего: 1



Вообщем вот что откапал:
http://php.ru/forum/viewtopic.php?t=1372&a...asc&start=0

По этому есть сразу вопрос, там написано, что так не безопасно. вопрос, как обезопасить себя?smile
Код

     function Parse() {
         # внимание! использование такого подхода НЕ безопасно
         # модифицируйте сами этот метод, для работы с массивами.
         reset($GLOBALS);
  
         while(list($name,$val) = each($GLOBALS)) {
  
             # выбираем только строки и числа
             if(is_string($val) OR is_int($val)) {
                 $this->buffer = str_replace('{'.$name.'}',$val,$this->buffer);
             }
         }
     }

Есть ли какие-нибудь ещё недочеты в данном классе (см. выше)
Glip, спасибо за подсказку функции set_error_handler(), изучаю...

Простите за такую настойчивость, но как быть, если мне {PAGE} надо заменить фнукцией?? smile 
 smile 

Это сообщение отредактировал(а) Alexey007 - 2.5.2007, 23:48
PM MAIL   Вверх
Всемогущий
Дата 3.5.2007, 06:08 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 440
Регистрация: 25.6.2006
Где: Челябинск

Репутация: 5
Всего: 13



Цитата(Alexey007 @  2.5.2007,  23:50 Найти цитируемый пост)
мне {PAGE} надо заменить фнукцией?? 

Код

<?php
function alert(){return '!!!!!!!!!!!!!!!!!!!!';}
function big(){return 'привет';}


$phrase  = "{|tegone|}здесь может быть любойтекст {|tegtwo|}";
$healthy = array('{|tegone|}','{|tegtwo|}', "и так далее");
$yummy   = array(big(), alert(), "ice cream");

echo $newphrase = str_replace($healthy, $yummy, $phrase);

?>


так?


--------------------
Цитата(smartov @  16.1.2007,  13:26 Найти цитируемый пост)
Видел я PHP код, который пишут наСильники, никогда на php не писавшие  :D  То еще зрелище. Все пытаются сделать руками и через ж (как в С привыкли). Все пытаются память освобождать итд итп. 
PM MAIL ICQ   Вверх
Alexey007
Дата 3.5.2007, 14:00 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 129
Регистрация: 30.3.2007

Репутация: 1
Всего: 1



Всемогущий, уже ближе к истине, но мнемного не то...
Представь, если у меня не один десяток тегов {}, то если я добавлю ещё какой-нибудь, то мне придется прописывать его в array и на то что заменять тоже...
Есть мысль, только как её осуществить?
Дело в следующем. Такой метод будет заменять сами функции(их скорее всего слишком много не будет), а класс будет саменять только переменные.
Опосаюсь за безопасность функции Parse, т.к. там идут глобальные переменные. Прошу помочь разобратьсяsmile
Код

  class template {

    var $template;

    # очистка буфера
    function Clear() {
     $this->template = "";
    }

    # Чтение буфера
    function Read() {
     $tmp = $this->template;
     $this->Clear();
     return $tmp;
    }

    //Вывод шаблона
    function Show() {
     print($this->Read());
    }

    // Подключение текстового файла
    function SendFile($filename) {
        if(file_exists($filename)) {
            $this->template .= join('',file($filename));
        }
    }

    //Замена...
    function Parse() {
        reset($GLOBALS);
        while(list($name,$val) = each($GLOBALS)) {
            # выбираем только строки и числа
            if(is_string($val) OR is_int($val)) {
                $this->template = str_replace('{'.$name.'}',$val,$this->template);
             }
         }
    }

  }

P.S. о вариант хороший, мне понравилсяsmile
PM MAIL   Вверх
Всемогущий
Дата 3.5.2007, 16:49 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 440
Регистрация: 25.6.2006
Где: Челябинск

Репутация: 5
Всего: 13



Цитата(Alexey007 @  3.5.2007,  16:00 Найти цитируемый пост)
Представь, если у меня не один десяток тегов {}, то если я добавлю ещё какой-нибудь, то мне придется прописывать его в array и на то что заменять тоже...

прописывать всё равно придёться.

пусть замен будут сотни...

Код

<?php
function alert(){return '!!!!!!!!!!!!!!!!!!!!';}
function big(){return 'привет';}
function big1(){return 'привет';}
function big11(){return 'привет';}
function big111(){return 'привет';}
function big1111(){return 'привет';}
function big11111(){return 'привет';}
function big111111(){return 'привет';}

$zamena['{|tegone|}']=alert();
$zamena['{|tegtwo|}']= big();
$zamena['{|teg100|}']= big1();
$zamena['{|teg110|}']= big11();
$zamena['{|teg111|}']= big111();
$zamena['{|teg101|}']= big1111();
$zamena['{|teg000|}']= big11111();
$zamena['{|teg001|}']= big111111();




$phrase  = "{|tegtwo|} здесь может быть любойтекст {|tegone|}";



echo $newphrase = str_replace(array_keys($zamena),array_values($zamena), $phrase);

?>





--------------------
Цитата(smartov @  16.1.2007,  13:26 Найти цитируемый пост)
Видел я PHP код, который пишут наСильники, никогда на php не писавшие  :D  То еще зрелище. Все пытаются сделать руками и через ж (как в С привыкли). Все пытаются память освобождать итд итп. 
PM MAIL ICQ   Вверх
Alexey007
Дата 3.5.2007, 17:45 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 129
Регистрация: 30.3.2007

Репутация: 1
Всего: 1



Всемогущий, спасибо,  с этим понятно.
Вот ещё штука: как разбить файл не по строчкам, а по какому-нибудь критерию?
Т.е. вот код:
Код

$file_open = fopen($file_path, "r");

fuction block{
//Тут функция(может массив?), которая разбивает переменную $file_open
//на несколько переменых, каждая из которых содержит текст, заключенный
//между тегами [BLOCK] и [/BLOCK], а затем эти переменные вставляются в шаблон (описано выше)
}


Примерное содержание файла:
Код

[BLOCK]
{text}
[/BLOCK]
[BLOCK]
{text}
[/BLOCK]


А код шаблона примерно такой:
Код

<table valign="top" border="0" width="100%" cellspacing="0" cellpadding="0">
  <tr>
    <td width="6" background="images/texttab_bg_l.gif"></td>
    <td valign="top" bgcolor="#F3F7FC">{TEXT}</td>
    <td width="6" background="images/texttab_bg_r.gif"></td>
  </tr>
</table>


+ Ко всему нужно делать проверку:
Если в файле нет таких тегов, то направлять в СОВЕРШЕННО другой шаблон

Это сообщение отредактировал(а) Alexey007 - 3.5.2007, 17:59
PM MAIL   Вверх
Vaulter
Дата 3.5.2007, 21:43 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Участник Клуба
Сообщений: 1724
Регистрация: 30.12.2002
Где: бункер

Репутация: 6
Всего: 22



[code=php]
<?php
/*
Vaulter 25/12/06 07:33:08 Volgograd
[email protected]
$FreeBSD$
*/
/**page class file
 * very impotant thing
 * load template
 * process it among other filters
 * filters:
 * @access public
 * @author Vaulter 25/12/06 08:20:48
*/
//define('_HTMLVARSTART','<var>');//'{{';
//define('_HTMLVAREND','</var>');//'}}';
/* can we use #:
for example
a href='^someobject.somemethod[someparam,someparam]'
<title> 
in blocks i can use shortholders
<b><var>name</var></b><i><var>descr</var></i>
*/
ob_start();//will catch all out of ____ and print it AFTER 
define('_RESSLASH','/');//we will write as form/perms @see function valid()
 /**logic is not MVC and much more flexible for programmer :)
 * each @filter@ class just parse itown blocks in full text (agc by reference)
 *        
 */

/** class of page! 
*
*fucking abstract thing. what it shall do    but short API must remain:
*        $page->reports['name'] = 
*        via some universalis and
*        iBl();//can we realize it?
*        build('form') - for absolete build_forms()
*        build('form','someid')
*       

Это сообщение отредактировал(а) Vaulter - 3.5.2007, 22:07
PM MAIL WWW ICQ   Вверх
Alexey007
Дата 3.5.2007, 21:52 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 129
Регистрация: 30.3.2007

Репутация: 1
Всего: 1



Vaulter, прости конешно, но при чем тут коды, которые ты написал? авторизация какая-то...
PM MAIL   Вверх
Vaulter
Дата 3.5.2007, 22:08 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Участник Клуба
Сообщений: 1724
Регистрация: 30.12.2002
Где: бункер

Репутация: 6
Всего: 22



в кратце все просто
лежит 
html/default.html
Код

<!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">
<head>
    <title><block id='title' /></title>
    <meta http-equiv="Content-Type" content="text/html; charset=windows-1251" />
    <meta name="description" content="{{%meta.description%}}" />
    <meta name="keywords" content="{{%meta.keywords%}} />
    <meta name="author" content="Vaulter" />
    <link rel="stylesheet" type="text/css" href="css/gazeta.hm.css" />
</head>
<body>
    <div id='wrapper'>
        <div id='header' >
            header
        </div>
    
        <div id='innerwrapper'>
            <div id='left'>
                <h4>Главное меню</h4>
                <fieldset id='firsttab'><legend>Авторизация</legend>
                    <block id='mainmenu' src='mainmenu'/>
                </fieldset>
                <fieldset id='secondtab'><legend>Модули</legend>
                <block id='modulesmenu' ibl='module.menu'>
                    <a href='{{%url%}}'>{{%alias%}}</a><br />
                </block>
                </fieldset>
            </div>
            <div id='content'>    
                <block id='content' />
            </div>

        </div>
    </div>
        <div id='footer' title='здесь просто список сообщений системы, также можно сделать скажем, плавно открывающийся снизу страницы слой, в котором будут эти сообщения
        пока для простоты селект:'>
            <select style='width:100%' >
            <block id='sessmess' ibl='session.messages'>
                <option>{{%message%}}</option>
            </block>
            </select>
        </div>
</body>


ну и все это соответственно по
запросу index.html шевелится и живет smile

 smile 


--------------------
PM MAIL WWW ICQ   Вверх
Alexey007
Дата 3.5.2007, 22:13 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 129
Регистрация: 30.3.2007

Репутация: 1
Всего: 1



Vaulter,  а создать свою ветку форума можешь, вроде не новичок на форуме смотрю?

Тут идет создание движка сайта.. Пытаюсь его сделать Я! ну помогают мне конешноsmile
Так вот, обсуждается этот движок, а не какие иначе.

Модератор, удалите пожалуйста последние сообщения, корорые идут не по теме.
Дата 3.5.2007, 21:43
Дата 3.5.2007, 21:52
Дата 3.5.2007, 22:08
И это подредактируйте тоже, пожалуйста



Добавлено @ 22:19
Всемогущий, скажи пожалуйста, а если создать "шаблон" средствами замены str_replace, т.е. вручную записать все замены {****}, от этого производительность не изменится?

Или можно как-то по-другому сделать?
Или помоги пожалуйста решить вопрос о безопасности(я там в коде показал где-именно + описал в чем проблема)

Это сообщение отредактировал(а) Alexey007 - 3.5.2007, 22:21
PM MAIL   Вверх
Всемогущий
Дата 4.5.2007, 08:44 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 440
Регистрация: 25.6.2006
Где: Челябинск

Репутация: 5
Всего: 13



Цитата(Alexey007 @  3.5.2007,  19:45 Найти цитируемый пост)
Вот ещё штука: как разбить файл не по строчкам, а по какому-нибудь критерию?

зачем?


--------------------
Цитата(smartov @  16.1.2007,  13:26 Найти цитируемый пост)
Видел я PHP код, который пишут наСильники, никогда на php не писавшие  :D  То еще зрелище. Все пытаются сделать руками и через ж (как в С привыкли). Все пытаются память освобождать итд итп. 
PM MAIL ICQ   Вверх
Alexey007
Дата 4.5.2007, 11:00 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 129
Регистрация: 30.3.2007

Репутация: 1
Всего: 1



Всемогущий, Потому что вот так надо! каждый текст нужно вставить в отдельную таблицу... По дизайну...
PM MAIL   Вверх
Всемогущий
Дата 4.5.2007, 11:17 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 440
Регистрация: 25.6.2006
Где: Челябинск

Репутация: 5
Всего: 13



Alexey007
Неужеле вы собираетесь хранить всю информацию в одно месте(одном файле)?

расскажите где оправдана такая схема?

Код

<?php

$string='[BLOCK]
{text}
[/BLOCK]
[BLOCK]
{text}
[/BLOCK]';
 preg_match_all("/(?<=\[BLOCK\]).+(?=\[\/BLOCK\])/sU", $string, $matches);
              print_r($matches);

?>


Добавлено через 1 минуту и 24 секунды
Цитата(Alexey007 @  4.5.2007,  13:00 Найти цитируемый пост)
Потому что вот так надо! 
 smile 



--------------------
Цитата(smartov @  16.1.2007,  13:26 Найти цитируемый пост)
Видел я PHP код, который пишут наСильники, никогда на php не писавшие  :D  То еще зрелище. Все пытаются сделать руками и через ж (как в С привыкли). Все пытаются память освобождать итд итп. 
PM MAIL ICQ   Вверх
Alexey007
Дата 4.5.2007, 11:25 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 129
Регистрация: 30.3.2007

Репутация: 1
Всего: 1



Всемогущий, вот ответ:
пример

Как видно, здесь на глабной странице есть 3 блока...
Но тут каждый текст хранится в отдельном файле.. а если редактору понадобиться создать ещё блок? он будет в тупике

Информацию ДАННОЙ страницы буду хранить в одном файле.
т.е. страница index.php, будет соответствовать index.txt, а не index1.txt; index2.txt; .....

А по поводу чтения файла, как наиболее безопасно?
PM MAIL   Вверх
Всемогущий
Дата 4.5.2007, 11:46 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 440
Регистрация: 25.6.2006
Где: Челябинск

Репутация: 5
Всего: 13



для того и нужен шаблон
Цитата(Alexey007 @  3.5.2007,  19:45 Найти цитируемый пост)
Код

<table valign="top" border="0" width="100%" cellspacing="0" cellpadding="0">
 <tr>    
     <td width="6" background="images/texttab_bg_l.gif"></td>
     <td valign="top" bgcolor="#F3F7FC">{TEXT}</td>
     <td width="6" background="images/texttab_bg_r.gif"></td>
 </tr>
</table>

а я возьму и добавлю новый блок
Код

<table valign="top" border="0" width="100%" cellspacing="0" cellpadding="0">
 <tr>    
     <td width="6" background="images/texttab_bg_l.gif"></td>
     <td valign="top" bgcolor="#F3F7FC">{здесь будут новости}</td>
     <td width="6" background="images/texttab_bg_r.gif"></td>
 </tr>
  <tr>    
     <td width="6" background="images/texttab_bg_l.gif"></td>
     <td valign="top" bgcolor="#F3F7FC">{меню А}</td>
     <td width="6" background="images/texttab_bg_r.gif"></td>
 </tr>
</table>





--------------------
Цитата(smartov @  16.1.2007,  13:26 Найти цитируемый пост)
Видел я PHP код, который пишут наСильники, никогда на php не писавшие  :D  То еще зрелище. Все пытаются сделать руками и через ж (как в С привыкли). Все пытаются память освобождать итд итп. 
PM MAIL ICQ   Вверх
Alexey007
Дата 4.5.2007, 11:55 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 129
Регистрация: 30.3.2007

Репутация: 1
Всего: 1



Всемогущий,
Цитата(Alexey007 @  4.5.2007,  11:25 Найти цитируемый пост)
а если редактору понадобиться создать ещё блок? он будет в тупике

 Потому что он полный ноль в тегах и ничо не знает в HTML!!!
можно конешно воспользоваться проверенным способом str_replace(), то тогда шаблон будет неудобаен в плане, что будет 2 файла block_top и block_bottom

А дизайнеру будет не очень удобно так возиться!
PM MAIL   Вверх
Всемогущий
Дата 4.5.2007, 11:58 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 440
Регистрация: 25.6.2006
Где: Челябинск

Репутация: 5
Всего: 13



Цитата(Alexey007 @  4.5.2007,  13:25 Найти цитируемый пост)
А по поводу чтения файла, как наиболее безопасно?

http://php.novgorod.ru/manual/ru/function.readfile.php
http://php.novgorod.ru/manual/ru/function....et-contents.php

Добавлено через 1 минуту и 56 секунд
Цитата(Alexey007 @  4.5.2007,  13:55 Найти цитируемый пост)
 Потому что он полный ноль в тегах и ничо не знает в HTML!!!

 smile покажите мне его  smile такие повымерли давно smile 


--------------------
Цитата(smartov @  16.1.2007,  13:26 Найти цитируемый пост)
Видел я PHP код, который пишут наСильники, никогда на php не писавшие  :D  То еще зрелище. Все пытаются сделать руками и через ж (как в С привыкли). Все пытаются память освобождать итд итп. 
PM MAIL ICQ   Вверх
Alexey007
Дата 4.5.2007, 12:15 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 129
Регистрация: 30.3.2007

Репутация: 1
Всего: 1



Всемогущий, мне не до шуток smile 

По поводу ссылок, спасибо, но у меня же есть чтение из файла. только вот не понимаю что мне надо изменить)

Так как быть с шаблоном(замену верха и низа не хочется smile ), и ещё:

Цитата(Alexey007 @  3.5.2007,  17:45 Найти цитируемый пост)
+ Ко всему нужно делать проверку:Если в файле нет таких тегов, то направлять в СОВЕРШЕННО другой шаблон


Цитата(Alexey007 @  3.5.2007,  14:00 Найти цитируемый пост)
Опосаюсь за безопасность функции Parse, т.к. там идут глобальные переменные. Прошу помочь разобраться


Цитата(Всемогущий @  4.5.2007,  11:58 Найти цитируемый пост)
  покажите мне его   такие повымерли давно  

Так нужно ещё и для удобства!

Цитата(Alexey007 @  3.5.2007,  22:13 Найти цитируемый пост)
Добавлено @ 22:19Всемогущий, скажи пожалуйста, а если создать "шаблон" средствами замены str_replace, т.е. вручную записать все замены {****}, от этого производительность не изменится?


P.S. прошу ответить по возможности на все, что щас написал smile 
Буду ОЧЕНЬ признателен smile 
PM MAIL   Вверх
Всемогущий
Дата 4.5.2007, 12:29 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 440
Регистрация: 25.6.2006
Где: Челябинск

Репутация: 5
Всего: 13



Давай поговорим об этом потом,и займёмся реализацией конкретных модулей: это будет гораздо интересней.


--------------------
Цитата(smartov @  16.1.2007,  13:26 Найти цитируемый пост)
Видел я PHP код, который пишут наСильники, никогда на php не писавшие  :D  То еще зрелище. Все пытаются сделать руками и через ж (как в С привыкли). Все пытаются память освобождать итд итп. 
PM MAIL ICQ   Вверх
Alexey007
Дата 4.5.2007, 12:51 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 129
Регистрация: 30.3.2007

Репутация: 1
Всего: 1



Всемогущий, предлагаешь заняться структурой?
Дело в том, что я даж не знаю как разбить шаблоны от кода сразу...
В каких форматах лучше хранить все модули? (т.е. все кроме index.php)
Как защитить файл configuration.php от просмотра посторонних глаз.
Как защитить эти файлы ВООБЩЕ от просмотра, без гл. "руководителя" index.php?
Может так?
Код

defined( '_VALID_MOS' ) or die( 'Просмотр невозможен!' );

Это если учесть, что у меня в index.php строчка:
Код

define( '_VALID_MOS', 1 );

Вроде на локалке работаетsmile
Какой комент можно написать к данной фитче?smile
Как определиться мне, менюшки всякие- это модули или это просто includes (в них тоже будут различные функции)

100% модули:
-новости
-отправка сообщения на почту
-Ч.А.В.О.(будет на скороsmile)

Все вроде пока.

Начну делать новости. сразу вопрос, что в модуле должно содержаться?
Впринципе структура новостей:
-подключение к таблице
-замены, сплошные%) (всякие теги типа [b] [u] [i] и т.д.) можно потом правда сделать, когда будем делать в шаблоне...

Это сообщение отредактировал(а) Alexey007 - 4.5.2007, 13:03
PM MAIL   Вверх
Всемогущий
Дата 4.5.2007, 14:40 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 440
Регистрация: 25.6.2006
Где: Челябинск

Репутация: 5
Всего: 13



BBcode

Добавлено через 1 минуту и 49 секунд
Предположим новости создаёт человек со знанием HTML


--------------------
Цитата(smartov @  16.1.2007,  13:26 Найти цитируемый пост)
Видел я PHP код, который пишут наСильники, никогда на php не писавшие  :D  То еще зрелище. Все пытаются сделать руками и через ж (как в С привыкли). Все пытаются память освобождать итд итп. 
PM MAIL ICQ   Вверх
CyClon
Дата 4.5.2007, 14:43 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 838
Регистрация: 3.12.2005

Репутация: 3
Всего: 4



Предпочитаю структуру примерно такую:

Код

/index.php
/rss.php
/kernel/config/
/kernel/classes/
/kernel/functions/
/kernel/images/
/kernel/misc/
/kernel/themes


То есть, чтобы в корне не валялась куча файлов, а все было в папке типа kernel, engine и т.п.


--------------------
user posted image
PM   Вверх
Всемогущий
Дата 4.5.2007, 14:51 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 440
Регистрация: 25.6.2006
Где: Челябинск

Репутация: 5
Всего: 13



Цитата(CyClon @  4.5.2007,  16:43 Найти цитируемый пост)
Предпочитаю структуру примерно такую:

а разве может быть иначе? smile 


--------------------
Цитата(smartov @  16.1.2007,  13:26 Найти цитируемый пост)
Видел я PHP код, который пишут наСильники, никогда на php не писавшие  :D  То еще зрелище. Все пытаются сделать руками и через ж (как в С привыкли). Все пытаются память освобождать итд итп. 
PM MAIL ICQ   Вверх
Alexey007
Дата 4.5.2007, 15:22 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 129
Регистрация: 30.3.2007

Репутация: 1
Всего: 1



Всемогущий, про bbcode знаюsmile но потом, ближе к концу, будет его отладка(надеюсь вы мне поможете)


CyClon, можно и так, особой роли не играет, но спасибо.. может так будет удобнее smile 


Всемогущий, а что насчет того что я писал(про защиту чтения сис. файлов)?

Цитата(Alexey007 @  4.5.2007,  12:51 Найти цитируемый пост)
 сразу вопрос, что в модуле должно содержаться?


Добавлено через 2 минуты и 32 секунды
 smile Мне интересно, как ты читаешь посты? половину ваще пропускаешь.. писал бы: "На твое усмотрение" "Можно и так" "Понятия не имею"
PM MAIL   Вверх
Всемогущий
Дата 4.5.2007, 15:51 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 440
Регистрация: 25.6.2006
Где: Челябинск

Репутация: 5
Всего: 13



Цитата(Alexey007 @  4.5.2007,  17:22 Найти цитируемый пост)
Мне интересно, как ты читаешь посты? 

Предпологается иерархия 
Вы : Руководитель 
Я : Консультант по техническим вопросам.
Из этого следует что те части которые были предложены вами и не вызвали  резкой критики(естественно аргументированой) с моей стороны принимаются по умолчанию.
к примеру 

Цитата(Alexey007 @  4.5.2007,  14:51 Найти цитируемый пост)
defined( '_VALID_MOS' ) or die( 'Просмотр невозможен!' );



и теперь что б не сочли за пустую болтавню продолжаем обсужать

предлагаю сделать модуль новостей с такой структурой:
в бд хранятся 2 таблицы:

первая собственно с текстами новостей
вторая с отзывами

Добавлено @ 15:54
Код

CREATE TABLE `news` (                                      
          `id` int(10) unsigned NOT NULL auto_increment,           
          `time` datetime NOT NULL,                                
          `zaglavie` text NOT NULL,                                
          `text` text NOT NULL,                                    
          `nb_img` tinyint(1) NOT NULL,                            
          `n_img` tinyint(1) NOT NULL,                             
                
          PRIMARY KEY  (`id`),                                     
          UNIQUE KEY `time` (`time`),                              
          FULLTEXT KEY `poisk` (`text`)                            
        ) ENGINE=MyISAM   DEFAULT CHARSET=cp1251  


Это сообщение отредактировал(а) Всемогущий - 4.5.2007, 15:56


--------------------
Цитата(smartov @  16.1.2007,  13:26 Найти цитируемый пост)
Видел я PHP код, который пишут наСильники, никогда на php не писавшие  :D  То еще зрелище. Все пытаются сделать руками и через ж (как в С привыкли). Все пытаются память освобождать итд итп. 
PM MAIL ICQ   Вверх
Alexey007
Дата 4.5.2007, 16:11 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 129
Регистрация: 30.3.2007

Репутация: 1
Всего: 1



Ну по поводу новостей таблица уже заказана с такими критериями:
Код

CREATE TABLE `news` (
  `id` bigint(20) NOT NULL auto_increment,
  `name` varchar(255) default NULL,
  `text` text,
  `site` varchar(50) default NULL,
  `date` date NOT NULL default '0000-00-00',
  `img` text NOT NULL,
  `visible` varchar(25) NOT NULL default 'on',
  PRIMARY KEY  (`id`)
);

Вот, нашкрябал.. Помогите улучшить и объединить 2 файла:
Файл коротких новостей
Код

$q="SELECT id, name, SUBSTRING_INDEX( text, ' ', 20 ) AS text, site, date, img, visible FROM news where visible='on' ORDER BY id desc";
    $res=mysql_query($q);
    while($row=mysql_fetch_array($res))
    {
     $id = $row[0];
     $name = $row[1];
     $text = $row[2];
     $site = $row[3];
     $date = $row[4];
     $img = $row[5];

   echo $name;
   echo $text;
   echo $site;
   echo $date;
   echo '<a href=&id='.$id.'>[Подробнее]</a>';
   echo '<hr>';
    }


 Файл длинных
Код

$row=mysql_fetch_array(mysql_query("SELECT * FROM news WHERE visible='on' and id=".$_GET['id']));
$id = intval($_GET['id']);
$sql = "(
        SELECT 0,`id`
        FROM `news`
        WHERE visible='on' and `id` <".$id."
        ORDER BY `id` DESC
        LIMIT 1
        )
        UNION (
        SELECT 1,`id`
        FROM `news`
        WHERE visible='on' and `id` >".$id."
        ORDER BY `id` ASC
        LIMIT 1
        )";
$query = mysql_query($sql) or die(mysql_error());
while(list($type,$nId) = mysql_fetch_row($query))
{
    if ($type == 0)
    {
    $back_to = '<a href=&id='.$nId.'>Предыдущая новость</a>';
    }
    elseif($type == 1)
      {
      $next_to = '<a href=&id='.$nId.'>Следущая новость</a>';
      }
}
echo '<table border="0" width="100%" cellspacing="0" cellpadding="0">
  <tr>
    <td width="33%" align="LEFT">'.$back_to.'</td>
    <td width="33%" align="CENTER"><a href="">Перейти на первую новостей</a></td>
    <td width="33%" align="RIGHT">'.$next_to.'</td>
  </tr>
</table>';
echo $row[name];
echo $row[text];
echo $row[site];
echo $row[date];
echo $row[img]);


P.S. Сразу скажу, что все эти echo данных так выглядеть НЕ должно... Все будет уходить в шаблон...
PM MAIL   Вверх
BuShaRt
Дата 4.5.2007, 16:12 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1391
Регистрация: 29.6.2006

Репутация: 4
Всего: 6



 smile 
Допусти мы тоже не знаем не HTML не BB, но вот почему то я вполне, представив, что их забыл, могу сделать так:

Первая надписть
Вторая

Третья


Как я это сделал? smile))))
Просто мне в помощь пришел интерфейс на JavaScript, который вполне понятен, если конечно человек вообще способен что-либо понимать smile

Мораль: Если нужны функции редактирования текста, то ненадо мудрить, а делайте панель форматирования текста на JS.

Пример.
PM MAIL   Вверх
Alexey007
Дата 4.5.2007, 16:14 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 129
Регистрация: 30.3.2007

Репутация: 1
Всего: 1



Цитата(Alexey007 @  4.5.2007,  12:51 Найти цитируемый пост)
В каких форматах лучше хранить все модули? (т.е. все кроме index.php)

Ещё немаловажно

Добавлено через 2 минуты и 1 секунду
BuShaRt, у меня форма добаления новостей будет такая же, как на этом форуме(похожая).
А bbcode буду использовать только для того, чтобы в поле текста не было всяких тегов закрученных!
PM MAIL   Вверх
Всемогущий
Дата 4.5.2007, 17:04 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 440
Регистрация: 25.6.2006
Где: Челябинск

Репутация: 5
Всего: 13



сейчас пришло время разнообразных функций. будем делать всё на них

пока оставлю SQL как есть но мне кажется, что новости лучше выбирать по времени.

Код

<?php
//маленькие новости
$q="SELECT id, name, SUBSTRING_INDEX(text, ' ', 20) AS text, site, date, img, visible FROM news where visible='on' ORDER BY id desc";



$row=mysql_fetch_array(mysql_query("SELECT * FROM news WHERE visible='on' and id=".$_GET['id']));

$sql = "( SELECT 0,`id`  FROM `news` WHERE visible='on' and `id` <".$id."    ORDER BY `id` DESC   LIMIT 1   )
          UNION (SELECT 1,`id` FROM `news` WHERE visible='on' and `id` >".$id." ORDER BY `id` ASC  LIMIT 1  )";


$query = mysql_query($sql) or die(mysql_error());



         echo  universaltable($query);

function universaltable($result,$how=3){
         $mmm=@mysql_num_rows ($result);
         if($mmm<1)return false;
         $max=ceil($mmm/$how)*$how;
         echo '<table width="100%" border="1" cellpadding="0" cellspacing="0" > ';
         for($i = 1; $i <= $max; $i++) {
         if(($dd%$how)==0) echo '<tr>'."\r\n";
         if(is_array($row = mysql_fetch_assoc($result))){
         echo myrow($row);}else echo myrow(false);
         if((($dd-($how-1))%$how)==0)echo'</tr>'."\r\n";$dd++;}
         echo'</table>';
}
function myrow($row){
         if($row==false) return '<td>'.'------'.'</td>'."\r\n";
         $otvet=print_r($row,1);


         return '<td align="center">'.$otvet.'</td>'."\r\n";

}
function Oglavlenie($page,$kolvo,$inone,$otstup,$nameVARpage) {
        //$nameVARpage имя переменной которая содержит номер страници
        //где были туда и придём
         $Murl='"http://'.$_SERVER['HTTP_HOST'].$_SERVER["SCRIPT_NAME"];
         $myqery=$_GET; unset($myqery[$$nameVARpage]);

         //первый параметр номер страницы которая сейчас активна
         //$kolvo количество строк на одной странице
         //$start переменная в которая говорит  с какой страници будет начинаться оглавление
         //$stop соответственно заканчиавется

         //узнаем максимальное число страниц
        $maxpage=ceil ($kolvo/$inone) ;
         //$otstup; максимальное колво видимых номеров страниц
         //$page; номер страницы
         //$kolvo; общее кол во линий
         //$inone; линий на страницу
         $maxpage=ceil ($kolvo/$inone) ;
         if($maxpage==0){return 'Ничего не найдено.';}
         if($maxpage==1){return 'Всего одна страница.';}

         $start=$page-$otstup;if($start<1)$start=1;
         $stop=$page+$otstup ;if($stop>$maxpage)$stop=$maxpage;
         foreach(range ($start,$stop) as $v){
         $myqery[$nameVARpage]=$v;
         $endqery=$Murl.'?'.http_build_query($myqery);
         if($v==$page){$v='<b>['.$v.']</b>';}
         $oglavlenie[]='<a href='.$endqery.'">'.$v.'</a>';}



         return  implode(' | '."\r\n",$oglavlenie).' Всего страниц('.$maxpage.')';
}
?>



--------------------
Цитата(smartov @  16.1.2007,  13:26 Найти цитируемый пост)
Видел я PHP код, который пишут наСильники, никогда на php не писавшие  :D  То еще зрелище. Все пытаются сделать руками и через ж (как в С привыкли). Все пытаются память освобождать итд итп. 
PM MAIL ICQ   Вверх
Alexey007
Дата 4.5.2007, 17:13 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 129
Регистрация: 30.3.2007

Репутация: 1
Всего: 1



Всемогущий, это, надеюсь не PHP5? на сервере 4 стоит
PM MAIL   Вверх
Всемогущий
Дата 4.5.2007, 17:37 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 440
Регистрация: 25.6.2006
Где: Челябинск

Репутация: 5
Всего: 13



единственное отличие http_build_query 
попроси SelenIT

а вообще скоро выйдет php6 нужно модернезировать сервер


--------------------
Цитата(smartov @  16.1.2007,  13:26 Найти цитируемый пост)
Видел я PHP код, который пишут наСильники, никогда на php не писавшие  :D  То еще зрелище. Все пытаются сделать руками и через ж (как в С привыкли). Все пытаются память освобождать итд итп. 
PM MAIL ICQ   Вверх
Alexey007
Дата 4.5.2007, 17:46 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 129
Регистрация: 30.3.2007

Репутация: 1
Всего: 1



Если бы я знал как...
Во чо пишет:
Код

Notice: Undefined index: id in Z:\home\localhost\www\site\engine\modules\news.php on line 7

Warning: mysql_fetch_array(): supplied argument is not a valid MySQL result resource in Z:\home\localhost\www\site\engine\modules\news.php on line 7

Notice: Undefined variable: id in Z:\home\localhost\www\site\engine\modules\news.php on line 9

Notice: Undefined variable: id in Z:\home\localhost\www\site\engine\modules\news.php on line 10
You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'ORDER BY `id` DESC LIMIT 1 ) UNION (SELECT 1,`id`


Добавлено @ 17:58
 smile а как обновить пхп на сервере, там вроде только адмни хостинга может...

Это сообщение отредактировал(а) Alexey007 - 2.2.2011, 19:21
PM MAIL   Вверх
Всемогущий
Дата 4.5.2007, 18:05 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 440
Регистрация: 25.6.2006
Где: Челябинск

Репутация: 5
Всего: 13



ругань связана с тем что mysql ничего не вернула.

попробуй какой нибудь простой запрос и кинь весь получившийся html  в приват
потом отредактирую сообщение

Добавлено через 2 минуты и 29 секунд
совсем забыл
подправим слегка
Код

  function universaltable($result,$how=3){
         if(!is_object ($result))return false;
         $mmm=mysql_num_rows ($result);
         if($mmm<1)return false;
         $max=ceil($mmm/$how)*$how;
         echo '<table width="100%" border="1" cellpadding="0" cellspacing="0" > ';
         for($i = 1; $i <= $max; $i++) {
         if(($dd%$how)==0) echo '<tr>'."\r\n";
         if(is_array($row = mysql_fetch_assoc($result))){
         echo myrow($row);}else echo myrow(false);
         if((($dd-($how-1))%$how)==0)echo'</tr>'."\r\n";$dd++;}
         echo'</table>';
}



--------------------
Цитата(smartov @  16.1.2007,  13:26 Найти цитируемый пост)
Видел я PHP код, который пишут наСильники, никогда на php не писавшие  :D  То еще зрелище. Все пытаются сделать руками и через ж (как в С привыкли). Все пытаются память освобождать итд итп. 
PM MAIL ICQ   Вверх
Alexey007
Дата 4.5.2007, 18:17 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 129
Регистрация: 30.3.2007

Репутация: 1
Всего: 1



Всемогущийтак в каких форматах мне хранить все файлы?
PM MAIL   Вверх
mishaSL
Дата 4.5.2007, 19:54 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Участник Клуба
Сообщений: 1046
Регистрация: 10.1.2007
Где: Санкт-Петербург

Репутация: 19
Всего: 54



Alexey007, даже не знаю с чего начать... начну с начала:

1. Мой совет по поводу этапности написания. Не надо начинать писать модули пока вы не определились окончательно с файловой структурой вашей CMS. Также было бы не плохо продумать структуру БД, тех таблиц которые не относятся к определенным модулям. 
Далее определиться какие системные классы (классы для работоспособности всей CMS) вам необходимы, к примеру класс для работы с БД, шаблонизатор (его вы уже упоменали) и т.д. Далее написать эти классы (и при этом хорошенько продумать их функции, а также удобство работы с этими классами). Если на данном этапе проблематично написание таких классов, то подобрать готовые и удобные для вас.
Дальше было бы логично начать с написания системы управления сайтом ("Админ-центр"). А потом уже пользовательскую часть.

2. По поводу конфига, на самом деле удобнее хранить конфиг в ассоциативном массиве. Но каждый делает как ему удобнее. Вы спрашивали что это:
Код

$config['db']['host'] = 'localhost';
$config['db']['user'] = '';
$config['db']['name_db'] = '';
$config['site']['path'] = '';
$config['site']['url'] = '';
// и т.д.

замечу что скорее всего вам понадобится адрес сайта, т.е. http://www.site.com

3. По поводу защиты файлов я до конца не понял, что вы конкретно имеете ввиду. Но скажу что я думаю по этому поводу: первое, насколько я понимаю все файлы будут подгружаться через index.php, тогда вполне будет достаточно определение константы, со следующей проверкой во всех файлах(то что вы предложили). Второе, правильно проставление прав доступа на файлы.

Дальше просто не по порядку замечания:

Цитата(Alexey007 @  2.5.2007,  16:02 Найти цитируемый пост)
а global ничего не портит в безопасности?

Использование global нежелательно.
Цитата(Alexey007 @  2.5.2007,  21:50 Найти цитируемый пост)
Простите за такую настойчивость, но как быть, если мне {PAGE} надо заменить фнукцией??

функция должна возвращать значение и ничего не выводить, и это значение подставляем вместо {PAGE}
Цитата(Alexey007)
Ко всему нужно делать проверку:Если в файле нет таких тегов, то направлять в СОВЕРШЕННО другой шаблон

Логика абсолютно непонятна.
Цитата(Alexey007)
скажи пожалуйста, а если создать "шаблон" средствами замены str_replace, т.е. вручную записать все замены {****}, от этого производительность не изменится?

Если я правильно понял о чем вы, то НЕТ.


Также было бы неплохо сразу продумать будете ли вы использовать ЧПУ, продумать структуру предполагаемых модулей.
Это то что пераое пришло на ум smile  

P.S. Также можете почитать эти темы:
http://forum.vingrad.ru/act-Search/CODE/sh.../cms/index.html


--------------------
Лучший способ научиться программированию - это посмотреть как это делают другие...
PM MAIL   Вверх
Alexey007
Дата 4.5.2007, 20:39 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 129
Регистрация: 30.3.2007

Репутация: 1
Всего: 1



mishaSL
Цитата(mishaSL @  4.5.2007,  19:54 Найти цитируемый пост)
замечу что скорее всего вам понадобится адрес сайта

Возможно, но в каких целях?

Цитата(mishaSL @  4.5.2007,  19:54 Найти цитируемый пост)
Использование global нежелательно.

это я понял, вот и спрашивал как поправитьsmile ну по идее ещё придумаю, может идея есть какая-нить?


Цитата(mishaSL @  4.5.2007,  19:54 Найти цитируемый пост)
функция должна возвращать значение и ничего не выводить, и это значение подставляем вместо {PAGE}

уже разобрались все вместе smile 


Цитата(mishaSL @  4.5.2007,  19:54 Найти цитируемый пост)
Логика абсолютно непонятна.

Ну например, если тегов таких нет, то при выводе страницы, например, автоматически "приставлять" эти теги. Но НЕ изменять при этом файл.

Цитата(mishaSL @  4.5.2007,  19:54 Найти цитируемый пост)
Если я правильно понял о чем вы, то НЕТ.

Тогда наверно использовать регулярки?

Вроде все ответил...
А по поводу начать с админки, я не знаю как будет что устроено, что именно можно будет изменять\удалять
PM MAIL   Вверх
Alexey007
Дата 8.5.2007, 13:53 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 129
Регистрация: 30.3.2007

Репутация: 1
Всего: 1



Шаблонный класс(отдельная функция и её проверка)
Помогите пожалуйста, знающие людиsmile
Проблема с реализацией:
Код

function get_templates_by_name($name){
       $i=0;
       $temp = '\''.implode("','",$name).'\'';
       $sql = 'SELECT * FROM `templates` where `name` IN ('.$temp.')';
       $result = mysql_query($sql) or die(mysql_error()) ;
       while ($line[$name[($i++)]] = mysql_fetch_assoc($result)) { }
   return $line;
       }
       $need=array('index', 'news_short');
       $bbb=get_templates_by_name($need) ;
       echo   $bbb['index'];

Таблица шаблонов:
Код

CREATE TABLE `templates` (
  `id` bigint(20) NOT NULL auto_increment,
  `name` varchar(255) NOT NULL default '',
  `template` text NOT NULL,
  PRIMARY KEY  (`id`)
);
INSERT INTO `templates` VALUES (1, 'index', 'ШАБЛОН');


А выводит ошибку:
Notice: Undefined offset: 2 in Z:\home\localhost\www\site\engine\modules\news.php on line 6
Array

Это сообщение отредактировал(а) Alexey007 - 2.2.2011, 19:25
PM MAIL   Вверх
-=Ustas=-
Дата 8.5.2007, 14:11 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Ustix IT Group
****


Профиль
Группа: Участник Клуба
Сообщений: 2222
Регистрация: 21.1.2005
Где: Краснодар

Репутация: 32
Всего: 69



Код

$line = array();
while ($row = mysql_fetch_assoc($result)) { $line[$name[($i++)]] = $row; }



--------------------
В искаженном мире все догмы одинаково произвольны, включая догму о произвольности догм.
-----
PM WWW ICQ Skype   Вверх
Alexey007
Дата 8.5.2007, 14:19 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 129
Регистрация: 30.3.2007

Репутация: 1
Всего: 1



-=Ustas=-, спасибо, ошибка убралась, но вот только теперь он вы водит Array
А должен шаблон(т.е. содержимое таблицы)
PM MAIL   Вверх
Alexey007
Дата 8.5.2007, 15:13 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 129
Регистрация: 30.3.2007

Репутация: 1
Всего: 1



Вот решение (Всемогущий конешно помог)

Код

  function get_templates_by_name($name){
    $temp = '\''.implode("','",$name).'\'';
    $sql = 'select name, template from `templates` where   `name` IN ('.$temp.')';
    $result = mysql_query($sql) or die(mysql_error()) ;
    while ($dtemp=mysql_fetch_assoc($result)) {
        $gotovo[$dtemp['name']]=$dtemp['template'];
    }
    return   $gotovo ;
   }
  $need = array('index', 'news_short', 'block');
  $bbb = get_templates_by_name($need) ;
  echo $bbb['news_short'];
 
PM MAIL   Вверх
-=Ustas=-
Дата 9.5.2007, 00:13 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Ustix IT Group
****


Профиль
Группа: Участник Клуба
Сообщений: 2222
Регистрация: 21.1.2005
Где: Краснодар

Репутация: 32
Всего: 69



Alexey007,  http://php.net/array

Добавлено через 2 минуты и 55 секунд
Точнее http://ru2.php.net/manual/en/language.types.array.php


--------------------
В искаженном мире все догмы одинаково произвольны, включая догму о произвольности догм.
-----
PM WWW ICQ Skype   Вверх
Alexey007
Дата 9.5.2007, 10:33 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 129
Регистрация: 30.3.2007

Репутация: 1
Всего: 1



-=Ustas=-, спасибоsmile пригодится, думаю, в процессе smile  smile 
PM MAIL   Вверх
v_enom
Дата 18.10.2007, 22:54 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 101
Регистрация: 11.10.2006

Репутация: нет
Всего: нет



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

Пожалуйста, напишите из чего состоит дивжок(самый простой) как работает, что от куда должен брать и с чем взамиодействовать.
В инете искал тему - не нашел, там одним готовые CMS

PM MAIL   Вверх
SergV
Дата 17.1.2008, 13:25 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 197
Регистрация: 4.8.2006
Где: Германия

Репутация: нет
Всего: 1



Цитата

Пожалуйста, напишите из чего состоит дивжок(самый простой) как работает, что от куда должен брать и с чем взамиодействовать.
В инете искал тему - не нашел, там одним готовые CMS

Это всё зависит от потребностей. Это может быть типа хтмл сайта с пхп или яваскрипт вставками к примеру для организации определённых форм, или ещё что. Или иметь один index.php, а всё что выводится формируется в нём через пхп скрипты связанные с базой данных, или если без базы данных, то с текстовыми файлам где лежит необходимый контент. Плюс это авторизация пользователей, плюс админка для управления сайтом, плюс что угодно.
Если хочешь узнать подробней, просто посмотри различные CMS в работе и их внутренности.
PM   Вверх
bash
Дата 19.2.2008, 22:38 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 2
Регистрация: 28.1.2008

Репутация: нет
Всего: нет



Цитата
Пожалуйста, напишите из чего состоит дивжок(самый простой) как работает, что от куда должен брать и с чем взамиодействовать.
В инете искал тему - не нашел, там одним готовые CMS



Пройди по этой ссылке:
http://www.nulled.ws/showthread.php?t=39068

Скачав этот курс и просмотрев его сразу отпадут все вопросы, поймёш что с чем взаимодействует, откуда берётся и счего начать...
PM MAIL   Вверх
Ответ в темуСоздание новой темы Создание опроса
Правила форума "PHP"
Aliance
IZ@TOP
skyboy
SamDark
MoLeX

Новичкам:

  • PHP редакторы собираются и обсуждаются здесь
  • Электронные книги по PHP, документацию можно найти здесь
  • Интерпретатор PHP, полную документацию можно скачать на PHP.NET

Важно:

  • Не брезгуйте пользоваться тегами [code=php]КОД[/code] для повышения читабельности текста/кода.
  • Перед созданием новой темы воспользуйтесь поиском и загляните в FAQ
  • Действия модераторов можно обсудить здесь

Внимание:

  • Темы "ищу скрипт", "подскажите скрипт" и т.п. будут переноситься в форум "Web-технологии"
  • Темы с именами: "Срочно", "помогите", "не знаю как делать" будут УДАЛЯТЬСЯ

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, IZ@TOP, skyboy, SamDark, MoLeX, awers.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | PHP: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.2277 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.