[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: Курс PHP. Урок №8 от IRBIS-team
twin
Если ты тут впервые, прочитай это!!!

Итоги тут.



Спустя 13 часов, 3 минуты, 16 секунд (17.01.2010 - 13:10) Lenarfate написал(а):
blink.gif а я как раз думал разделять главный шаблон на части biggrin.gif

Спустя 8 часов, 39 минут, 14 секунд (17.01.2010 - 21:49) Krevedko написал(а):
А мне все-таки кажется, что лучше хидер и футер вместе в один темплейт, а основной контент выводить через буферизацию.
Почему это лучше ? Проще с версткой...
когда хидер и футер отдельно-плывут блоки.
в плане того, что блок может начинаться в хидере, а заканчиваться в футере.
и получаются незакрытые теги

Спустя 8 минут, 34 секунды (17.01.2010 - 21:58) twin написал(а):
Слишком много получается перезаписей. На маленьких сайтах лучше с одним, не спорю. Потому так и начинал. Можно и тут так же сделать конечно. Я вот только всегда думаю - сэкономим несколько минут на разработке, а скрипт работать будет может быть десяток лет. И экономия эта заказчику боком может выйти. Ведь это нужно полностью весь вывод сунуть в переменную, а это память. Может оно и не критично конечно, но как то не по себе.
Впрочем ни кто не запрещает юзать и такую схему.

С другой стороны - а чего ему разъезжаться, шаблону? Он же сначала верстается целый, а потом только режется пополам...

Спустя 18 минут, 33 секунды (17.01.2010 - 22:16) Krevedko написал(а):
Ну если делается и отдается-то да
А если что-то менять надо...загружаю в дрим, а там разрывы тегов..его начинает плющить...))

Спустя 8 часов, 42 минуты, 13 секунд (18.01.2010 - 06:58) anonymouse написал(а):
Сорри за оффТоп - после просмотра данной темы - чет жрать захотелось...
27 кадр ? blink.gif

Спустя 1 час, 50 минут, 18 секунд (18.01.2010 - 08:49) twin написал(а):
А я же говорил - слюнки потекут. biggrin.gif

Спустя 2 часа, 47 минут, 22 секунды (18.01.2010 - 11:36) AmberLEX написал(а):
Цитата
А если что-то менять надо...загружаю в дрим, а там разрывы тегов..его начинает плющить.
то значит так верстали криво))) Готовый нормальный шаблон без проблем режется нормально и ниче никуда не плывет)

Спустя 56 минут, 31 секунда (18.01.2010 - 12:33) Shturman написал(а):
twin, а может, лучше так?

/**
* We connect a header
* Подключаем шапку
*/

require IRB_ROOT . '/skins/tpl/header.tpl';

/**
* We connect the footer
* Подключаем главный подвал сайта
*/

require IRB_ROOT . '/skins/tpl/footer.tpl';

Спустя 2 минуты, 37 секунд (18.01.2010 - 12:35) twin написал(а):
Можно и так. Не вижу особой принципиальной разницы...

Спустя 21 минута, 48 секунд (18.01.2010 - 12:57) Shturman написал(а):
И еще подумал, у нас админ должен сначала вручную включить Реврайт, а потом еще в конфиге поправить константу.
Может, лучше автоматизировать?

/**
* Includes mod rewrite
* Включает модуль перенаправления
*/

if(ini_set('RewriteEngine', 'on'))
{
define('IRB_REWRITE', 'on');
ini_set('RewriteCond', '%{REQUEST_FILENAME} !-f');
ini_set('RewriteCond', '%{REQUEST_FILENAME} !-d');
ini_set('RewriteRule', '^(.*)$ index.php?route=$1 [L,QSA]');
}
else
define('IRB_REWRITE', 'off');

Мне кажется, должно работать, но проверить не могу - на халявном хостинге запрещены любые настройки...

Спустя 9 минут, 25 секунд (18.01.2010 - 13:06) VolCh написал(а):
Цитата (AmberLEX @ 18.01.2010 - 11:36)
Цитата
А если что-то менять надо...загружаю в дрим, а там разрывы тегов..его начинает плющить.
то значит так верстали криво))) Готовый нормальный шаблон без проблем режется нормально и ниче никуда не плывет)

Режется-то он нормально, а вот если потом надо внести изменения, причем не тому, человеку, который резал и без исходников...

Всё же предпочтительней, имхо, собирать страницу из валидных кусков, причем вполне можно обойтись и без буферизации, что-то типа:

index.php

$content_filename='/modules/gallery/index.php';
$meta_filename='/modules/gallery/meta.php';
//....
require '/template.php';

template.php

<html>
<
head>
<?php include $meta_filename; ?>
</head>
<
body>
<?php include '/templates/header.php'; ?>
<?php
require $content_filename; ?>
<?php
include '/templates/footer.php'; ?>
</body>
</
html>


Цитата
Я вот только всегда думаю - сэкономим несколько минут на разработке, а скрипт работать будет может быть десяток лет. И экономия эта заказчику боком может выйти.

Работа с шаблонами и модулями, по-моему, как раз тот случай, когда стоит уделить побольше времени разработке ядра и шаблонизатора (включая структуру файлов), пускай даже с бОльшим потреблением ресурсов, но более простого в обращении. Память и место на диске только дешевеют и маловероятно, что заказчик перейдет на хостинг с меньшими параметрами, а вот дизайн (а занчит и верстка) за десяток лет наверняка будет меняться неоднократно и лучше, имхо, делать его максимально удобным для того, кто будет его менять через пяток лет, а не сэкономить сейчас пару десятков килобайт на памяти.

Спустя 3 минуты, 8 секунд (18.01.2010 - 13:10) VolCh написал(а):
Shturman
ini_set относится к настройкам PHP, а mod_rewrite к Апачу и обрабатывается до вызова PHP, так что такой вариант работать не будет. Для опредления включенного реврайта можно сравнивать например request_uri и php_self, но, имхо, может быть ненадежно

Спустя 5 минут, 57 секунд (18.01.2010 - 13:15) Shturman написал(а):
Цитата (VolCh @ 18.01.2010 - 10:10)
Shturman
ini_set относится к настройкам PHP, а mod_rewrite к Апачу и обрабатывается до вызова PHP, так что такой вариант работать не будет. Для опредления включенного реврайта можно сравнивать например request_uri и php_self, но, имхо, может быть ненадежно

А, ясно. Я просто пытался найти среди php_info() параметр, говорящий о включении реврайта. Может, плохо смотрел...
Чет не подумал, что он ведь правда до сценария срабатывает. blink.gif

Спустя 5 минут, 34 секунды (18.01.2010 - 13:21) VolCh написал(а):
Цитата (Shturman @ 18.01.2010 - 13:15)
А, ясно. Я просто пытался найти среди php_info() параметр, говорящий о включении реврайта. Может, плохо смотрел...

А нету его там sad.gif И способа на 100% убедиться, что реврайт включен в голову мне что-то не приходит, если не делать запрос сайта самого себя. unsure.gif


Спустя 6 минут, 27 секунд (18.01.2010 - 13:27) Shturman написал(а):
Хм... А file_get_contents сможет http.conf получить? biggrin.gif
Останется только в админку добавить функцию, чтобы распарсить его и где-то сохранить последнее состояние реврайта...

Спустя 30 минут, 13 секунд (18.01.2010 - 13:58) twin написал(а):
Shturman
Цитата
И еще подумал, у нас админ должен сначала вручную включить Реврайт, а потом еще в конфиге поправить константу.
Может, лучше автоматизировать?

А мы это автоматизируем. Чуть позже, когда будем делать инсталлятор.

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

А вообще то я пришел к такому решению не только из за ресурсов. Слишком разбросано и избыточно получалось.
Что касается изменения дизайна, то не так это сложно на работающем сайте. Если открыть исходник в браузере - очень легко видно где что находится. Ну поживем - посмотрим.


Спустя 3 часа, 22 минуты, 33 секунды (18.01.2010 - 17:20) Krevedko написал(а):
А мне нравится с буферизацияей. все очень удобно и наглядно.
Например хидер

ob_start();
include SETUP_DIR .'profile/read.php';
include SETUP_DIR .'skins/'. SKIN .'/join/'. $auth .'.html';
$auth = ob_get_contents();
ob_end_clean();

Основной контент

ob_start();
switch($page)
{
......
$main = ob_get_contents();
ob_end_clean();

футер
также как хидер
$footer = ob_get_contents();
ob_end_clean();

Ну и в конце
//Главный хтмл-модуль
include SETUP_DIR .'skins/'. SKIN .'/show.html';
где через эху и выводятся хидеры, футеры итд (футер в прицнипе можно туда сразу запхать. хидер можно выводить тоже через свич разный..например авторизован юзер или нет).
И блоки все закрыты, и овцы целы.

Спустя 1 час, 22 минуты, 14 секунд (18.01.2010 - 18:42) twin написал(а):
Ну вообще можно из этого собрать компромисс. Я как то в начале оговорился, что проект лучше делить на две стадии - разработка и продакшен. Вот в продакшене должно быть минимум инклюдов - файл с переменными, общими функциями, коннектом, может еще что всплывет, в продакшене (боевом варианте, с инсталлятором, тот, который будет ставится на хостинг) лучше засунуть в главный индекс. А так же из всех файлов кроме конфиги убрать комменты (вес меньше).

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

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

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

Критикуйте, может я не прав. Ведь на 50% ныне собранный движок состоит из ваших идей. А может и больше, я не мерял. Факт в том, что вместе мы - сила. smile.gif

Спустя 33 минуты, 44 секунды (18.01.2010 - 19:16) VolCh написал(а):
Цитата
В идеале из этого начинания должен родится конструктор. Не CMS, конструктор для разработчика. Для нас.

Вот так и рождаются фреймворки wink.gif

Спустя 13 минут, 29 секунд (18.01.2010 - 19:30) twin написал(а):
Именно. Ведь фреймворк - frame (рама, основа) work (работа)
То есть основа для работы.
Каждый прогер, хочет он или нет, всегда пишет свои наработки. Основу. Из которой потом лепит все и вся.
Может мы и фреймворк рожаем здесь - не суть важно. Важно научиться правильно думать. Я сильно сомневаюсь, что до финала доживет человека два-три. Но в процессе многие узнают о том, о чем и не подозревали. И пойдут своим путем.
А знаачит время пропало не зря. smile.gif

Спустя 1 час, 24 минуты, 9 секунд (18.01.2010 - 20:54) AmberLEX написал(а):
Я тоже знаю программистов (не много), но все пользуются своими наработками, у каждого есть свой типа фреймворк и на нем каждый делает быстро свою задачу.
Фреймворк постепенно совершенствуется и вообще потом красиво выходит все.
Правда сейчас заказчику нужно быстро и все сразу, если делать типа социаьной сети, то используют типа symfony чтоб не морочть голову, правда его тоже изучть нужно. Хотя мне кажется, если свой с умом делать, то и на своем можно все сделать, а не ошибки потом месяц ловить из-за каких-то недоработок. Правда сам с большими проектами не сталкивался, может и не так все smile.gif

Спустя 5 минут, 38 секунд (18.01.2010 - 20:59) AmberLEX написал(а):
Цитата
Я сильно сомневаюсь, что до финала доживет человека два-три.
А мне так кажется все так медленно движется, хочется больше, так чтоб загрузило biggrin.gif Хотя все равно очень хорошо, ведь делается это, как я понимаю, не в рабочее время а в свое свободное еще и бесплатно wink.gif , поэтому претензий быть не может smile.gif

Спустя 14 минут, 5 секунд (18.01.2010 - 21:14) twin написал(а):
Делается конечно в свободное, а потому и довольно скудное время. Хотя в принципе можно было написать уже стопицот уроков, которые были бы так же корявы, как у господина Попова.
И хотя схема, которую мы тут рассматриваем вызывает сарказм и снисходительные улыбки, она довольно живуча и самое главное - проста.

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

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

Завтра напишу 8-й урок, готовьте копья. smile.gif

Спустя 39 минут, 30 секунд (18.01.2010 - 21:53) AmberLEX написал(а):
Да, Попов то отдельный разговор, меня удивляет что это кто-то покупает (хотя на торенте и так скачать можно, там сейчас таких много появилось) biggrin.gif
А схема рабочая - это точно. Я по такому же принципу все делал, только сам доходил и ковырял чужой код, а тут теперь учат (раньше бы smile.gif ). Улыбки не улыбки, а средний сайт на такой схеме за два дня сделать можно и таких сайтов множество. А если кому уж очень серьезно нужно изучать - можно брать и изучать параллельно, читать книжечки (хорошие в основном на английском) и пробовать, изучать фреймворк какойто типа симфони, кодигнайтер или зенд - и стать супер-мега асом, только плюс biggrin.gif Но то, что дается здесь, мне очень когда то недоставало smile.gif Теперь так вообще - целое поле для усовершенствований и модернизаций, ну и нового много, ценного. Лог файлы я, например, вообще не делал, ошибки, если будут на сайте, тоже подробно высветит для хакера, ну и еще всяких важных мелочей много smile.gif

Спустя 13 часов, 31 минута, 9 секунд (19.01.2010 - 11:24) twin написал(а):
Вот что я придумал на досуге. Компромисик небольшенький.
Ведь даже смарта не брезгует писать в шаблон инклюды, почему бы и нам не позволить себе такую вольность. Вобщем схема такая, все как раньше, буфферизация, цельный шаблон, вывод контента в переменную. А вот менюшку сунем прямо инклюдом, чтоб избежать лишних перезаписей и сократить код. Для красоты и прозрачности в индексе загоним путь в константу:

define('IRB_GENERAL_MENU', IRB_ROOT . '/skins/tpl/menu.tpl');


А главный шаблон будет выглядеть так:

<!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>
<meta
http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title><?php
echo $title; ?></title>
<meta
name="keywords" content="<?php echo $keywords; ?>" />
<meta
name="description" content="<?php echo $description; ?>" />
<link
type="text/css" rel="stylesheet" href="<?php echo IRB_HOST . 'skins/css/style.css'; ?>" />
</head>
<body>

<div
id="container">

<div
id="header">
<h1><a
href="<?php echo IRB_HOST; ?>"><?php echo IRB_LANG_SITE_NAME; ?></a></h1>
<p><?php
echo IRB_LANG_SITE_SLOGAN; ?></p>
</div>

<div
id="menu">
<?php
include IRB_GENERAL_MENU; ?><br />
</div>

<div
id="content">
<?php
echo $content; ?>
</div>

</div>

</body>
</html>

<!-- skins/index.tpl end -->


Помоему вполне достойно смотрится. Принимаем?

Спустя 22 минуты, 31 секунда (19.01.2010 - 11:47) Shturman написал(а):
Красиво!
А Футер не забыл?

Спустя 5 минут, 50 секунд (19.01.2010 - 11:53) twin написал(а):
Так его теперь не будет отдельно... А это просто схема, добавим и футер потом.

Спустя 16 минут, 46 секунд (19.01.2010 - 12:09) Shturman написал(а):
Ясно. Twin, на будущее вопрос. JS будем свой писать или фрэймворк какой-нить начинать штудировать? Мне лично понравился Prototype.

Спустя 12 минут (19.01.2010 - 12:21) twin написал(а):
Из js фреймворков самый простой и легкий - jQuery. Prototype тяжеловат и вообще последнее время сдает позиции.
Изучать надо - не повредит. Многие вещи проще и красивее получаются с фреймворком. Но вообще по возможности будем писать сами.

Спустя 2 часа, 17 минут (19.01.2010 - 14:38) AmberLEX написал(а):
По-моему схема с шаблонами уже не упрощается, а усложняется.
В индексе.php подключается шаблон, в индексе.php контроллера, в самом контроллере
И в шаблонах: главный индекс.tpl, в папке pages файлы.tpl с переменными, в папке с новостями файлы.tpl с переменными - заблудиться можно, где какие переменные и дивы.
Взять ту же переменную $news - вообще сложно проследить что где и как подключается. Она присутствует почти в каждом файле, вообще не очевидно как шаблон работает.

Спустя 40 минут, 15 секунд (19.01.2010 - 15:19) twin написал(а):
Цитата
По-моему схема с шаблонами уже не упрощается, а усложняется.

Конечно. Разве может что то упрощаться, увеличиваясь в объеме...
Сайт растет, все усложняется.
Тут дело вот в чем. Верстальщику по барабану, где какие куски лежат. Он все равно верстает целые страницы. Потом это режется. А вот программисту удобнее, когдла все по полочкам.
Если это модуль новостей, то его шаблоны лежат в своей директории news А не куском в каком то общем большом шаблоне. Поверь, так удобнее, чем в одну кучу все лепить.

Спустя 18 минут, 42 секунды (19.01.2010 - 15:37) AmberLEX написал(а):
А кто резать будет? То что есть сейчас, верстальщик врядли поймет что и куда запихивать не зная структуры движка. Шаблон то он разрежет, а откуда ему знать что за папка pages и файл main.tpl и внем $news и news.tpl и в нем тоже $news, а есть еще папка news и в ней tpl и в них тоже какая-то $news и есть еще index.tpl а в нем $content. Ну, т.е. он как бы сам это делать будет, но каким образом он догадается как все это распределить по файлам и папкам правильно и что в переменной $news.

И в самом коде инклудятся один tpl, в индексе контроллера другой и в самом контроллере указывается шаблон, что парсится.

Спустя 16 минут, 45 секунд (19.01.2010 - 15:54) twin написал(а):
Натягивают верстку обычно программисты. Вообще я описывал уже порядок работы.
Сначала пишется техническое задание. Там подробно описывается вид и функционал каждой страницы сайта. Потом на основании этого тз художник (дизайнер) рисует макет. По этому макету верстальщик верстает целые страницы. Те, которые описаны в тз. Не структурно, просто внавал.
Параллельно прогер лепит движок, руководствуясь тем же тз. Потом просто режет верстку и вставляет куски туда, где уже имеются пустые шаблоны. С выводом переменных, но без верстки. После натяжки маркирует начало и конец шаблонов (скрипт я дал) и вся недолга. Верстальщик теперь видит в исходнике браузера целую страницу, такую как он и верстал. И видит адреса фрагментов. Если ему что то нужно поправить, легко узнать где лежит этот кусок.

Так что все безумно просто. А когда есть готовые модули (те же новости, регалка или еще чего), то там уже готовы пустые шаблоны. Остается только натянуть верстку.

Спустя 48 минут, 24 секунды (19.01.2010 - 16:42) AmberLEX написал(а):
А если у нас на каждой странице будут 3 последних новости, например, и 2 новых изображения из галереи, то к каждой странице include писать или вынести это за switch?

Спустя 12 минут, 51 секунда (19.01.2010 - 16:55) twin написал(а):
Если к каждой, то вообще в шаблон. как меню. Только так обычно не бывает.

Спустя 4 минуты, 38 секунд (19.01.2010 - 17:00) AmberLEX написал(а):
ну если это магазин, обычно постоянно каталог товаров сбоку, например, и сверху новый товар, случайный - на всех страницах могут присутствовать (обычно и присутствуют)

Спустя 4 минуты, 9 секунд (19.01.2010 - 17:04) twin написал(а):
Это частности уже. Нам пока с общей схемой надо разобраться.

Спустя 30 минут, 26 секунд (19.01.2010 - 17:34) A.V. написал(а):
twin,

по модулю галереи:

1. Когда пользователь переходит в режим full, он не может перемещаться вперёд-назад по изображениям - нет возможности.
2. В плане вёрстки full-controller немного отличается от собранных уже модуля новостей и read-controller'а. Почему бы не сделать, как привычнее,
но с двумя шаблонами? так, мне кажется, будет и удобнее тому, кто будет верстать сайт. Либо тогда лишний массив data[] там убрать...

Вот примерно так:

Спустя 45 минут, 11 секунд (19.01.2010 - 18:20) Хозяин Огня написал(а):
Твин, возникло два вопроса.
1. Может всё же оставить буферизацию? После отправления сообщения в гостевую не работает редирект:

Цитата
Warning: Cannot modify header information - headers already sent by (output started at X:\home\t.ru\www\skins\tpl\header.tpl:5) in X:\home\t.ru\www\modules\guestbook\gb_add_controller.php on line 35


2. Всё же кривовато выглядит это подключение модуля новостей на главную - приходится подгонять размер аннотации к высоте блока с основной информацией. Ну а сам модуль новостей выглядит уж совсем ущербно.

Да, и ещё - какой смысл в таком монструозном классе для постранички?

Спустя 37 минут, 47 секунд (19.01.2010 - 18:57) twin написал(а):
Буфферизацию оставим, решили вроде уже. В следующем уроке распишу.
На счет кривовато, это вопросы верстки. Нас пока касаются мало
А класс совсем не монструозный. В нем все, что необходимо для полноценной постранички. Есть возможность смены скина (могут понадобиться разные варианты на разных страницах), встроенный дебагер, возможность работать с табличными данными, как в галерее допустим сейчас. Вложенность легко реализуется. Впрочем сам посмотри.

Спустя 3 минуты, 39 секунд (19.01.2010 - 19:01) twin написал(а):
A.V.
Очень красиво. Используем наработку. Просто сейчас мы немного не это делаем. Нам нужно доделать ядро, потом будем модули шлифовать.

Спустя 18 минут, 12 секунд (19.01.2010 - 19:19) Хозяин Огня написал(а):
Цитата
На счет кривовато, это вопросы верстки. Нас пока касаются мало


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

Спустя 10 минут, 54 секунды (19.01.2010 - 19:30) twin написал(а):
нууу, это меняется на раз. Вместо константы ставим переменную и выводим сколько нужно в зависимости от страницы

Спустя 20 минут, 39 секунд (19.01.2010 - 19:51) Хозяин Огня написал(а):
Ок, туплю))


if($GET['page']=='main')
{
$irb_num_news = IRB_NUM_NEWS_MAIN;
$irb_num_word_news = IRB_NUM_WORD_NEWS_MAIN;
}

elseif($GET['page']=='news')
{
$irb_num_news = IRB_NUM_NEWS;
$irb_num_word_news = IRB_NUM_WORD_NEWS;
}



$res = mysqlQuery("SELECT `id`, `date`,`subtitle`,`public`,
DATE_FORMAT(`date`,'%d') AS `day`,
DATE_FORMAT(`date`,'%m') AS `month`,
DATE_FORMAT(`date`,'%Y') AS `year`,
SUBSTRING_INDEX(`text`,' ',"
. $irb_num_word_news .") AS `text`
FROM `"
. IRB_DB_PREFIX ."news`
WHERE `public` = 1
ORDER BY `id` DESC
LIMIT "
. $irb_num_news);

Спустя 8 минут, 24 секунды (19.01.2010 - 19:59) twin написал(а):
Переменным префикса не надо. Слишком длинно, да и ни к чему это. Вообще по хронометражу переменные, название которых больше 7-ми символов начинают резко тормозить процесс. Что то там как то интересно реализовано. Так что меру нужно знать.)))

Спустя 22 часа, 57 минут, 16 секунд (20.01.2010 - 18:57) Хозяин Огня написал(а):
Вот этот момент

<!-- ./skins/menu.tpl begin -->
<
div id="menu">
<
a href="<?php echo href('page=main', 'rem=main', 'num=1'); ?>"><?php echo $language['main']; ?></a> |
<
a href="<?php echo href('page=news', 'rem=read', 'num=1'); ?>"><?php echo $language['news']; ?></a> |
<
a href="<?php echo href('page=gallery', 'rem=read', 'num=1'); ?>"><?php echo $language['gallery']; ?></a> |
<
a href="<?php echo href('page=pages', 'rem=company', 'num=1'); ?>"><?php echo $language['company']; ?></a> |
<
a href="<?php echo href('page=pages','rem=contacts', 'num=1'); ?>"><?php echo $language['contacts']; ?></a>
</
div>
<!-- ./
skins/menu.tpl end -->


смущает. Не критично, но лучше сделать как в аттаче:

<!-- ./skins/menu.tpl begin -->
<
div id="menu">
|
<
a href="<?php echo href('page=main', 'rem=main', 'num=1'); ?>"><?php echo $language['main']; ?></a> |
<
a href="<?php echo href('page=news', 'rem=read', 'num=1'); ?>"><?php echo $language['news']; ?></a> |
<
a href="<?php echo href('page=gallery', 'rem=read', 'num=1'); ?>"><?php echo $language['gallery']; ?></a> |
<
a href="<?php echo href('page=contacts'); ?>"><?php echo $language['contacts']; ?></a> |
</
div>
<!-- ./
skins/menu.tpl end -->

Спустя 17 минут, 46 секунд (20.01.2010 - 19:14) twin написал(а):
В аттаче первый вариант. И на демке тоже. Я просто не успел изменения прописать.

Спустя 2 дня, 22 часа, 37 минут, 24 секунды (23.01.2010 - 17:52) AmberLEX написал(а):
Shturman
Цитата
Мне лично понравился Prototype.

twin
Цитата
Prototype тяжеловат и вообще последнее время сдает позиции.

Вот статистика, наткнулся нечаянно: http://www.google.com/trends?q=jquery%2C+p...ate=2008&sort=0

Спустя 1 месяц, 1 день, 16 часов, 47 минут, 12 секунд (25.02.2010 - 10:39) Evilsoul написал(а):
Всем начинающим как и сам Я настоятельно рекомендую использовать error_reporting(E_ALL | E_STRICT); - это поможет вам узнать много новых и интересных функций PHP

Спустя 5 минут, 57 секунд (25.02.2010 - 10:45) twin написал(а):
error_reporting(E_ALL|E_STRICT|E_ERROR|E_WARNING|E_PARSE|E_NOTICE|E_CORE_ERROR|E_CORE_WARNING|E_COMPILE_ERROR|E_COMPILE_WARNING|E_USER_ERROR|E_USER_WARNING|E_USER_NOTICE);
smile.gif

Спустя 15 минут, 10 секунд (25.02.2010 - 11:00) Evilsoul написал(а):
biggrin.gif biggrin.gif biggrin.gif Да, это поможет узнать еще больше функций

Спустя 8 дней, 1 час, 17 минут, 45 секунд (5.03.2010 - 12:18) KonstantinK написал(а):
twin: прошу прощения за офтоп - а более подробное описание темы "Статичные страницы" будет? Ну там со схемой и архивными файлами , а то ссылки на архивы пока не работают, мне все-таки трудно пока всю структуру уловить. Да и будет ли обсуждение темы на форуме чтоб конкретные вопросы позадавать?

Спустя 15 минут, 20 секунд (5.03.2010 - 12:33) twin написал(а):
Да, все будет, не успеваю за вами)))

Спустя 6 часов, 31 минута, 19 секунд (5.03.2010 - 19:04) twin написал(а):
KonstantinK

Обсуждение можешь прямо сейчас начинать, открывай тему и спрашивай. Кстати, архив на месте, смотри.

Спустя 17 дней, 1 час, 20 минут, 53 секунды (22.03.2010 - 20:25) Хозяин Огня написал(а):
А где можно скачать последний архив?

Спустя 7 минут, 9 секунд (22.03.2010 - 20:32) twin написал(а):
О, какие люди)))
Вот тут теперь все. Там много нового. И это посмотри место, может интересно будет.

Спустя 21 день, 15 часов, 14 минут, 21 секунда (14.04.2010 - 10:47) Guest написал(а):
twin

Учу уроки ваши. Не могу понять:


if(mysql_num_rows($res) > 0)
{
$tpl = getTpl('second/price_rows');

while($row = htmlChars(mysql_fetch_assoc($res)))
{
++$i;
$row['num'] = $i;
$rows .= parseTpl($tpl, $row);
}
}



Если так делать, то переменная где-то должна выводиться $rows. Так не работает, а если убрать переменную и написать echo то выводится.

Спустя 4 минуты, 20 секунд (14.04.2010 - 10:51) twin написал(а):
Она в шаблоне выводится. В шаблоне price_rows.tpl есть такая?

Спустя 2 минуты, 9 секунд (14.04.2010 - 10:53) Guest написал(а):
Нет, вот что есть и всё:


<!-- ./skins/tpl/second/price_rows.tpl begin -->
<
tr>
<
td><?php echo $tpl_num; ?></td>
<
td><?php echo $tpl_text; ?></td>
<
td><?php echo $tpl_price; ?> руб</td>
</
tr>
<!-- ./
skins/tpl/second/price_rows.tpl end -->



Спустя 5 минут, 18 секунд (14.04.2010 - 10:59) twin написал(а):
А, вон что... Не так понял.
Там же должен быть основной шаблон, в него и нужно вывести эту $rows... А нету. sad.gif
Точно, мой косяк. Поправлю. А пока можно посмотреть в аттаче рабочий скрипт (внизу итоговый файл есть).




Спустя 5 минут, 17 секунд (14.04.2010 - 11:04) Guest написал(а):
В итоговом файле тоже нету. А каким образом она должна выводиться и где

Спустя 11 минут, 47 секунд (14.04.2010 - 11:16) twin написал(а):
Дописал прям в уроке. smile.gif

Спустя 3 минуты, 5 секунд (14.04.2010 - 11:19) Guest написал(а):
О, дзинькую!

Спустя 5 дней, 8 часов, 55 минут, 24 секунды (19.04.2010 - 20:14) freed-master написал(а):
чет у меня непонятные траблы с CSS
в папке admin есть index.php, в который инклюдится index.tpl(к которому подключаются стили) и прочие файлы, вобщем все как в корневой директории. Но вот в корне все хорошо, а в админке стили не подключаются...
перепробовал всевозможные варианты путей - нифига...
указал абсолютный путь, используя константу ROOT, в ИЕ работает, в опере - нет
ни-иче не понимаю

и еще интересный момент, если указать путь /design/style.css, то подгружаются стили сайта, а не админки...

Спустя 1 час, 18 минут, 46 секунд (19.04.2010 - 21:33) twin написал(а):
Ничего не понял я.

Спустя 23 минуты, 57 секунд (19.04.2010 - 21:57) freed-master написал(а):
структура (не полная):

index.php
style.css
admin/
- index.php
- style.css


index.php - стили подключаются
...
<link type="text/css" rel="stylesheet" href="style.css" />
...


admin/index.php - стили НЕ подключаются
...
<link type="text/css" rel="stylesheet" href="style.css" />
...

Спустя 15 минут, 5 секунд (19.04.2010 - 22:12) twin написал(а):
А там у меня разве так?

Спустя 5 минут, 56 секунд (19.04.2010 - 22:18) freed-master написал(а):
Цитата
А там у меня разве так?
я упростил... даже в таком простейшем варианте стили админки не подключаются... ладно это кажется не по теме - перемещаюсь...

Спустя 25 минут, 44 секунды (19.04.2010 - 22:44) twin написал(а):
Ну упростил, так надо до конца было... И вопрос задаешь - почему не работает... А что все как попало - не пишешь.
Зачем стили сунул в папку с админкой? Реврайт заворачивает запрос на стили естественно.

Спустя 3 дня, 23 часа, 45 минут, 30 секунд (23.04.2010 - 22:29) ohxxx написал(а):
Задраствуй г-н Twin
Ну незнаю где писать но
гостевая на SQL

1. не работает на шаге 2 вот что выдаст
The template main/rows.tpl is absent in the specification

надо поправить
$cont = getTpl('main/rows'); 

написать вот так
$cont = getTpl('guest/rows'); 



2.Честно говоря по моему всё таки не совсем правильно сам курс гостевая на SQL изложен . Вообще то у меня есть идея как надо его изложить вот только столько времени нету sad.gif вот как с курсом по бд закончу сразу займуся если не поменяю приоритеты wink.gif его доработать и будет супер .


3.Еще вопрос там где не написано куда записывать код куда его писать ?

Шаг 2
Контроллер
Теперь открываем контроллер модуля и пишем в него это:

Это какой контролер который modules/main/controler.php ?
Если я угадал то надо бы добавить пишем тудато wink.gif

4. Чёто не нашол а где собственно вывод подключать что где писать ?
ато написанно в уроке
Дальше вступает в дело наш минишаблонизатор и нате вам - родственники.
Ну у меня ничего не выводится сижу ковыряю может наковыряю что и куда wink.gif
пока нашол только один вариант в файле
modules/main/view.php

исправить строчку
include './skins/tpl/main/show.tpl';

на такую
include './skins/tpl/guest/show.tpl';


По поводу урока Nr-8
Неплохо бы сделать памятку типа такой
с функциями которые есть в ядре
ф-я mysqlQuery - выполняет подключение к базе данных
ф-я reDirect - выполняет ....
Зачем это нужно ?
1.Чтобы было потом легче работать с ядром
2. Если пишеш что то свой справочный материал всегда нужен
3. В последующих курсах будет легче разобраться
+
Еще добавить в памятку что шаблоны туда то такие то файлы туда то ....
4. ДА и впринцепе работать используя памятку будет легче ( да я понимаю что потом она не будет нужна но на первых порах она обязательна

Я бы может быть и взялся за это но у меня и так счас дел не невпроворот может как нибудь потом.


С уважением Ohxxx

Спустя 19 часов, 54 минуты, 18 секунд (24.04.2010 - 18:23) twin написал(а):
Переписал полностью всю гостевуху и 7-8 уроки. И еще чего то дальше.
По поводу гостевой - я специально писал как продолжение, что бы показать, как с ядром работать. Отдельно она не нужна никому. Мне по крайней мере точно. smile.gif
Тут вопрос политический - все разработки в этом курсе будут базироваться на этом ядре. У меня меркантильный интерес.

А документацию конечно нужно делать, вот только обкатать его, что бы не переписывать по 10 раз.

Спустя 20 минут, 44 секунды (24.04.2010 - 18:44) ohxxx написал(а):
О супер всё именно так как я и думал. biggrin.gif

Спустя 3 часа, 23 минуты, 37 секунд (24.04.2010 - 22:08) ohxxx написал(а):
Добрый день г-н Twin
гостевая на SQL
урок 4 ошибочки
1. Наваерно торопился забыл поправить
не так
`name` = '". $POST['value1'] ."', 
`text` = '". $POST['value2'] ."'"

а так
`name` = '". escapeString($POST['value1']) ."', 
`text` = '". escapeString($POST['value2']) ."'"

2. Странно названеи архива guest2.zip да и смайликов внутри небыло думаю архив не тот
3. Я конечно в javascript полный ноль по даже скопировав смайлики всервно не заработало смайликос чёто я не увидел я их пробовал в водить не помоголо может я туплю где ?

по уроку 5
Вопрос конечно тупой но всё таки а попроще навигацию никак нельзя было прикрутить ? ( я посмотрел код ... мде для меня он лес непролазный)
Угу я заню ответ это типа навигация на все случаи жизни )) .
Но всё таки я бы предпочёл что попроще чтобы было бы понятно.



C уважением Ohxxx

Спустя 27 минут, 4 секунды (24.04.2010 - 22:35) twin написал(а):
1, 2 Исправил.
3. Проверил во всех браузерах - нормально работает...

А по поводу навигации, дык куда проще то еще? там всего три строчки... Сам класс то не нужно трогать пока. Работает и ладно.

Спустя 1 час, 3 минуты, 13 секунд (24.04.2010 - 23:38) ohxxx написал(а):
Тогда для тупых как смайлики писать то ?

у меня и smile.gif и [smile.gif] не работает то что в квадратных вообще не отображается пошл ещё раз проверять
хм может в пути неправильно чтото в эксплорере путь есть может это иззатого что уменя лежит не в папке WWW а в папке WWW/j_X/ н

разобрался нуда это изза путей
может так сразу прописать ?
'<img src="./'.IRB_ROOT.'/skins/images/smiles/1.gif" />'


Цитата (twin @ 24.04.2010 - 19:35)

А по поводу навигации, дык куда проще то еще? там всего три строчки... Сам класс то не нужно трогать пока. Работает и ладно.

Вот именно я в саму навигацию залез чтобы посмотреть как работает
и офигел. Просто я нелюблю подключать то что я не понимаю как работает . Атуту походу дела придётся...

Спустя 24 минуты, 41 секунда (25.04.2010 - 00:03) twin написал(а):
С путями да, наверное стоит подумать.
А с навигацией... Я вот понятия не имею, как устроен сервер MySQL, однако это не мешает им пользоваться.
Можно было конечно в контроллере полтора километра кода написать, но на то это и ядро, что бы там основной функционал был бы уже реализован и подключался тремя строчками. smile.gif
А разобраться - дело наживное. На самом деле ничего там сложного нет. Только кажется с непривычки.

Спустя 1 день, 21 час, 57 минут, 5 секунд (26.04.2010 - 22:00) ohxxx написал(а):
День добрый г-н Twin
SQL кнжка
урок 5-ть ошибка

Собственно вот:
modules/main/controller.php


а должно быть
modules/guest/read_controller.php


Ну потому что зачем навигация там где она не нужна wink.gif

Вот ещё один неправильный путь
вот (выводим меню навигации):
skins/tpl/main/show.tpl



Да и в шестом уроке тоже самое вроде



З.Ы. Всётаки с курсом бызовым по Бд я ещё дня три-четыре его карякать буду не успеваю времени маало счас. sad.gif

Спустя 20 минут, 58 секунд (26.04.2010 - 22:21) ohxxx написал(а):
Эм поповоду админ пенели

А зачем там без входа высвечивается меню со ссылками (правда они не пашут но всёже)

* Метаданные
* Главная страница
* Вторая страница
* Выход

У меня кстати ошибкау выдаёт админ панель когда в мета данные заходиш ( попробую разобраться счас)
Notice: Undefined index: guest in X:\home\my_sites.ru\www\gotv_SQL\admin\meta\read_controller.php on line 60

И ещё г-н Twin посмотри там архив конечный админка то нормально не пашет
ну . во первых там переключатели названия не поменялись с second на guest.
Пошол ковырять может чё соображу

Спустя 15 дней, 12 минут, 45 секунд (11.05.2010 - 22:34) ohxxx написал(а):
Добрый день г-н Twin

Про попводу SQL гостевой
Скажи а почему навигацию страниц ты сделал классом ?

Ведь наверно можно было бы простой ф-ей написать и загнанную эту ф-ю в дефаулт.пхп ну или ку у тебя сделано в отдельный файл.

Собственно спросил потому, что интересно. В чём собственно плюс такого решения. Да я в РНР мало знаю а ООП так вобще никак не знаю

Спустя 28 минут, 57 секунд (11.05.2010 - 23:02) twin написал(а):
Классом специально, что бы показать, в каких местах наиболее приемлимы ООП-шные решения.
Ну и постраничка не решается одной функцией, только несколькими. Поэтому классом удобнее многократно. Ведь интегрировать его можно всего тремя строчками, в отличии от набора функций. К тому же он многофункционален, пригодится в последующем.

С остальным на днях разберусь. Так как я наметил очередную перетряску (генеральную уборку) курса, накопилось уже много нестыковок.

Спустя 1 час, 4 минуты, 38 секунд (12.05.2010 - 00:07) ohxxx написал(а):
I.Эм... тогда неплохо бы пояснить как именно там навигация по страницам подключатся (а про сам код РНР) эта навигация ну самый минимум для особо одаренных... ( хотя бы так: чтобы можно было понимать что за параметры нужны и как её включать если понадобится в другом месте хоть какой нибудь минимум)

Извини конечно но это явно не пояснение для нуба (далее текст урока)....

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


II.По поводу Статических страниц

Вот я тупо вообще не могу понять зачем они нужны .Поэтому курс тупо понимаю пройти не могу не понимаю вообще о чём речь.

1. Нужно бы пояснить что это такое ( в моем понимании статические страницы это тупо хтмл код но я подозреваю что это не так потому что зачем то нужен их редактор )
2. Неплохо бы пару примеров где они могут пригодится (хотя бы просто написать в коде их обычно используют для того и для этого).

З.Ы. спасибо за внимание.

С уважением Ohxxx

Спустя 5 дней, 9 часов, 2 минуты, 2 секунды (17.05.2010 - 09:09) gripp написал(а):
Не могу понять - мы только гостевую будем хранить в базе данных, а все остальное в массивах в текстовых файлах? Объясните в чем преимущество такого подхода? (Или просто показаны варианты)...

Статистические страницы - почему статьи, тексты не держать в базе данных Mysql, где "..управляет записью, чтением и вообще работой с данными целый сервер, который дает кучу преимуществ.."
Хотелось бы подробнее рассмотреть взаимодействие php и mysql.


С уважением, gripp

Спустя 11 минут, 12 секунд (17.05.2010 - 09:20) twin написал(а):
Сервер таки да - дает массу преимуществ. Но только в том случае, если требуется постоянная работа с контентом - динамические изменения, выборки, сортировки, поиск и так далее. Статические же страницы не меняются бывает годами. Гонять второй сервер для того, чтобы сформировать статичный контент - накладно.

Именно для этого придумываются всевозможные способы и системы кэширования. То есть помещения в файлы результатов работы скриптов до тех пор, пока не произойдут какие то изменения.

Эту схему можно считать кэшем, просто мы изначально не напрягали SQL сервер и организовали статические странички (кэш).

Другие скрипты (допустим интернет-магазин, доска объявлений и прочее (сейчас готовится очень большая подборка таких решений) будут активно использовать БД. И система кэширования там тоже будет.

Гостевая же сделана больше для наглядности. smile.gif

Спустя 21 час, 11 минут, 3 секунды (18.05.2010 - 06:31) Shturman написал(а):
Всем привет!
Прошу прощения, что надолго выпал. Совершенно времени не было...
Освежаю информацию. smile.gif
twin, крайняя версия в 8-м уроке?
Какие планы дальше? Помнится, я обещался инвайты дописать. Еще нужно или уже сделали?

Спустя 1 час, 31 минута, 54 секунды (18.05.2010 - 08:03) twin написал(а):
Привет))
Да как то инвайты выпали, не актуально. А вот это актуально. smile.gif
Если есть желание присоедениться - в личку мне.

Спустя 1 день, 8 часов, 37 минут, 36 секунд (19.05.2010 - 16:41) igor717 написал(а):
Здравствуйте, вот решил попробовать один сайт на основе этого ядра переделать, который как раз сейчас запускаться должен...

Все вроде как потихоньку продвигается, но вот вылезла такая вещь:

на сайте есть Флэш-меню, но оно почему-то отображается только на главной странице!!! Хотя, если посмотреть исходный код оно там есть на всех!!!

Может есть какая особенность, или я что-то сделал не то?


Спустя 56 минут, 22 секунды (19.05.2010 - 17:37) igor717 написал(а):
Вот этот файл главного шаблона:

<!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><?php
echo $title; ?></title>
<meta
name="keywords" content="<?php echo $keywords; ?>" />
<meta
name="description" content="<?php echo $description; ?>" />
<link
type="text/css" rel="stylesheet" href="/skins/css/style.css" />
<script
src="./skins/js/AC_RunActiveContent.js" type="text/javascript"></script>
</head>
<body>

<div
id="container">
<div
id="art-container">

<div
id="header">
<div
id="hdl">
<div
id="logo">
<a
href="<?php echo IRB_HOST; ?>"><img src="/skins/images/logo.png" width="440" height="140" title="Модуль НП" border="0"></a>
</div>

<div>
<?php
include IRB_GENERAL_MENU; ?>
</div>
</div>
<div
id="topmenu">
<!--Вот этот код я его еще даже никуда не выносил!!!-->
<script type="text/javascript">
AC_FL_RunContent( 'codebase','http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=9,0,28,0','width','500','height','240','src','./skins/images/top','quality','high','pluginspage','http://www.adobe.com/shockwave/download/download.cgi?P1_Prod_Version=ShockwaveFlash','movie','./skins/images/top' ); //end AC code
</script><noscript><object classid="clsid:D27CDB6E-AE6D-11cf-96B8-444553540000" codebase="http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=9,0,28,0" width="500" height="240">
<param
name="movie" value="./skins/images/top.swf" />
<param
name="quality" value="high" />
<embed
src="./skins/images/top.swf" quality="high" pluginspage="http://www.adobe.com/shockwave/download/download.cgi?P1_Prod_Version=ShockwaveFlash" type="application/x-shockwave-flash" width="500" height="240"></embed>
</object></noscript>

<!--КОНЕЦ-->
</div>
<div
id="clear"></div>
<div
id="myslidemenu" class="menu">
</div>
</div>


</div>
</div>

</body>
</html>


Помогите пожалуйста разобраться... Хотяб в чем может быть проблема?

Спустя 4 часа, 25 секунд (19.05.2010 - 21:38) twin написал(а):
А сайт в корне?
 src="./skins/images/top.swf"
тут попробуй точку убрать.

Спустя 1 час, 23 минуты, 21 секунда (19.05.2010 - 23:01) igor717 написал(а):
Да я думаю тоже дело в ссылке...
Просто такой вариант я скинул. Я много что пробовал и полный путь указывать, дело в ЧПУ, без него все работает, скажите Вы где-нибудь вставляли флэш (может образец есть какой подключения)
Я уже весь нет перерыл...

Спустя 20 минут, 31 секунда (19.05.2010 - 23:22) twin написал(а):
http://madligt.inkz.ru/main вроде тут есть

Спустя 2 минуты, 55 секунд (19.05.2010 - 23:24) igor717 написал(а):
спасибо щас гляну

Спустя 8 минут, 5 секунд (19.05.2010 - 23:33) igor717 написал(а):
src="/flash/madlight_head.swf?datalink=/flash/menu.xml"

Что то я не пойму эту ссылку

Спустя 45 минут, 1 секунда (20.05.2010 - 00:18) igor717 написал(а):
Короче если кто столкнется с такой фигней, я лично весь вечер отдал на поиске решения в интернете и в итоге сделал собственно методом научного тыка удалив часть кода и прописав абсолютный путь:

<object classid="clsid:D27CDB6E-AE6D-11cf-96B8-444553540000" codebase="http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=9,0,28,0" width="500" height="240">
<
param name="movie" value="<?php echo MOD_HOST; ?>skins/tpl/images/top.swf" />
<
param name="quality" value="high" />
<
embed src="<?php echo MOD_HOST; ?>skins/tpl/images/top.swf" quality="high" pluginspage="http://www.adobe.com/shockwave/download/download.cgi?P1_Prod_Version=ShockwaveFlash" type="application/x-shockwave-flash" width="500" height="240"></embed>
</
object>


Спустя 2 минуты, 24 секунды (20.05.2010 - 00:20) igor717 написал(а):
Хотя ссылочка на какие-то мысли и навела, спасибо!!!
Жаль тока столько времени на эту ерунду ушло...

Спустя 1 день, 13 часов, 6 минут, 36 секунд (21.05.2010 - 13:27) igor717 написал(а):
Добрый дунь, по ходу изучения появилось еще 2 вопроса:

1-ый - Это касается безопасности (подскажите пожалуйста) генерация ошибок при доступе вне системы
if(!defined('IRB_KEY')) 
{
header("HTTP/1.1 404 Not Found");
exit(file_get_contents('../../404.html'));
}

он должен во всех файлах .php находится или нет (если нет, то от чего это зависит)


И 2-ой - У меня устанавливается еще одно меню (выпадающее - разделы, категории, статьи. Они все связаны между собой и меню должно генерироваться динамически из базы).
Вот пример статичного такого меню:

<ul>
<li>
Раздел 1</li>
<li>
Раздел 2

<ul>
<li>
Категория 1</li>
<li>
Категория 2

<ul>
<li>
Статья 1</li>
</ul>

</li>
</ul>

</li>
</ul>


Скажите пожалуйста, можно ли в этом случаи добиться полного разделения ЛОГИКИ и ВЫВОДА?
Спасибо.

Спустя 38 минут, 43 секунды (21.05.2010 - 14:05) twin написал(а):
Цитата
он должен во всех файлах .php находится или нет (если нет, то от чего это зависит)
в тех, которые в системе. То есть в подключаемых. Если это самостоятельные файлы, для аякса к примеру, то не надо.

Про разделение там все написано.

Спустя 25 минут, 14 секунд (21.05.2010 - 14:30) igor717 написал(а):
Спасибо, понял.

А по второму, в том-то и дело, что в этом случаи перехлест идет и так как написано - точно не выйдет... Если только дробить на файлов 10 .tpl wink.gif. А при таком разделении верстальщик в ступор войдет, а потом скажет "Сам рисуй!!!" biggrin.gif

Тут просто вся загвоздка в том, что между тегами <li> и </li> может выводится не только к примеру название определенного раздела, но и относящиеся к нему категории, а у тех, в свою очередь, тоже могут иметься вложенные статьи между тегами <li> и </li>. Вот и получается - КАРАГАНДА smile.gif

Вот поэтому мне и интересно, можно ли в этом случаи разделить ЛОГИКУ и ВЫВОД...

Спустя 3 часа, 36 секунд (21.05.2010 - 17:31) twin написал(а):
Цитата
Вот поэтому мне и интересно, можно ли в этом случаи разделить ЛОГИКУ и ВЫВОД...

Теоретически можно, но совершенно не нужно. Полное разделение - это миф. Никогда полностью логика не будет отделена от представления. Такова уж идеология PHP.
Если использовать шаблонизатор, то логика полезет в шаблон. И как бы не называли это (логикой представления или еще как) логикой она от этого быть не перестанет

А по сему, не нужно расшибать лоб в погоне за модными определениями.
Верстальщику глубоко плевать, где находятся теги <li>. Достаточно снабдить их классом css. Это же зачастую касается и некоторых других тегов. <tr> <br> <a>, элементов форм и некоторых еще, которые непосредственно участвуют в формировании динамической разметки.

Так что мой совет. Плюй на тех, кто называет пару тегов в php файле быдлокодингом. И пиши так, как удобно.

Лично я ни на секунду в таких случаях не задумываюсь и пишу эти теги прямо в скриптах.

Быдлокодинг - это не смесь php и html, это кривое и неудобное исполнение.
В шаблонах тоже можно такого понавертеть... Еще сравнить будет нужно, что есть что.

Спустя 54 минуты, 49 секунд (21.05.2010 - 18:26) igor717 написал(а):
Спасибо за совет...
Просто у меня болезнь как раз такая: Вот вроде и понимаю, что не целесообразно это, и вроде как уже к другому перехожу, а все равно голова о том думает.
В шаблонах тоже можно такого понавертеть... Еще сравнить будет нужно, что есть что.

Полностью с Вами согласен, бывает что скрипт легче разобрать чем некоторые шаблоны smile.gif

Спустя 1 день, 2 часа, 59 минут, 45 секунд (22.05.2010 - 21:26) igor717 написал(а):
Добрый вечер, вот созрело по ходу еще парочка маленьких вопросов. константу IRB_ROOT (физический путь) в каких именно случаях следует подставлять. Этот момент я не совсем понял...

И еще по поводу безопасности: переменные массива GET если подставляешь в запрос следует ли обрабатывать?

Спасибо.

Спустя 11 минут, 46 секунд (22.05.2010 - 21:37) twin написал(а):
Вот про константу бытуют разные мнения. У меня руки замерить не дошли.
Одни говорят, что лучше всегда использовать полный путь, другие наоборот.
Существенной разницы быть не должно, по этому я обычно в корневых файлах пишу путь относительный, а во внутренних - полный. Что бы не запутаться.

В этой системе главный индекс лежит в корне, там относительные пути. А индекс админки - нет. Там полные.

По поводу безопасности. В запрос никогда нельзя совать необработанные данные. Откуда бы они не взялись.

Спустя 15 часов, 39 минут, 42 секунды (23.05.2010 - 13:17) igor717 написал(а):
Спасибо. Просто я смотрю в модулях для подключения файла функции Мускула Вы использовали полный путь:
include_once IRB_ROOT .'libs/mysql.php';
, хотя вроде эти же файлы корневые...

Спустя 3 минуты, 38 секунд (23.05.2010 - 13:21) twin написал(а):
Дааа. Тяжелая это работа, из болота тащить бегемота.
Замечательно, что есть такие как ты, кто подмечает эти ляпы и помогает их исправлять.
С вашей помощью все таки наверное родится что то действительно полезное.

Припоминаю эту строчку из позапозвпоза...прошлой версии. Видно проспал.
Исправлю. Сеньк.

Спустя 1 минута, 52 секунды (23.05.2010 - 13:23) igor717 написал(а):
Рад что тоже могу быть полезен smile.gif

Спустя 5 дней, 22 часа, 11 минут, 34 секунды (29.05.2010 - 11:34) igor717 написал(а):
Здравствуйте, скажите пожалуйста, что-то у меня не хочет работать редактор это в курсе "статические страницы". У Вас в примере, все работает, но у меня че-та не хочет. Наверное я его как-то не правильно поставил. Скажите, у Вас может есть какая инфа по его подключению, а то я найти не могу...

Спустя 14 минут, 38 секунд (29.05.2010 - 11:49) twin написал(а):
Вообще, как оказалось, редактор не очень хороший. Вернее не очень хорошие браузеры - я привык к опере, она все умеет. А вот хваленая мазила дохнет(((

Я сейчас ищу новый редактор, вот неплохой, к тому же на jQuery...
Выйдет статья скоро, вернее целый раздел, как с ней бороться. Тогда и прикрутим.

А инфа по подключению этого редактора тут.

Спустя 2 минуты, 32 секунды (29.05.2010 - 11:51) igor717 написал(а):
Спасибо...
С этими редакторами, одни проблемы, но и без них - никуда wink.gif

Спустя 2 дня, 2 часа, 28 минут, 47 секунд (1.06.2010 - 14:20) igor717 написал(а):
Здравствуйте, подскажите пожалуйста, Вы говорили, что по окончанию работ следует
1) Закомментировать die() - для того что бы ошибки Mysqle не лезли на экран.
2) Раскомментировать строки .htaccess
(все эти ошибки будут складываться в директорию log)

3) Скажите, а что делать с установкой уровня ошибок, ее следует убрать или же оставить прежней?

Да и я у Вас спрашивал, возможно вы не заметили...

Цитата
Еще раз здравствуйте, появился такой вопрос:

Вы говорили "Так как подключений к базе может быть не одно, а много, то вместо include, лучше использовать include_once..." Но если весь контент сайта впринцепе находится в базе, то не проще ли include-ом этот файл подключить в самом начале индекса?


Подскажите пожалуйста, как здесь правильнее поступить...

Спасибо.

Спустя 53 минуты, 26 секунд (1.06.2010 - 15:14) twin написал(а):
Вообще лучше выставить более грубый уровень, дабы не переполнять логи малозначимой информацией. Допустим так:
    error_reporting(E_ALL & ~E_NOTICE);
или положиться на настройки хостинга (не писать вообще ничего).

По поводу подключения бд - тут зависит от приложения. Если база нужна на всех страницах - разумеется рациональнее подключить скрипт один раз.

Спустя 7 минут, 9 секунд (1.06.2010 - 15:21) igor717 написал(а):
Спасибо. Я впринцепе так и сделал. Просто по поводу тех же ошибок, уровень (E_ALL) предупреждает вообще обо всем, даже о том, что впринцепе и не надо знать и уж тем более заносить в директорию log. А то потом и запутаться не долго.

Спустя 27 дней, 6 часов, 46 минут, 22 секунды (28.06.2010 - 22:07) WannaKnow написал(а):
Привет.
Есть на какую-то часть готовый сайт, хочу переделать его под данную структуру.
Прошу помочь.

Перечитал несколько раз разделы 4 и 5 - довольно сложно, и не совсем понимаю то, что читаю. Во-первых, зачем в папке modules в подпапках нужны файлы router.php и read_controller.php? Роутер отвечает за перераспределение дальше, я так понимаю (то есть, например, какой пункт выбрал пользователь - тот файл и подгружаем), view.php подключает сам шаблон, а зачем нужен read_controller.php?

Далее, вот в конце всего раздела "ядро" (в 8 главе) вы пишете, что дальше все просто - и приводите пример, если потребовалось добавить доску объявлений. Лично мне все же не понятно, как добавлять новые файлы, и как организовывать структуру, если у меня большая вложенность сайта (может быть такое: раздел->подразделы->подразделы->подразделы), как мне правильно организовать такую структуру? Например так: modules->uchebnik->part1 (part2, part3, и т.д., в зависимости от кол-ва подразделов) -> в каждой из part еще сделать chapter1, chapter2, chapter3 (и все соответственное в папках skins и admin). Или как-то по-другому? И если не весь сайт, а лишь его малая часть работает с БД, нужны ли функции чтения и разбора шаблонов, ведь они, как я понял, именно считывают из БД.

Хотелось бы, чтобы вы, пожалуйста, привели пример сложной встроенной структуры сайта (какие подпапки и как создавать), а также какие нужные будут файлы в главной папке раздела (то есть modules/second - и что там за файлы и за что они отвечают).

Извиняюсь, что получилось долго, а также если вопросы покажутся глупыми, я еще новичок в этом деле. У меня сейчас есть кое-какой движок, может быть, по сравнению с тем, что описано в данном уроке он никуда не годится (в смысле отделения html верстки от логики, админ-панели нет, и т.д.) но мне все это и не нужно, ведь я один и создатель, и редактировать, и администрировать (хотя там интерактива никакого не будет, т.е. комментариев, гостевой книги и т.д. и администрировать в принципе нечего) и все буду делать сам, может мне и не нужна такая сложная структура, а сделать как могу, главное чтобы сам разбирался, и защита от взлома была? Как вы считаете.

Подводя итог, хотелось бы чтобы вы помогли с тремя главными описанными моментами: про назначение файлов в папках modules/main, modules/second и т.д., про многоуровневость (то есть когда будет много подразделов) с примером, и третье-нужно ли это в моем конкретном случае (админ-панель, грамотное разбиение бизнес-логики от верстки и т.п.) если, как я писал, я все делаю сам и для себя и смогу разобраться в своем, наверняка очень непрофессиональном, и кое-где "самопальном" движком?

Заранее спасибо.

Спустя 6 часов, 33 минуты, 3 секунды (29.06.2010 - 04:40) twin написал(а):
Цитата
У меня сейчас есть кое-какой движок, может быть, по сравнению с тем, что описано в данном уроке он никуда не годится (в смысле отделения html верстки от логики, админ-панели нет, и т.д.) но мне все это и не нужно, ведь я один и создатель, и редактировать, и администрировать (хотя там интерактива никакого не будет, т.е. комментариев, гостевой книги и т.д. и администрировать в принципе нечего) и все буду делать сам, может мне и не нужна такая сложная структура, а сделать как могу, главное чтобы сам разбирался, и защита от взлома была? Как вы считаете.


Вот именно так и нужно. Если программа работает и удовлетворяет условиям, но не нужно ничего мудрить и изгаляться. Можно пытаться улучшать, оптимизировать, работать над безопасностью. Это обычная практика. А структуру менять не обязательно - по большому счету это все фигня.

Ровно тоже самое и с разделением бизнесс-логики и представления. Оно нужно для того, что бы было удобно работать нескольким людям смежной профессии. Конечно и самому удобнее, но не на столько, чтобы переделывать рабочий сайт.

Та структура, которая приведена как пример на моем сайте, может быть интересна тем, кто только начинает вникать в PHP, либо тем, кто хочет производство сайтов поставить на поток.


Спустя 6 часов, 19 минут, 31 секунда (29.06.2010 - 11:00) WannaKnow написал(а):
Цитата (twin @ 29.06.2010 - 01:40)
Вот именно так и нужно. Если программа работает и удовлетворяет условиям, но не нужно ничего мудрить и изгаляться. Можно пытаться улучшать, оптимизировать, работать над безопасностью. Это обычная практика. А структуру менять не обязательно - по большому счету это все фигня.

Ровно тоже самое и с разделением бизнесс-логики и представления. Оно нужно для того, что бы было удобно работать нескольким людям смежной профессии. Конечно и самому удобнее, но не на столько, чтобы переделывать рабочий сайт.

Та структура, которая приведена как пример на моем сайте, может быть интересна тем, кто только начинает вникать в PHP, либо тем, кто хочет производство сайтов поставить на поток.

Спасибо.
Именно это я и хотел услышать smile.gif

Спустя 1 месяц, 11 часов, 37 минут, 47 секунд (29.07.2010 - 22:37) MrRobby написал(а):
Вот этот шаг не получается: http://irbis-team.com/15/4/7
всмысле получается, но когда я ввожу логин и пароль в админке ничего не происходит huh.gif huh.gif
что не так?(

Спустя 4 минуты, 8 секунд (29.07.2010 - 22:42) twin написал(а):
А какой логин-пароль?

Спустя 1 час, 24 минуты, 22 секунды (30.07.2010 - 00:06) MrRobby написал(а):
    $admins = array( 
'root' => '63a9f0ea7bb98050796b649e85481845', // root => root Изменить в релизе
'123456' => 'e10adc3949ba59abbe56e057f20f883e',
);


Я так понял логин root пароль 63a9f0ea7bb98050796b649e85481845 ?
или нет?
И можно еще пару вопросиков? Простите что не по теме.
  • Почему к php файлам нужно подключать tpl? почему бы не подключить обычный html к которому например подсоединены css и js файлы? я пробовал никаких различий не заметил.
  • Как занести в базу данных код html-страницы. (это нужно для визуального редактора. Он берет с БД код страницы, которую нужно отредактировать и потом сохранить)

Спустя 49 минут, 30 секунд (30.07.2010 - 00:55) Self написал(а):
Логин - пароль
root => root

Спустя 12 минут, 16 секунд (30.07.2010 - 01:08) MrRobby написал(а):
подошло) а тогда откуда вот эти цифры? что то я немного не понял huh.gif
И прошу, ответьте на те 2 вопроса в предыдущем посте
И еще, когда нажимаешь кнопку" выход" выдает ошибку:
Fatal error: Call to undefined function reDirect() in L:\home\test1.ru\www\admin\sequrity\exit.php on line 24


Спустя 1 час, 46 минут, 55 секунд (30.07.2010 - 02:55) burunducek написал(а):
Цитата (MrRobby @ 29.07.2010 - 22:08)
подошло) а тогда откуда вот эти цифры? что то я немного не понял huh.gif
И прошу, ответьте на те 2 вопроса в предыдущем посте
И еще, когда нажимаешь кнопку" выход" выдает ошибку:
Fatal error: Call to undefined function reDirect() in L:\home\test1.ru\www\admin\sequrity\exit.php on line 24

Эти цифры из функции md5
В ошибке грится что обращаешься к необъявленной функции или тип того.
Расширение tpl используется для удобства, что бы было видно что это шаблон.
"INSERT INTO" в SQL для добавления служит.

Спустя 3 часа, 25 минут, 50 секунд (30.07.2010 - 06:20) twin написал(а):
Ошибка указывет на то, что ты где то потерял функцию reDirect()
Она тут описана.

Спустя 5 часов, 18 минут, 46 секунд (30.07.2010 - 11:39) MrRobby написал(а):
а можно по подробней насчет "INSERT INTO" unsure.gif
по поводу reDirect(). Вроде все правильно. я даже в Ваш архив скачал, там точно такую же ошибку выдает.
Упс вопрос решен) нужно добавить функцию в default.php tongue.gif
Насчет "INSERT INTO" жду ответа rolleyes.gif

Спустя 1 час, 50 минут, 50 секунд (30.07.2010 - 13:30) burunducek написал(а):
Цитата (MrRobby @ 30.07.2010 - 08:39)
а можно по подробней насчет "INSERT INTO" unsure.gif
по поводу reDirect(). Вроде все правильно. я даже в Ваш архив скачал, там точно такую же ошибку выдает.
Упс вопрос решен) нужно добавить функцию в default.php tongue.gif
Насчет "INSERT INTO" жду ответа rolleyes.gif

гугл скажет подробнее

Спустя 1 месяц, 8 дней, 23 часа, 43 минуты, 26 секунд (9.09.2010 - 13:13) Evilsoul написал(а):
Может я где пропустил, не знаю.
Но если нет, то предлагаю для админки в индексе сделать так:

if(isset($_SESSION['admin']))
define('IRB_GENERAL_MENU', IRB_ROOT .'/skins/tpl/admin_menu.tpl');
else
define('IRB_GENERAL_MENU', IRB_ROOT .'/skins/tpl/none.tpl');


none.tpl
<h2>Меню</h2>
Здесь сыра нет.

Ну, что бы меню вообще не было видно.

Спустя 51 минута, 56 секунд (9.09.2010 - 14:05) twin написал(а):
Да, это предлагали уже. Ну доберусь, поправлю. Я же там не сайт пишу - образец. Каждый волен сам кроить для себя как хочет. smile.gif

Спустя 5 дней, 5 часов, 7 минут, 49 секунд (14.09.2010 - 19:13) ShamanV написал(а):
Извините, если ответ на мой вопрос покажется вам очевидным, но все же...
Скачал ядро, чтобы сделать гостевуху и слегка поигрался с админкой. Заметил некоторые странности с адресами, а именно:

1. После захода в админку, если кликать в меню по страницам, адрес будет такого типа: http://site/admin/second/read - все красиво и понятно. Но если зайти в "Метаданные", а затем уже кликать по страничкам, то адрес примет вид http://site/admin/second/main (если пришли с установки метаданных для второй страницы, то вместо последнего main будет second) - что уже не совсем понятно. А попытка убрать в адресе последнее значение, сократив до http://site/admin/second делает с адресом следующее: http://site/admin/second/?route=second, что уже не только непонятно, но и некрасиво в плане ЧПУ. Что не так?

Upd: Поковырялся в коде. Выходит, что если мы в admin_menu.tpl не передаем какой-либо параметр функции href(), то он не перезаписывается, оставаясь таким же, как на текущей странице. Если же он не указан и на текущей странице, то берется дефолтное значение из variables.php. В данном случае мы не передаем функции параметр rem:
<li><a href="<?php echo href('page=meta', 'rem=main'); ?>">Метаданные</a></li> 
<li><a
href="<?php echo href('page=main'); ?>">Главная страница</a></li>
<li><a
href="<?php echo href('page=second'); ?>">Вторая страница</a></li>
<li><a
href="<?php echo href('page=exit'); ?>">Выход</a></li>

и это приводит к подстановке в ссылки текущего значения, хранящегося в $tmp['rem'] из ф-ции href(), чего, имхо, стоило бы избегать.

ПС: О, Святые Коровы! Когда же я научусь кратко и ясно излагать свои мысли в программировании? Видимо, в этот самый момент я и стану настоящим программистом smile.gif

Спустя 8 дней, 14 часов, 26 минут, 56 секунд (23.09.2010 - 09:40) Evilsoul написал(а):
Замечание конечно интересное, но, что тебе мешает передать пустые значения?
<li><a href="<?php echo href('page=meta', 'rem=main', 'num=0', 'id=0'); ?>">Метаданные</a></li> 

Спустя 17 минут, 26 секунд (23.09.2010 - 09:58) twin написал(а):
Есть решение этого вопроса, но пока недотянутое. Выберу время, подрихтую.

Спустя 2 часа, 45 минут, 33 секунды (23.09.2010 - 12:43) Evilsoul написал(а):
Твин, я вот тут думаю о меню в виде массива, вот что вышло (взял за основу функцию getFiles):

function getFiles() 
{
static $files; // моульные страницы
static $pages; // статические страницы

if(empty($files))
{
$files = scandir(IRB_ROOT .'/skins/tpl'); // сканируем дерикторию
$files = array_diff($files, array(
'.',
'..',
'admin',
'pages',
'menu.tpl',
'none.tpl',
'index.tpl',
'no_page.tpl',
'admin_menu.tpl',
'admin_index.tpl',
));
// фильтруем массив
}

if(empty($pages))
{
$pages = scandir(IRB_ROOT .'/skins/tpl/pages'); // сканируем дерикторию
$pages = array_diff($pages, array(
'.',
'..',
'show.tpl'
)); // фильтруем массив
}

foreach($pages as $var => $val) // Проходим по массиву статических страниц и убираем расширение
{
$pages[$var] = str_replace('.tpl', '', $val);
}

$pages = array_merge($pages, $files);


return $pages;
}


После этого стопорнулся.
Немного отойду от сути:
Так как я начинал разбирать коммерческие курсы почти с их создания, то у меня структура немного отличается от курсовой (статические страницы находятся tpl/pages)
$pages = getFiles(); 
можно вкинуть в буфер в главном индексе и юзать в ссылках и в админке, но здесь не удобно так как в ключах используются индексы.
Думаю что было бы лучше сделать ассоциативный массив, но пока не могу придумать для него параметры и его структуру. Так же было бы удобно хранить меню в папке setup в виде текстового файла, в админке юзать функцию а на сайте - текстовый файл. Думал сюда закинуть параметры ссылки rem, num, id, но это безсмысленно. Может добавить имя, и позицию для сортировки меню.

Вообщем запутался конкретно smile.gif такую билеберду написал, ужас blink.gif

Спустя 2 часа, 18 минут, 15 секунд (23.09.2010 - 15:01) twin написал(а):
Эту функцию можно вообще убрать и задавать массив страниц статически где-нибудь в конфиге к примеру. Или прямо в функции, чтоб не менять ничего.
    function getFiles() 
{
return array(
'main',
'second',
'guest',
);


}

Ведь она определяет жестко забитые страницы, на которые есть шаблоны. Остальные формируются динамически.

Ничего особого в этой функции нет, просто на момент разработки было удобнее так.
Вообще не нужно слепо все копировать. Это же просто принципы. Расширять и изменять можно до бесконечности.


Спустя 1 час, 28 минут, 42 секунды (23.09.2010 - 16:30) Evilsoul написал(а):
Точно, и не нужно морочить голову. Спасибо )

Спустя 3 дня, 20 часов, 22 минуты, 12 секунд (27.09.2010 - 12:52) ShamanV написал(а):
Цитата (Evilsoul @ 23.09.2010 - 06:40)
Замечание конечно интересное, но, что тебе мешает передать пустые значения?
<li><a href="<?php echo href('page=meta', 'rem=main', 'num=0', 'id=0'); ?>">Метаданные</a></li> 

Был в мыслях такой вариант. Хотелось услышать другие, ибо мне он как-то не очень.

Спустя 2 часа, 13 минут, 30 секунд (27.09.2010 - 15:06) twin написал(а):
Я поправил функцию. Сейчас там лишнего не должно быть.

Спустя 1 месяц, 23 часа, 52 минуты, 47 секунд (28.10.2010 - 14:59) soniclord написал(а):
я на основе вашей cms делаю сайтик себе. может быть я настолько туп, НО:
когда время сессии кончается, то ссылка на Личный кабинет просто исчезает, но если набрать ее вручную или просто там находиться и обновить страничку, полезут ошибки "Notice: Undefined index: user_data in C:\htdocs\pay.ru\modules\register\office_controller.php on line 62". я нигде не видел что проверяются куки и сессии на сравнение с пользователем, кроме админки.

Спустя 5 минут, 27 секунд (28.10.2010 - 15:04) twin написал(а):
А там и нет этого. Там просто принцип показан. Остальное додумывайте. smile.gif
И не CMS это вовсе. Это просто основа для развития на ней всего, что в голову взбредет))


Спустя 40 минут, 41 секунда (28.10.2010 - 15:45) soniclord написал(а):
:-) благодарю!

Спустя 9 часов, 45 минут, 24 секунды (29.10.2010 - 01:30) soniclord написал(а):
скажите пожалуйста, а
 if(!empty($_SESSION['admin'])) 
- этого достаточно чтобы полностью обезопасить страницы, доступные только админам?

Спустя 37 минут, 31 секунда (29.10.2010 - 02:08) soniclord написал(а):
и еще вопрос - а что мешает сделать общий логин и пароль через бд и для админки и для личного кабинета?

Спустя 5 часов, 2 минуты, 40 секунд (29.10.2010 - 07:10) twin написал(а):
soniclord
Цитата
- этого достаточно чтобы полностью обезопасить страницы, доступные только админам?
полностью обезопасить админку может только её отсутствие. smile.gif
Цитата
а что мешает сделать общий логин и пароль через бд и для админки и для личного кабинета?
Не знаю... Лично я не мешаю - точно.

Спустя 6 минут, 2 секунды (29.10.2010 - 07:16) soniclord написал(а):
Цитата
Не знаю... Лично я не мешаю - точно.
не поймите не правильно - просто если вы так сделали, значит так нужно - я просто хочу понять логику вещей.

Спустя 11 минут, 43 секунды (29.10.2010 - 07:28) twin написал(а):
Ну я не вижу смысла усложнять систему входа в админку запросами, так как доступ туда имеют обычно всего несколько человек - раз, хранить все яйца в одной кошелке вредно - два, учетные данные в файле хранить надежнее - три.

Но если есть необходимость организовать массовый доступ в админку, да еще и с частой ротацией, то вполне закономерно хранить учетки в базе с разграничением доступов.

Все зависит от конкретных условий.

Спустя 2 часа, 37 минут, 3 секунды (29.10.2010 - 10:05) soniclord написал(а):
Цитата
Но если есть необходимость организовать массовый доступ в админку, да еще и с частой ротацией
-так точно :-)
Огромное спасибо за комментарии!

Спустя 3 дня, 5 часов, 3 минуты, 44 секунды (2.11.2010 - 16:09) soniclord написал(а):
это опять я. теперь вопрос про хостинг. на моем домашнем серваке под управлением виндовс 2003 - все отлично работает, но как только переношу проект на хостинг линукс - сразу же выводится сообщение "Fatal error: Call to undefined function mysqlquery() in /home/sonic/data/www/new.s-b-s-i.ru/libs/meta.php on line 31".
дело в том что подключение к БД происходит ранее -
$page = $GET['page'];
/**
* The switch of modules
* Переключатель страниц
*/

switch($GET['page'])
{
case 'main':
include './modules/news_controller.php';
include './modules/main/router.php';
$page = $GET['id'];
break;

case 'guest':
include './modules/guest/router.php';
break;

case 'register':
include './modules/register/router.php';
break;

case 'help':
include './modules/help/router.php';
break;

default:
include './modules/main/router.php';
break;
}

$content = ob_get_contents();
ob_end_clean();
include './libs/meta.php';

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

Спустя 2 часа, 29 минут, 37 секунд (2.11.2010 - 18:38) twin написал(а):
Дело вовсе не в линуксе. Не подключен файл с функциями БД просто.

Спустя 6 часов, 58 минут, 35 секунд (3.11.2010 - 01:37) soniclord написал(а):
ну как же не подключена. я говорю о главной, допустим.
default: 
include './modules/main/router.php';
break;


содержимое main/router.php:
<?php 
/**
* Router of the module of the main page
* Роутер модуля главной страницы
*
@author IT studio IRBIS-team
*
@copyright © 2009 IRBIS-team
*/
/////////////////////////////////////////////////////////

/**
* Generation of page of an error at access out of system
* Генерация страницы ошибки при доступе вне системы
*/

if(!defined('IRB_KEY'))
{
header("HTTP/1.1 404 Not Found");
exit(file_get_contents('../../404.html'));
}
////////////////////////////////////////////////////////////

/**
* Define the name of the current catalogue
* Определяем название текущего каталога
*/

$modul = basename(dirname(__FILE__));
/**
* The switch of controllers
* Переключатель контроллеров
*/

if($GET['rem'] && file_exists('./modules/'. $modul .'/'. $GET['rem'] .'_controller.php')){
include './modules/'. $modul .'/'. $GET['rem'] .'_controller.php';
}
else
{
header("HTTP/1.1 404 Not Found");
exit(file_get_contents('./404.html'));
}

/**
* Подготовка к выводу
* Preparation for a conclusion
*/

include './modules/'. $modul .'/view.php';

т.к. $GET['rem'] пуст, по умолчанию он принимает значение - read. т.е. подключаем модуль /modules/main/read_controller.php, содержимое которого
<?php   

/**
* Controller
* Контроллер
*
@author IT studio IRBIS-team
*
@copyright © 2009 IRBIS-team
*/
/////////////////////////////////////////////////////////

/**
* Generation of page of an error at access out of system
* Генерация страницы ошибки при доступе вне системы
*/

if(!defined('IRB_KEY'))
{
header("HTTP/1.1 404 Not Found");
exit(file_get_contents('../../404.html'));
}
//////////////////////////////////////////////////////////
/**
* We connect a file of the MySQL functions
* Подключаем файл функций MySQL
*/

include IRB_ROOT .'/libs/mysql.php';
echo 'ggg';

$page_content = '';
/**
* Read page
* Читаем страницу
*/

if($GET['page']=='Главная')
$page_content=include('./main.php');
else{
$res = mysqlQuery("SELECT *
FROM `"
. IRB_DBPREFIX ."articles`
WHERE `title` = '"
. $GET['page']."' limit 1");


if(mysql_num_rows($res) > 0)
{
while ($row = mysql_fetch_assoc($res)){
$page_content = $row['text'];

}
}
else $page_content = IRB_LANG_NO_NEWS;

}

но я выяснил, что до этого модуля дело не доходит..

Спустя 1 час, 12 минут, 30 секунд (3.11.2010 - 02:50) soniclord написал(а):
нашел причину случайно. у меня этот двиг залит на поддомен, а инклудит он почему-то с основного...

я нигде не нашел ответа на вопрос - include './bla.php' ?

Спустя 59 минут, 22 секунды (3.11.2010 - 03:49) soniclord написал(а):
оказывается поддомен не правильно создался. сейчас все работает

Спустя 5 дней, 3 часа, 33 минуты, 34 секунды (8.11.2010 - 07:22) soniclord написал(а):
извините за нозойливость, но у меня на хостинге не работает отправка писем! пишет "По техническим причинам отправка письма в данный момент невозможна". А на локальном сервере все работает. Проверил все кодировки - все нормально.
if(!mail($this->to, $this->subject, $this->multipart, $header, '-f'. $this->from)) 

Как только убираю
$header,
письмо отправляется, но приходит

-fmail@new.s-b-s-i.ru

Date: Mon, 08 Nov 2010 03:43:18 +0000
From: mail@new.s-b-s-i.ru <mail@new.s-b-s-i.ru>
Message-ID: <eb0f65ad4073dc5a523d199b18d0a983@new.s-b-s-i.ru>
X-Priority: 3:
X-Mailer: IRB_Mailer 1.0 (irbis-team.ru)
MIME-Version: 1.0
Content-type: multipart/alternative; boundary="==0bba517a9281a5a0be7fedd211ed26be"

Скачал полностью пример http://irbis-team.com/school/zip/irb_mailer_v0.2.zip - залил на хостинг, то же самое...

Спустя 1 час, 41 минута, 1 секунда (8.11.2010 - 09:03) soniclord написал(а):
неужели только у меня такие проблемы?

Спустя 3 часа, 6 минут (8.11.2010 - 12:09) twin написал(а):
Вообще так должно быть:
if(!mail($this->to, $this->subject, $this->multipart, $this->header, '-f'. $this->from))
но дело не в этом. Скорее всего что то с хостингом напутано.

Спустя 2 часа, 23 минуты, 43 секунды (8.11.2010 - 14:33) soniclord написал(а):
но обычное мыло хостинг же отправляет (я имею в виду просто пример mail()) без параметра $this->multipart.

Спустя 1 час, 51 минута, 29 секунд (8.11.2010 - 16:25) soniclord написал(а):
не стал я заморачиваться, поставил class.phpmailer

Спустя 57 секунд (8.11.2010 - 16:26) twin написал(а):
Все верно сделал. smile.gif

Спустя 18 дней, 21 час, 27 минут, 37 секунд (27.11.2010 - 13:53) Mirades написал(а):
Изучаю с вами, примите? biggrin.gif

Спустя 28 минут, 17 секунд (27.11.2010 - 14:22) twin написал(а):
А кто то разве выгонял? biggrin.gif

Спустя 18 дней, 11 часов, 27 минут, 39 секунд (16.12.2010 - 01:49) GRean написал(а):
Здраствуйте twin!

Читаю ваши уроки, и многое узнаю. Спасибо вам за дельные курсы. Но появляются и вопросы.

Например в уроке говорится о RewriteEngine и его работе. Вкратце, но вроде работает.

Я на своем сайте(на удаленном хостинге) применил подобную схему с RewriteEngine, но в рамках теста. в корне сайта создаем .htaccess, размещаем там код из примера выше. Смотрим на адресную строку сайта и видим, что если я ввожу например несуществующую папку news или news/ и т.д., то меня перекидывает в index.php. Что видно по результатам запроса, вроде как перенапавление вышло. Вроде все здорово и в шоколаде. Не видно содежимого папки, даже не понятно, существует ли вообще папка такая, наше дело только разобрать в index.php REQUEST_URI?

Решил проверить, какой ответ приходит в таком случае. Установил себе HttpAnalyzer. Первый запрос возвращает 200, но второй запрос возвращает NS_ERROR_DOCUMENT_NOT_CASHED. Это нормально?
Иконку в для сайта закинул в корень сайта.
Просто на текущий момент стаю на краю в лес в дебри, поэтому такие мелочные вопросы интересуют меня, номальное ли состояние: NS_ERROR_DOCUMENT_NOT_CASHED ?

и еще. корень сайта начинается с www или с www.mysite.ru ? в ftp

вот пример запросов
user posted image

з.ы.: и еще один вопросик.
Обязательно ли писать вообще вот это?

if(!defined('IRB_KEY'))
{
header("HTTP/1.1 404 Not Found");
exit(file_get_contents('../../404.html'));
}


Просто я делаю так. Раз уж в ответе на запрос нет 404, то полученную страницу мы можем выводить как хотим.

1. Пишем в адресной строке не существующий адрес www.mysite.ru/news, нас перекидывает на index.php, при этом в запросе нет 404. а появляется NS_ERROR_DOCUMENT_NOT_CASHED. Что именно это обозначает я не нашел ответа, но есть предположения. Хотелось бы увидеть мнение спецов. Соответственно я не уверен, что перенаправление вообще работает. Скорее всего работает Options -Indexes.

2. Раз уж перенаправление удалось и никаких больше ошибок не вылезло, то дальше с index.php мы можем делать что хотим, а точнее перенаправить includ-ом к нужной странице(которая в свою очередь будет формироваться по REQUEST_URI, в данном случае будет news). То есть, если есть такая папка(раздел) в нашей базе данных индексов на страницы, то грузим(include) шаблон этой страницы(например include"news.php";), если нет, то грузим include"error 404.php";

На сколько верно и правильный такой подход?
Я так понимаю, если я буду делать инклуд, то шаблон подгрузится в этот же индекс, а header запустит отдельный файл.

Спустя 6 часов, 17 минут, 31 секунда (16.12.2010 - 08:07) twin написал(а):
Вот я попал...
Признаюсь чесно, никогда не пользовался такой приблудой. Скачал, поставил, пока вообще не понял, что за зверь и как с ним бороться.

Начну с того, что знаю.
Цитата
Обязательно ли писать вообще вот это?
Совершенно необязательно. Можно сделать намного проще, поместить в папку .htaccess такого содержания:
Deny from all
и будет та же защита. Почему таким извратным способом у меня, я помоему писал в курсе. Для того, чтобы скрипт как можно меньше зависил от внешних настроек - раз, для того, чтобы была ошибка 404, а не 403 - два.

Цитата
и еще. корень сайта начинается с www или с www.mysite.ru
Все зависит от того, как настроен хост. Может и так и так и еще иначе. Иногда это папка www, иногда mysite, иногда htdocs, иногда public_html или еще как. Но корень, это то, где лежит главный индекс.

Ну а теперь о сложном. Что это за явление NS_ERROR_DOCUMENT_NOT_CASHED я толком не понял. Следуя логике - браузер (или эта чудо-программа) не смогли закэшировать контент ввиду его отсутствия.
Вот почему по два запроса, причем в шахматном порядке - для меня загадка. Что это значит?
Цитата
Первый запрос возвращает 200, но второй запрос возвращает NS_ERROR_DOCUMENT_NOT_CASHED.
Если второй - запрос на фавикон, а его нет в корне, то все закономерно. Для того и писали в .htaccess это:
RewriteCond %{REQUEST_URI} !^/favicon.ico


Цитата
То есть, если есть такая папка(раздел) в нашей базе данных индексов на страницы, то грузим(include) шаблон этой страницы(например include"news.php";), если нет, то грузим include"error 404.php";

На сколько верно и правильный такой подход?
Я так понимаю, если я буду делать инклуд, то шаблон подгрузится в этот же индекс, а header запустит отдельный файл.
Вот это верно все. Хидер будет перенаправлять браузер, а подключение идет на сервере. То есть с перенаправлением будут задействованы каналы, а с include просто внутреннее формирование страницы.

Спустя 4 часа, 50 минут, 20 секунд (16.12.2010 - 12:57) GRean написал(а):
Я смотрю, что есть тема более разобраней, пойду ее почитаю, как раз интересует тема rewrite.

Выяснил я где у моего хостинга корень находится:), закинул туда favicon.ico, автоматически видно отображение иконки в адресной строке. Но проблема эта не решилась(если это вообще проблема, а не обычный отчет программки). Возможно это какие то особенности этой програмки. Но я так же проверил на запросы этот же сайт, вроде как проскакивают подобные моменты. Если этот сайт уже годами стоит, то думаю ничего страшного в таких ответах на запросы нет.

Если при разборе запросов, я буду использовать header вместо include, то в чем конкретно будет разница, кроме редиректа и обычной загрузки файла?

Спустя 47 минут, 36 секунд (16.12.2010 - 13:45) twin написал(а):
Это два запроса на страницу получится.

Спустя 3 дня, 5 часов, 9 минут, 53 секунды (19.12.2010 - 18:55) Vasias написал(а):
Добрый день г-н Twin

Поясните пожалуйста первую часть кода до знаков && просто никак не могу понять как его прочесть. Вторая часть та чтоза знаком && понятна.

if($GET['rem'] && file_exists('./modules/'. $modul .'/'. $GET['rem'] .'_controller.php'))


Заранее благодарен.

P.S. да этот код не из ядра а из гостевой на SQL.

Спустя 6 минут, 57 секунд (19.12.2010 - 19:01) inpost написал(а):
if($GET) // возвращает либо true, либо false. Кажется это равноценно операции: if(isset($GET)). Николай, правильно?

Спустя 5 часов, 48 минут, 39 секунд (20.12.2010 - 00:50) Vasisas написал(а):
Добрый день по поводу гостевая на SQL.

у меня почему то вылезает ошибка.
Undefined variable: info in X:\home\my_sites.ru\......\guest\read_controller.php on line 24


/**
* The data recording block
* Блок записи информации
*/

if($ok)
{
if(!$POST['value1'])
$info[] = 'Текстовое поле не заполнено.';

if(!$POST['value2'])
$info[] = 'Текстовая область не заполнена.';

if(count($info) == 0)
{
mysqlQuery("INSERT INTO `". IRB_DBPREFIX ."guest`
SET
`name` = '"
. $POST['value1'] ."',
`text` = '"
. $POST['value2'] ."'"
);

reDirect();

}
}

else
$info[] = 'Напишите что нибудь';


А если определить переменную просто прописав $info[] = ''; тогда будет
Undefined index: HTTP_REFERER
Вылезет ошибка функции reDirect(); я конечно понимаю что ворой моя проблема но может хоть подскажете куда копать то ?

Спустя 7 часов, 39 секунд (20.12.2010 - 07:51) twin написал(а):
Определять нужно как пустой массив, а не первый элемент в нем. Тоесть так:
$info = array();

Спустя 16 часов, 18 минут, 13 секунд (21.12.2010 - 00:09) AnDer написал(а):
По курсу гостевая на SQL.
Подскажите зачем оно там надо AS `cnt` в запросениже .


$res = mysql_query("SELECT COUNT(*) AS `cnt` FROM `table`");
$count = mysql_result($res, 0) / $num;


и както непойму в переменной $res что за данные будут я echo делал но там лажа какаято.
Resource id #4

И про ф-ю mysql_result можно по подробнее ато я как то не нашол толкового объяснения зачем нужно второе значение.


Заранее благодарен.

Спустя 43 минуты, 15 секунд (21.12.2010 - 00:52) twin написал(а):
Это алиас. Можно другой псевдоним поставить, не обязательно `cnt`.
Дословно звучит так:
Цитата
Вывести количество рядов как колонку cnt.

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

Цитата
и както непойму в переменной $res что за данные будут я echo делал но там лажа какаято.
Resource id #4
Это не лажа, а указатель на ресурс.

Спустя 4 минуты, 9 секунд (21.12.2010 - 00:56) AnDer написал(а):
Спасибо пошол осмысливать сказанное вами.

Спустя 6 дней, 13 часов, 30 минут, 1 секунда (27.12.2010 - 14:26) Evilsoul написал(а):
2010-12-27 01:25:45 Query: 

SET NAMES utf8


File: D:\Apache\localhost\www\libs\mysql.php
Line: 58


в mysql кодировка базы таблиц и т.д. стоит Юникод...

Почему ругается на установку кодировки?

Спустя 9 минут, 44 секунды (27.12.2010 - 14:36) Evilsoul написал(а):
Ошибка была в файле mysql.php

теперь пишет что повторно вызывается запрос

Fatal error: Cannot redeclare mysqlquery() (previously declared in D:\Apache\localhost\www\libs\mysql.php:16) in D:\Apache\localhost\www\libs\mysql.php on line 46


запутался ....

Спустя 29 минут, 58 секунд (27.12.2010 - 15:06) Evilsoul написал(а):
Всё, разобрался. Ошибка была в том, что несколько раз подключил файл mysql.php

Спустя 19 дней, 19 часов, 51 минута, 45 секунд (17.01.2011 - 10:58) Evilsoul написал(а):
Вот, на досуге нарисовал два лого на шапку ИРБИС, может пригодится...
Один
Два

Спустя 2 минуты, 52 секунды (17.01.2011 - 11:01) twin написал(а):
Спасибо. Пригодится. smile.gif

Спустя 17 минут, 56 секунд (17.01.2011 - 11:19) Evilsoul написал(а):
Это тебе спасибо за науку smile.gif Можно фон добавить или в лучшем качестве сохранить.

Спустя 1 день, 14 часов, 46 минут, 29 секунд (19.01.2011 - 02:05) sixpoundeeer написал(а):
Привет, twin, накопилось несколько вопросов.
Есть у нас, например, несколько стандартных разделов: Главная, Продукция, Услуги, Статьи, О нас.
Я правильно понимаю, что все эти разделы - модули?
Допустим, в разделе "Статьи" у нас выводится список всех статей (делаем соответствующую выборку в контроллере). Но так же нам требуется выборка каждой статьи по отдельности, в зависимости от id. Так вот, для этого нужно создавать еще один контроллер в этом же модуле с выборкой статьи? Или делать отдельный модуль? Если первое, то как быть с роутером? Там же можно подключать только один контроллер.
И еще один вопрос. Допустим, у нас главная страница состоит из вывода в цикле всех статей. В таком случае нужно воспользоваться модулем "статьи" или сделать модуль "главная" (main) и там уже делать выборку статей?
И последний вопрос, сокращением чего, все таки, является параметр rem? smile.gif

Спустя 7 часов, 43 минуты, 18 секунд (19.01.2011 - 09:48) twin написал(а):
Цитата
Я правильно понимаю, что все эти разделы - модули?
Правильно понимаешь.
Цитата
Так вот, для этого нужно создавать еще один контроллер в этом же модуле с выборкой статьи? Или делать отдельный модуль?
Это зависит от твоей фантазии. Допустим новости там сделаны в одном контроллере, а регистрация в целой куче.
Цитата
Если первое, то как быть с роутером? Там же можно подключать только один контроллер.
Это почему? На то он и роутер, чтобы контроллеры переключать.
Цитата
В таком случае нужно воспользоваться модулем "статьи" или сделать модуль "главная" (main) и там уже делать выборку статей?
Это тоже зависит от тебя. Вообще все это называется архитектура. Как спланируешь, так и будет. Я могу только порекомендовать. Если эти статьи нужно выводить на разных страницах, то стоит сделать отдельным модулем и просто к ним подключать. А если на одной, то нечего их плодить. Можно сделать прямо в этом модуле.
Цитата
И последний вопрос, сокращением чего, все таки, является параметр rem?
Я забыл. Мож попозже вспомню. Ну не нравится rem, назови section. Хоть горшком, только не в печь. smile.gif

Спустя 1 день, 7 часов, 55 минут, 43 секунды (20.01.2011 - 17:44) Evilsoul написал(а):
Мелочь...
есть так:
 $this->TableTotal = intval(($this->TableCount - $this->NumColumns) / $this->NumRows * $this->NumColumns) - 1;

а почему бы не так:
 $this->TableTotal = ceil($this->TableCount - $this->NumColumns) / $this->NumRows * $this->NumColumns;

Спустя 27 минут, 55 секунд (20.01.2011 - 18:12) twin написал(а):
Может... Потестишь, отпишись. Если все норм - исправлю.

Спустя 40 минут, 16 секунд (20.01.2011 - 18:52) Evilsoul написал(а):
Протестил до написания.

Задавал разное кол. строк на страницу (-20, -1, 0, 1, 2, 3, 5, 8, 9, 10, 11, 150)
Всего строк в базе 9
Выдает результат от 1 до 9

Спустя 15 часов, 23 минуты, 31 секунда (21.01.2011 - 10:16) Evilsoul написал(а):
Не правильно написал,
не Выдает результат от 1 до 9,
а в зависимости от количества строк получаем количество страниц, их получалось 9, 5, 3, 2, 1.

Спустя 1 час, 43 минуты, 3 секунды (21.01.2011 - 11:59) Evilsoul написал(а):
twin ты на меня не обижайся если я задаю глупые вопросы, всё приходит с опытом :)
Как для науки оно полезно, но зачем нам в классе определять, включен реврайт или нет?
Мы же программисты :) и должны знать включен у нас реврайт или нет :)
Тогда можно было бы просто при создании класса записать так:
$paginator = new IRB_Paginator($GET['num'], NUM_ROWS);

Или так:
$paginator = new IRB_Paginator($_GET['page'], NUM_ROWS);


Спустя 2 часа, 44 секунды (21.01.2011 - 14:00) twin написал(а):
Ну вообще этот класс задумывался в паблик. А там, мякго скажем, не все программисты. И чем меньше настроек, тем лучше. Интеграция по этому сведена к трем строчкам.

Спустя 2 часа, 7 минут, 58 секунд (21.01.2011 - 16:08) Evilsoul написал(а):
Ясно, спасибо.

Попробовал немного упростить, в общем вот такой Лайт вершн у меня получился (сугубо навигация)

<?php
class
IRB_Navigator
{
/////////////////////////////////////////////////
// PUBLIC
/////////////////////////////////////////////////
/**
* Establishes page number.
*
@var int
*/

public $NumPage = 1;
/**
* Establishes quantity of numbers.
*
@var int
*/

public $NumRows = 1;

/////////////////////////////////////////////////
// PROPERTIES AND PRIVATE
////////////////////////////////////////////////
private $RowsTotal = 0;
private $RowsCount = 0;
private $StartLink = '';

/**
* Constructor
*
@param int $page
*
@param int $rows
*/

public function __construct($page, $rows)
{
if($rows >= 1)
$this->NumPage = (int)$page;

if($rows >= 1)
$this->NumRows = (int)$rows;
}

/**
* Operates a cache of difficult inquiries
*
@param string $query
*
@access public
*
@return void
*/

public function countQuery($query)
{
$query = str_replace("\n", " ", $query);
preg_match("#FROM(.+)#i", $query, $table);

$result = mysql_query("SELECT COUNT(*) AS `cnt`
FROM "
. $table[1]);

$this->RowsCount = mysql_result($result, 0);

$res = mysql_query($query . $this->createLimit());

return $res;
}

/**
* Calculates a position and prepares a limit for inquiry
*
@param int $page
*
@access public
*
@return string
*/

public function createLimit()
{
$this->PagesTotal = ceil($this->RowsCount / $this->NumRows);

if($this->NumPage < 1)
$this->NumPage = 1;

if($this->NumPage > $this->PagesTotal)
echo $this->NumPage = $this->PagesTotal;

$start = $this->NumPage * $this->NumRows - $this->NumRows;

if($start < 0)
$start = 0;

return ' LIMIT '. $start .', '. $this->NumRows;
}

/**
* Generates the navigation menu
*
@access private
*
@return string
*/

function createMenu()
{
$count = $this->PagesTotal;
$menu = "\n<!-- IRB_Navigator begin -->\n";

if($count < 13)
{
$i = 1;
$cnt = $count;
}
else
{
if($this->NumPage > 10)
$menu .= $this->createLink(($this->NumPage - 10), '-10<   ', '_top');

if($count > 12)
{
if($this->NumPage == 7)
$menu .= $this->createLink(1, 1);
elseif($this->NumPage == 8)
$menu .= $this->createLink(1, 1)
.
$this->createLink(2, 2);
elseif($this->NumPage > 7)
$menu .= $this->createLink(1, 1)
.
$this->createLink(2, 2)
.
$this->createLink(0, '...', '_top', false);
}

if($this->NumPage < 6)
{
$i = 1;
$cnt = 10;
}
elseif($this->NumPage >= $count - 5)
{
$i = $count - 10;
$cnt = $count;
}
else
{
$i = $this->NumPage - 5;
$cnt = $count;
}

if($this->NumPage < 6)
$cnt = $i + 9;
elseif($count - $i > 10)
$cnt = $i + 10;
}

while($i <= $cnt)
{
if($i == $this->NumPage)
$menu .= $this->createLink($i, $i, '_active', false);
else
$menu .= $this->createLink($i, $i);

$i++;
}

if($count > 12)
{
if($this->NumPage < $count - 6)
$menu .= $this->createLink(0, '...', '_top', false)
.
$this->createLink(($count - 1), ($count - 1));

if($this->NumPage < $count - 5)
$menu .= $this->createLink($count, $count);
}

$end = ($this->NumPage + 10 > $count) ? $count : $this->NumPage + 10;

if($this->NumPage < $count - 5 && $count - $this->NumPage >= 10)
$menu .= $this->createLink($end, '   >+10', '_top');

return $menu ."\n\n<!-- IRB_Navigator end -->\n";
}

/**
* Makes a hyperlink
*
@param int $page
*
@param string $link, $class
*
@param bolean $active
*
@access private
*
@return string
*/

private function createLink($page = 1, $link = '', $class = '', $active = true)
{
$string = $this->StartLink . $page;

if(empty($link))
$link = $page;

if($active)
return '<a class="IRB_paginator'.$class.'" href="'. href('num='.$string) .'" />'. $link ."</a>\n";
else
return
'<span style="font-size:16px; font-weight:bold; color:red;" class="IRB_paginator"'.$class.'"/>'. $link ."</span>\n";
}

}

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

Спустя 1 час, 12 минут, 47 секунд (21.01.2011 - 17:20) twin написал(а):
smile.gif Молодца. Круто.

Спустя 9 дней, 18 часов, 21 минута, 58 секунд (31.01.2011 - 11:42) Evilsoul написал(а):
Твин, не знал куда, добавил сюда
  $file_extension = pathinfo($_FILES['userfile']['name'], PATHINFO_EXTENSION);  

сюда можно добавить strtolower()

Спустя 6 часов, 11 минут, 50 секунд (31.01.2011 - 17:54) AnDer написал(а):
Добрый день
вот кусочек кода из урока по созданию гостевой на SQL


* The data deleting block
* Блок удаления информации
*/
if($ok)
{
mysqlQuery("DELETE FROM `". IRB_DBPREFIX ."guest`
WHERE `id` IN ("
. implode(', ', array_map('intval', $POST['array1'])) .")"
);

reDirect();


Поясните плизз что делается внутри array_map что даёт intval . К сожалению не нашол нормального описания ф-и array_map . Он ото есть только или я тормоз или я чего то не пойму.

Да и если можно расскажите об intval я исчю что она делает но на ПХП су ничего человеческого сейчас по книжкам роюсь.

Лично мне кажется что это проверка на целые числа хот я не уверен


Заранее благодарен.

Спустя 39 минут, 10 секунд (31.01.2011 - 18:33) Evilsoul написал(а):
1) array_map -применяет пользовательскую функцию к каждому члену массива
2) ты прав

Спустя 43 минуты, 45 секунд (31.01.2011 - 19:17) AnDer написал(а):
Цитата (Evilsoul @ 31.01.2011 - 15:33)
1) array_map -применяет пользовательскую функцию к каждому члену массива
2) ты прав

Спасибо за помощь

Спустя 36 минут, 44 секунды (31.01.2011 - 19:54) twin написал(а):
Цитата
Лично мне кажется что это проверка на целые числа хот я не уверен
Это не проверка. Проверка не влияет на результат.

Это привидение типа к числовому. То есть, если туда сунуть не число и не числовую строку, то на выходе будет 0.

Спустя 1 день, 20 часов, 40 минут, 44 секунды (3.02.2011 - 16:35) AnDer написал(а):
Добрый день вопросик такой.
Вот в ядре есть заначка реализации поддержки нескольких языков только НЕ готова до конца.
Подскажите а в каком направлении двигаться для реализации возможности переключения.
Как я понимаю нужен будет под неё параметр гет (параметр языка) и кукисы чтобы сайт был на томе языке на котором он был когда последний раз на него заходили с определённого компьютера.

Надеюсь я правильно думаю ?

Спустя 4 минуты, 27 секунд (3.02.2011 - 16:39) twin написал(а):
Вполне разумно.

Спустя 7 часов, 6 минут, 11 секунд (3.02.2011 - 23:45) S1nes написал(а):
Не знаю задавали ли уже вопрос, но все же...
Почему в исходнике ядра нет функции reDirect() ?
У меня из-за этого возникли ошибки в админке. Пришлось пересматривать уроки в ее поисках!

Спустя 1 час, 13 минут, 39 секунд (4.02.2011 - 00:59) twin написал(а):
О как... Надо посмотреть...

Спустя 3 дня, 19 часов, 25 минут, 50 секунд (7.02.2011 - 20:25) AnDer написал(а):
1.Добрый день подскажите пожалуйста а если мне нужно глубоко в меню попасть например такую ссылку.
my_sites.ru/IRB_SQL/gosteveja/avto/.. (а тут ещё много вложенностей)../serija5/otzivi/podsibniki/jetcool/

Тесть я не совсем пойму как быть например вложенностью до 20ти ступеней
Файл variables.php
* Array of variables for GET-parametres 
* Массив переменных для GET-параметров
*/
$GET = array(
'page' => 'main',
'rem' => 'read',
'id' => 0,
'num' => 0,
);


Как я понимаю надо делать так надеюсь я правильно понимаю ?

* Array of variables for GET-parametres 
* Массив переменных для GET-параметров
*/
$GET = array(
'page' => 'main',
'rem1' => 'read',
'rem2' => 'read',
'rem3' => 'read',
'rem4' => 'read',
'rem5' => 'read',
//.......
'rem20' => 'read',
'id' => 0,
'num' => 0,
);



2. У меня в админке вот такой косяк


нажав на ссылку типа
<a href="http://my_sites.ru/IRB_SQL/admin/meta">Метаданные</a></li>

http://my_sites.ru/IRB_SQL/admin/main/?route=main

Вот что внутри admin_menu.tpl
<li><a href="<?php echo href('page=meta'); ?>">Метаданные</a></li>


Тесть пока переменная вторая не введена такой глюк.

если вот так то глюка нету

<li><a href="<?php echo href('page=meta' ,  'rem=proverka' ); ?>">Метаданные</a></li>

то будет так
/my_sites.ru/IRB_SQL/admin/main/proverka

или так
<li><a href="<?php echo href('page=meta' ,  'num=proverka' ); ?>">Метаданные</a></li>


В этих случаях ссылку показывает нормально работает нормально
А да и ещё если нахожусь не в админке то все нормально работает .

Заранее благодарен за помощь

Спустя 1 час, 4 минуты, 43 секунды (7.02.2011 - 21:29) twin написал(а):
Цитата
Тесть я не совсем пойму как быть например вложенностью до 20ти ступеней
А для чего так много... Я максимум встречался с 6-ю, даже представить трудно больше.
Но если это действительно необходимо, то
Цитата
Как я понимаю надо делать так надеюсь я правильно понимаю ?
Да, правильно.

По второму вопросу ничего не понял. IRB_SQL - это откуда константа?

Спустя 20 минут, 7 секунд (7.02.2011 - 21:50) AnDer написал(а):
Цитата (twin @ 7.02.2011 - 18:29)

По второму вопросу ничего не понял. IRB_SQL - это откуда константа?

IRB_SQL Это не константа а название папки . Назвал так папку для гостевой на SQL. Я файлы сложил в неё чтобы директории mysites не лежали файлы ,просто глубже на одну папку.

Эм раз вы ничего не поняли значит мой косяк. Подумаю как выразиться яснее.....

Спустя 13 дней, 18 часов, 48 минут, 14 секунд (21.02.2011 - 16:38) джамшут написал(а):
У меня ошибка возникает из-за файла .htaccess

Спустя 1 день, 10 часов, 57 минут, 22 секунды (23.02.2011 - 03:35) Andrey65 написал(а):
Народ не подскажите доп. ресурс по изучению MVC, прогуглил и такое чувство что паттерн реализовывается только на ООП, а я боюсь пока этого, страшные классы и т.д. Или все-таки залезть в деби? все-равно наверно придется.

Спустя 4 часа, 39 минут, 10 секунд (23.02.2011 - 08:14) twin написал(а):
Чтото чуть чуть похожее тут.

Спустя 7 часов, 44 минуты, 51 секунда (23.02.2011 - 15:59) opensuse2008 написал(а):
При помещении файлов в другую папку, находящуюся в корневой директории, пропадает связь с папкой skins.
Если эту папку поместить в корень, связь появляется.
$_SERVER['DOCUMENT_ROOT'] возвращает только корень, дальше что-то не хочет.
В качестве тестирования установлен Денвер последней версии.

Собственно вопрос: Что не так, где надо подправить?

Если такой вопрос был, извините. smile.gif Сижу смотрю, методом тыка пока что ничего не получилось.

Спустя 17 минут, 24 секунды (23.02.2011 - 16:17) eXaM написал(а):
$_SERVER['DOCUMENT_ROOT'] и должен возвращать корень.
define('IRB_ROOT', $_SERVER['DOCUMENT_ROOT'] . '/папка');

Так будет новый корень в константе IRB_ROOT, это есть в статьях twin'а, но лучше писать не с document root, а сам путь, чтобы скрипт меньше зависел от сервера.

Спустя 11 минут, 50 секунд (23.02.2011 - 16:28) opensuse2008 написал(а):
вроде решил проблему. пришлось в *.tpl вставлять полный путь до *.css и также для картинок.
то есть так ="/123/skins/css/style.css"

Спустя 1 месяц, 18 дней, 8 часов, 4 минуты, 51 секунда (13.04.2011 - 23:33) mxwuser написал(а):
Снова немного запутался. Вот есть у меня 2 страницы допустим - Футбол\Гандбол\Волейбол. Для них все создаю(tpl, modules, admin, контролеры и прочее). Все, то что было на страницах разное я расписал. А теперь допустим я хочу на две страницы из трех засунуть одинаковый гаджет какой-нить, допустим часики. Так вот для этого мне нужно будет в контроллеры писать одинаковый код программы этих самых часиков, или лучше написать скрипт отдельный, кинуть в libs, и подключать его через свитч в зависимости от выбраной переменной GET['page']? Или можно его подключать через роутер?

Спустя 5 часов, 33 минуты, 31 секунда (14.04.2011 - 05:07) Invis1ble написал(а):
mxwuser
как удобней так и делай, не загоняй себя в рамки без нужды

Спустя 45 минут, 51 секунда (14.04.2011 - 05:53) inpost написал(а):
mxwuser
Я бы сделал в роутере, где подключается VIEW

Спустя 16 часов, 58 минут, 29 секунд (14.04.2011 - 22:51) mxwuser написал(а):
Почему-то не работают стили, подключенные к index.tpl. Тот же файл(css) при подключении к другим, обычным, страницам работает нормально, а тут не хочет(

Спустя 2 часа, 4 минуты, 10 секунд (15.04.2011 - 00:55) Invis1ble написал(а):
mxwuser
Покажи, как ты подключаешь css

Спустя 3 минуты, 24 секунды (15.04.2011 - 00:59) mxwuser написал(а):
<link rel="stylesheet" type="text/css" href="../css/style.css" />   

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

Спустя 20 минут, 11 секунд (15.04.2011 - 01:19) Invis1ble написал(а):
mxwuser
попробуй указать абсолютный путь, примерно так (зависит от твоей архитектуры):
<link rel="stylesheet" type="text/css" href="<?php echo IRB_HOST ?>skins/css/style.css" />

Если заработает - значит проблема в путях.

Спустя 1 минута, 36 секунд (15.04.2011 - 01:20) twin написал(а):
Можно и относительный, только без всяких точек:
<link rel="stylesheet" type="text/css" href="/skins/css/style.css" /> 

Спустя 15 часов, 55 минут, 39 секунд (15.04.2011 - 17:16) mxwuser написал(а):
Контроллеры делаются для каждого раздела('rem')?
Допустим у меня есть страница ПК. В ней 2 раздела MAC\IBM. Получается мне нужно 2 контроллера mac_controller и ibm_controller, которые будут переключаться через
switch($GET['rem'])
? Все правильно?

Спустя 1 час, 16 минут, 51 секунда (15.04.2011 - 18:33) twin написал(а):
Нет. Можно делать эти переключения в одном контроллере. А можно и вообще без них.

Не принимайте это пособие как руководство к действию и тем более как догму. Просто учитесь мыслить структурно. И как можно больше фантазии и свободы.

Иначе получится костыль.

Спустя 4 дня, 1 час, 38 минут, 27 секунд (19.04.2011 - 20:11) Georg-71 написал(а):
Здравствуйте. Необходима помощь. По урокам сделал ядро для сайта, при выставлении на хосте полезли ошибки хотя на локалке работало как часы. Помогите разобраться.

Вот ошибка
Это при входе в админку
Call to undefined function getmeta() in.....admin/index.php on line 119, а вот строка №119 $title = getMeta('title');

А при входе на сайт открывает шаблон с ошибкой вот такой
Warning: include(/......./admin/meta/router.php) [function.include]: failed to open stream: No such file or directory in /......./index.php on line 96

Я понимаю что ненаходит файла в директории но вот почему немогу понять файл там есть.
Прошу прошения если я пишу не тот раздел
Заранее благодарен

Спустя 5 минут, 17 секунд (19.04.2011 - 20:17) Invis1ble написал(а):
Georg-71
скорее всего ты скопировал файлы на хост не туда относительно корневой директории сервера, поэтому пути не те получились и вылазят ошибки.

Спустя 11 минут, 41 секунда (19.04.2011 - 20:28) Georg-71 написал(а):
У меня сайт открывается я могу переходить на страницы
А вот регистрация не реботает и гостевая тоже не хочет работать.
Спасибо за внимание.

Спустя 18 часов, 1 минута, 18 секунд (20.04.2011 - 14:30) mxwuser написал(а):
Call to undefined function getmeta() in.....admin/index.php

Означает то, что у тебя не определена функция. А так, как она определена должна быть в libs/*, то путь до этой папки корявый.
Посмотри в конфиге, пути IRB_HOST, ошибка где-то здесь, вероятно.
Регистрация и Гостевая, вполне возможно, не работают, по причине отсутствия, или неправильного подключения к БД.

Спустя 52 минуты, 27 секунд (20.04.2011 - 15:22) Georg-71 написал(а):
Вот эти строки ток че здесь не так? Если не сложно подскажите где ошибка, а еше лучше ткните меня в нее носом.

/**
* Establishes a path to a script root for HTTP
* Устанавливает путь до корневой директории скрипта
* по протоколу HTTP
*/

define('IRB_HOST', 'http://'. $_SERVER['HTTP_HOST'] .'/.....');

/**
* Establishes a physical path to a root directory of a script
* Устанавливает физический путь до корневой директории скрипта
*/

define('IRB_ROOT', str_replace('\\', '/', $_SERVER['DOCUMENT_ROOT']) .'/.....');


Заранее спасибо.

Спустя 2 минуты, 59 секунд (20.04.2011 - 15:25) Invis1ble написал(а):
Georg-71
:blink:
define('IRB_HOST', 'http://'. $_SERVER['HTTP_HOST'] .'/');
define('IRB_ROOT', str_replace('\\', '/', $_SERVER['DOCUMENT_ROOT']) .'/');

Спустя 8 минут, 5 секунд (20.04.2011 - 15:33) Georg-71 написал(а):
Сегодня после перезаливки вообще выдало

The template news/rows.tpl is absent in the specification
Что шаблон отсутсвует. Теперь вообше никуда не заходит.

Спустя 18 часов, 19 минут, 18 секунд (21.04.2011 - 09:52) Georg-71 написал(а):
Ребят чет я ниче вообще понять не могу. Я сейчас взял новости полнойстью отключил. Теперь я вышел на главную страничку сайта, но у меня вылетает вот эта теперь ошибка
Notice: Uninitialized string offset: 0 in /......./modules/main/read_controller.php on line 35
Вот линя 35
 /** 
* Function of generation of a menu of pages
* Функция генерации меню страниц
*
@param array
*
@return string
*/

function createMenu($links = array())
{
if(!empty($links[1]))
{
$menu = "<ul class=\"pages_menu\">\n";
foreach($links as $num => $link)
$menu .= "<li>
35) <a href=
\"". href('id='. $link[0]) ."\">". $link[1] ."</a>
</li>
\n";

return $menu ."</ul>\n";
}
}

Спустя 8 минут, 52 секунды (21.04.2011 - 10:01) twin написал(а):
Скорее всего на хостинге запрещено использовать полный путь. Я с таким встречался. Попробуй в конфиге сделать так
define('IRB_ROOT', './');

Спустя 1 час, 9 секунд (21.04.2011 - 11:01) Georg-71 написал(а):
Эфект нулевой непоьогает.

Спустя 3 минуты, 34 секунды (21.04.2011 - 11:05) Andrey65 написал(а):
define('IRB_ROOT', 'http://твой-сайт.com');

Спустя 50 минут, 16 секунд (21.04.2011 - 11:55) twin написал(а):
Ненене. Это физический путь.

Спустя 6 минут, 20 секунд (21.04.2011 - 12:02) Georg-71 написал(а):
И еше при попытке войти в админку выдает ошыбку вот эту

Warning: include(/...../europeskins/tpl/index.tpl) [function.include]: failed to open stream: No such file or directory in /...../europe/admin/index.php on line 119

вот сама линия
/**  
* Подключаем главный шаблон
* Includes the basic template
*/

include IRB_ROOT .'skins/tpl/index.tpl';


В админку вообше не могу войти.
Я уже взял болванку пустую.

Спасибо что помогаете.

Спустя 1 минута, 55 секунд (21.04.2011 - 12:04) Invis1ble написал(а):
Georg-71
ты попробовал прописать пути, как я показал?

Спустя 13 минут, 39 секунд (21.04.2011 - 12:17) Georg-71 написал(а):
Invis1ble

Самое интересное что они у меня так и были прописаны. Они были так же прописаны в уроках

Спустя 3 минуты, 9 секунд (21.04.2011 - 12:20) Invis1ble написал(а):
Georg-71
Цитата
так и были прописаны

ну как это? А вот это разве также:
Цитата
/**
* Establishes a path to a script root for HTTP
* Устанавливает путь до корневой директории скрипта
* по протоколу HTTP
*/
define('IRB_HOST', 'http://'. $_SERVER['HTTP_HOST'] .'/.....');

/**
* Establishes a physical path to a root directory of a script
* Устанавливает физический путь до корневой директории скрипта
*/
define('IRB_ROOT', str_replace('\\', '/', $_SERVER['DOCUMENT_ROOT']) .'/.....');

или я что-то неправильно понял?

Спустя 21 минута, 22 секунды (21.04.2011 - 12:42) Georg-71 написал(а):
Invis1ble

define('IRB_HOST', 'http://'. $_SERVER['HTTP_HOST'] .'/');
define('IRB_ROOT', str_replace('\\', '/', $_SERVER['DOCUMENT_ROOT']) .'/');

Если ты насчет многоточия так это я для себя сделал чтоб легче запоминать где мне корневую папку прописывать.

Спустя 3 минуты, 7 секунд (21.04.2011 - 12:45) Invis1ble написал(а):
Georg-71
да, насчет него. Покажи полностью, как ты прописываешь путь, без многоточия

Спустя 10 минут, 10 секунд (21.04.2011 - 12:55) Georg-71 написал(а):
Invis1ble
У меня сайт лежит в корне.
define('IRB_ROOT', str_replace('\\', '/', $_SERVER['DOCUMENT_ROOT']) .'/europe');

Спустя 30 минут, 15 секунд (21.04.2011 - 13:25) Invis1ble написал(а):
Georg-71
слеша не хватает:
define('IRB_ROOT', str_replace('\\', '/', $_SERVER['DOCUMENT_ROOT']) .'/europe/');

тоже самое в IRB_HOST, проверь наличие слеша в конце
Правда, я не совсем понял, зачем ты указываешь директорию, если сам пишешь, что
Цитата
У меня сайт лежит в корне

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

Спустя 2 минуты, 19 секунд (21.04.2011 - 13:28) Georg-71 написал(а):
Cпасибо огромное ша пробую уже.

Спустя 10 часов, 58 минут, 3 секунды (22.04.2011 - 00:26) Andrey65 написал(а):
Twin да как нет-то??? Я когда-то поднимал этот вопрос вот тут и получилось же, хоть и коряво, но все-же.

Спустя 10 часов, 2 минуты, 46 секунд (22.04.2011 - 10:28) Georg-71 написал(а):
Реебята огромное спасибо за помощь. Все заработало нашел все ошибки.

Спустя 12 часов, 56 минут, 19 секунд (22.04.2011 - 23:25) mxwuser написал(а):
Почему-то при выводе из базы данных значения, и подставления его в переменную гет, не выводится нули. Такое происходит только при включенном mod-rewrite. По всей видимость где-то недочет в функции преобразования гет переменных в массив $GET.

Спустя 1 день, 12 часов, 29 минут, 47 секунд (24.04.2011 - 11:54) mxwuser написал(а):
ап

Спустя 11 минут, 57 секунд (24.04.2011 - 12:06) twin написал(а):
Имеется ввиду rem=0 ?

Да, это так. Если требуются нули в GET-параметрах, нужно персмотреть логику. Дело в том, что empty() считает нуль за пустое значение. Нужно более сложно проверять. isset() и на пустоту.

Спустя 14 дней, 14 часов, 18 минут, 41 секунда (9.05.2011 - 02:25) mxwuser написал(а):
Можешь подсказать как твою функцию редирект переписать, чтобы можно было её использовать, для редиректа на внешние страницы?

Спустя 12 дней, 5 часов, 45 минут, 43 секунды (21.05.2011 - 08:11) Vseonet написал(а):
Уважаемый, twin. Уже писали, что в архиве 8-го урока не хватает функции reDirect() в libs/default.php

А вопрос мой в следующем. На локальном хостинге ядро работает прекрасно.
Залил данный скрипт на хостинг и получил ошибку 500:

Internal Server Error

The server encountered an internal error or misconfiguration and was unable to complete your request.

Please contact the server administrator, webmaster@....ru and inform them of the time the error occurred, and anything you might have done that may have caused the error.

More information about this error may be available in the server error log.

Additionally, a 500 Internal Server Error error was encountered while trying to use an ErrorDocument to handle the request.


Не могу разобраться из за чего это. Судя по пути в fileZilla сайт находится здесь /public_html/мойсайт.ru Пробовал прописать такой путь в конфиге - не помогло.

P.S. еще небольшой вопрос не по теме - в папке сайта на хостинге создался файл .ftpqouta с содержимым "1 0". Что это за файл и для чего нужен? Не хочу беспокоить хостера по возможно пустяковому вопросу )

Спустя 1 час, 42 минуты, 40 секунд (21.05.2011 - 09:54) twin написал(а):
Функцию добавлю, спасибо.
500-я ошибка потому что php установлен как CGI
Придется из .htaccess удалить вот эти флаги
php_flag magic_quotes_gpc Off 
php_flag magic_quotes_runtime Off
php_flag register_globals Off
ну и все остальные, если есть и настроить это в php.ini

.ftpqouta это квота на ftp аккаунты. Просто не обращай внимание. Или удали.

Спустя 15 минут, 12 секунд (21.05.2011 - 10:09) Vseonet написал(а):
Спасибо, помогло.

Скажите, а если так установлен php это плохо? Лучше перейти на другой хостинг?
И еще - такой файл нужно создавать или он уже где то лежит, как его найти?

Спустя 2 часа, 40 минут, 24 секунды (21.05.2011 - 12:49) twin написал(а):
Цитата
Скажите, а если так установлен php это плохо?
Нет... Ни плохо ни хорошо. Просто подругому. Есть и плюсы и минусы у обоих способов установки. Хостинг по этой причине менять не стоит, если все остальное устраивает.

Как настраивать - лучше узнать в саппорте. И не нужно стесняться, они за это зп получают.

Спустя 2 дня, 23 часа, 25 минут, 8 секунд (24.05.2011 - 12:14) Vseonet написал(а):
Уважаемый, twin, снова вопрос по гостевой на SQL
Не могу разобраться как подключить смайлики.
Скачал уже готовый архив - все равно не работает.
Изначально сами смайлики не отображались. Изменил немного пути в шаблоне, смайлики (gif файлы) стали отображаться, но когда на них нажимаешь они не добавляются в сообщение. И если пишешь в сообщении [smile.gif], то этот тег тоже не трансформируется в смайлик уже в опубликованном сообщении.
Плюс к этом у нас появился графический редактор, как его включить?

Спустя 29 минут, 50 секунд (24.05.2011 - 12:44) twin написал(а):
Проверил еще раз - образец рабочий на 100%.
Что то где то ты напутал.

Спустя 4 часа, 52 минуты, 53 секунды (24.05.2011 - 17:37) Vseonet написал(а):
twin, поставил образец уже на платный хостинг.
Добавляться смайлы в сообщение стали, но выглядят тегами.
Вот глянь http://gadget-china.com
На локалке даже это не работает.
Думаю где-то что-то с путями

Спустя 32 минуты, 20 секунд (24.05.2011 - 18:09) twin написал(а):
Да, это мой косячек. Конфига не оттуда.
Вобщем открой конфигу bbcode\config.php и измени массив single_tags на такой
               // Не парные теги (смайлики и иже с ними)                       
'single_tags' => array(
'[:)]' => '<img src="'. IRB_BB_PATH .'/smiles/1.gif" />',
'[:(]' => '<img src="'. IRB_BB_PATH .'/smiles/2.gif" />',
'[;)]' => '<img src="'. IRB_BB_PATH .'/smiles/3.gif" />',
'[:D]' => '<img src="'. IRB_BB_PATH .'/smiles/4.gif" />',
),

Либо допиши это в него

Спустя 6 минут, 32 секунды (24.05.2011 - 18:16) twin написал(а):
Залил исправленный архив.

Спустя 32 минуты, 13 секунд (24.05.2011 - 18:48) Vseonet написал(а):
Спасибо, заработало.

На локалке осталась проблема (путь начинается с дополнительной папки, которую я прописываю в конфиге, возможно еще где нужно прописать ее?) . Когда нажимаю на изображение, то оно не добавляется в сообщение. Но если прописать руками, то отображается в уже опубликованном сообщении. В каком файле искать причину? Думается мне, что это js?

Еще была такая проблема. Залив архив на хостинг - надписи из этого файла skins/tpl/admin/guest/show.tpl отображались вопросиками, возможно сохранен не в той кодировке? Я его пересоздал и все нормально стало отображаться.

А мы где то дальше будем использовать графический редактор, который создали в репозитарии?

И последнее. Что означает запись dirname(__FILE__)? Функция возвращает имя каталога, в котором находится файл. А у нас каким образом это происходит. Т.е. что означает аргумент __FILE__. Не нашел я его в описании функции.

Спустя 53 минуты, 7 секунд (24.05.2011 - 19:41) twin написал(а):
Цитата
В каком файле искать причину? Думается мне, что это js?

ну наверняка.

__FILE__ - предопределенная константа. Там название файла, в котором она написана.

Спустя 1 день, 22 часа, 51 минута, 30 секунд (26.05.2011 - 18:33) Vseonet написал(а):
Нашел таки ошибку. Все таки это были пути.
В этом файле skins/tpl/index.tpl
<link type="text/css" rel="stylesheet" href="./skins/css/style.css" />
<link
type="text/css" rel="stylesheet" href="./skins/css/paginator.css" />
<script
type="text/javascript" language="javascript" src="./skins/js/bb_code.js"></script>

Поставил перед путями точки, в результате чего и стили и яваскрипт заработали на локалке. Мб стоит поправить это в листингах

P.S. можно вопрос не по теме :) ? Как с помощью сессий и куков определить с какой страницы пользователь покинул сайт и при следующем его заходе, сразу направить его на страницу, с которой сайт был покинут им.

Спустя 53 минуты, 18 секунд (26.05.2011 - 19:26) twin написал(а):
Цитата
Поставил перед путями точки, в результате чего и стили и яваскрипт заработали на локалке. Мб стоит поправить это в листингах


А вот и неверное решение. Нужно просто указать абсолютный путь или добавить папку, в которой скрипт. С точкой не будет работать в корне.

Вопрос в отдельную тему.

Спустя 5 дней, 22 часа, 54 минуты, 45 секунд (2.06.2011 - 18:21) doogdsgn написал(а):
Добрый день twin.
Собственно проблема в следующем:
Вот код который выводит данные из базы.


$news = mysqlQuery("SELECT *

FROM `news` WHERE `ownerid` = '
$userid' ORDER BY `news`.`id` DESC") or die(mysql_error());

$news_rows = '';
$i = 0;

if(mysql_num_rows($news) > 0)
{
$tpl = getTpl('news/show');

while($row = htmlChars(mysql_fetch_assoc($news)))
{
++$i;
$row['id'] = $i;
$news_rows .= parseTpl($tpl, $row);
}
}



Всё работает должным уровнем всё в ёлочку. Но вот беда, не могу дапереть как вывести из базы по "ID" как правильно с формулировать запрос к базе, что бы выводилось в отдельном шаблоне допустим не (news/show ("ЭТО ВСЕ")) а в (news/view ("ЭТО ОТДЕЛЬНАЯ"))

как правильно сделать ссылку для перехода с главной на внутреннюю.

На всякий случай приведу весь код


<?php

if(!defined('IRB_KEY'))
{
header("HTTP/1.1 404 Not Found");
exit(file_get_contents('../../404.html'));
}

include_once IRB_ROOT .'libs/mysql.php';

$userid = $_SESSION['user_id'];

$news = mysqlQuery("SELECT *

FROM projects WHERE ownerid = '
$userid' ORDER BY `projects`.`id` DESC") or die(mysql_error());

$news_rows = '';
$i = 0;

if(mysql_num_rows($news) > 0)
{
$tpl = getTpl('news/show');

while($row = htmlChars(mysql_fetch_assoc($news)))
{
++$i;
$row['id'] = $i;
$news_rows .= parseTpl($tpl, $row);
}
}

?>



За ранее огромнейшее спасибо

Спустя 1 месяц, 2 дня, 6 часов, 17 минут, 32 секунды (5.07.2011 - 00:38) doogdsgn написал(а):
Доброй ночи Twin.

У меня пара вопросов.
Первый касается модуля новостей, у меня при добавлении в базу заносится ещё и название в латинице, допустим назовём "othertitle". Как мне сделать чтобы в списке новостей ссылка была не по "id" а по "othertitle" и соответственно полную новость выводило не по "id" этой новости а по "othertitle"

Второе это в регистрации в кабинете при смене пароля по умолчанию пароль должен быть не менее 8-и символов, однако даже если введёшь "1" то пароль поменяется хоть и ошибку выводит.

Да кстати что касается новостей, когда пишешь новость у которой id равен 10 или 20, в общем круглому числу, то при генерации ссылки на полную новость "0" просто исчезает в самой ссылке, получается что при нажатии на ссылку с id 10 перекидывает на новость с id 1 и т.д.


Заранее очень вам благодарен.

Спустя 2 месяца, 6 дней, 22 часа, 22 минуты, 52 секунды (11.09.2011 - 23:01) rusiamen написал(а):
Здравствуйте, у меня возник вопрос. Хотя возможно он уже и поднимался. Почему у вас модель не отделяется от контроллера?

Спустя 7 часов, 39 минут, 55 секунд (12.09.2011 - 06:41) twin написал(а):
А зачем? Модель стоит выделять в отдельный файл только если она используется минимум дважды.
Если это ООП парадигма - там никуда не денешься. Придется писать класс-наследник. И его крайне желательно иметь в отдельном файле. Тут все гибче и зависит от условий. Если страница одна - нафига кучу файлов для неё?

Спустя 2 часа, 38 минут, 33 секунды (12.09.2011 - 09:20) rusiamen написал(а):
Хорошо что вы заговорили про OOP. Дело в том, что в конечном счете я хочу перевести ваш 'фреймворк' на OOP. Не то чтобы у меня большой в этом опыт, но основы я знаю и поэтому хотелось бы начать писать именно так.

Так вот, вы бы не могли подсказать как мне наиболее грамотно перейти на объектный подход?

Спустя 36 минут, 33 секунды (12.09.2011 - 09:56) twin написал(а):
Вообще это не фреймворк вовсе. Это просто принципы построения. Причем именно процедурно.
Как писать на ООП парадигме лучше посмотреть здесь.

Спустя 1 час, 1 минута, 27 секунд (12.09.2011 - 10:58) rusiamen написал(а):
А допустимо ли тогда в этом случае смешивание классов, со всем остальным. Например, я хочу написать универсальный класс для регистрации. Предположительно я засуну его в libs, а вот уже рычаги управления им перенесу в контроллер соответствующего модуля и так возможно поступлю с еще парочкой модулями. Допустимо ли это в нашем случае?

Спустя 5 минут, 48 секунд (12.09.2011 - 11:03) twin написал(а):
Конечно, почему нет. Там дальше есть примеры, как используются классы постранички к примеру или bb-шек или почты той же.

Спустя 5 минут, 48 секунд (12.09.2011 - 11:09) rusiamen написал(а):
Спасибо за ответы и за курс, хорошее дело делаете)

Спустя 6 месяцев, 21 день, 39 минут, 11 секунд (3.04.2012 - 11:48) Гость_алексей написал(а):
наконецто исправил все ошибки но не могу войти в админ панель

ввожу логин root и пароль 123456 и не чего не происходит

Спустя 6 минут, 58 секунд (3.04.2012 - 11:55) Игорь_Vasinsky написал(а):
а где код?

Спустя 31 минута, 37 секунд (3.04.2012 - 12:27) Гость_алексей написал(а):
код не менял всё как в уроке Модуль новостей всё работает но не могу войти в админ панель

Спустя 27 минут, 1 секунда (3.04.2012 - 12:54) twin написал(а):
Нужно логин root и пароль root.

Спустя 23 минуты, 40 секунд (3.04.2012 - 13:18) Гость_алексей написал(а):
Спасибо помагло

Спустя 4 месяца, 29 дней, 5 минут, 29 секунд (2.09.2012 - 13:23) kdes70 написал(а):
подскажите как можно подключит модуль поиска по сайту на это ядро
например в хедере у меня форма поиска

1 в модулях сделал каталог search
-контроллер
-ройтер
-вит
2 так же tpl сделал шаблон с видом новостей

а вот как вызывать этот поиск не пойму пробовал в кейсе
 case 'index':
if(isset($_POST['submit']))
include './moduls/search/router.php';
else
include './moduls/index/router.php';

break;


_____________
Если вам недостаточно собственных заблуждений, можно расширить их мнениями экспертов.

Нужно уважать мнение оппонета. Ведь заблуждаться - его святое право.

Настаивал, настаиваю и буду настаивать на своем. На кедровых орешках.

user posted image
Быстрый ответ:

 Графические смайлики |  Показывать подпись
Здесь расположена полная версия этой страницы.
Invision Power Board © 2001-2025 Invision Power Services, Inc.