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

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

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

Хочу сказать сразу. Мы не будем использовать шаблонизатор, хотя шаблоны использовать будем. Будет вспомогательный скрипт, который поможет нам с циклами, но его можно назвать шаблонизатором с очень большой натяжкой. Но об этом позже.

Если вспомните, мы как то касались области видимости. Дело в том, что переменная, объявленная вне функции, внутри функции не видна. Можно передать её аргументом и зачастую так и нужно делать. Но иногда бывает удобнее затянуть её в функцию иначе, не аргументом. Для этого и существует конструкция global.

Если объявить переменную глобальной (поставить перед ней эту конструкцию), то она станет доступной. Именно так мы и поступили с переменной $GET .

Тут надо отметить нюанс - если переменную, объявленную глобальной, изменить в функции, она изменится везде. Поэтому не стоит злоупотреблять такой конструкцией, можно очень сильно запутать логику. Мы, что бы обозначить то, что переменная объявлялась глобальной, написали её в верхнем регистре.

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


Полный урок здесь.



Спустя 1 день, 14 часов, 59 минут, 1 секунда (21.11.2009 - 11:57) CaypoH написал(а):
twin
Цитата
Если есть вопросы по работе этой функции, не стесняйтесь.

а вот и не застесняюсь, оголю всё своё пхп-нубство, и пойду в Отаку:
$arg = func_get_args();

что это за функция почитал на php.su. вдумчиво, раза 3 перечитал пока наконец понял как именно оно построено.
и вот что сразу хочу сказать о пхп как языке программирования (небольшое отступление, извиняюсь): в нём десятки, нет, даже сотни встроенных функций типа вышеозначенной (попав первый раз на пхп.су у меня чуть глаз не задергался). из-за чего учить пхп трудно. может быть я и не прав, но с такой точки зрения С и С++ выучить проще. потому что в пхп, к примеру, не зная о существовании какой-либо функции можно написать подобие оной от себя, с циклами, кучей запросов и т.д., и работать это будет глюкаво не очень быстро. тогда как встроенная функция выполняет нужную вещь за тысячные доли секунды.
вот поэтому, большая просьба, если можно, доносить до нас всю их суть. а то получается что вы означили чуть ли не ключевую функцию, а пояснений по ней никаких не дали.
Цитата
Я добросовестно вам все комменчу

вот функцию комментами былоб неплохо разобрать unsure.gif

я правильно понимаю, что ссылки у нас будут выглядеть примерно так: www.mysite.ru/?mod=news&id=10&page=3 ?
в таком случае у нас нигде никогда не засветится название index.php или какое-либо другое php? (лично мне очень нравится реализация сайта http://stalkerz.ru/ у них ссылки примерно так сделаны. хотя сайт на перле, но об этом тяжело догадаться. при этом если ввести у них http://stalkerz.ru/index.pl то выкинет на 404 страницу).
foreach($arg as $var)

эм... неужели я пропустил момент инициализирования переменной $var? и что здесь делается?
foreach($GET as $var => $val)

вот тут я вообще запутался...

мб кто-то скажет, что раз я ничё не понял, то и делать мне тут нечего. Но ведь не у всех цель вступить в команду чтобы делать какие-то коммерческие проекты. Я лично хочу просто научиться ПРАВИЛЬНО кодить. И очень надеюсь что тов. twin объясняет всё на уровне upper intermediate.
Ибо скачал я накануне "видеокурс евгения попова" и практически со вступительного слова понял что он сказочный ламер (fairytale one), и вот очень жалею что нет таких видеокурсов, но наглядно объясняющих как всё нужно кодить на самом деле.
п.с. извиняюсь за многобукаф, пока писал даже забыл что ещё хотел спросить. В голове много всякого роится.

Спустя 5 часов, 9 минут, 22 секунды (21.11.2009 - 17:06) Kerlyk написал(а):
Сразу хочу отметить, что присоединяюсь к прохождению курсов, но, к сожалению, не могу гарантировать со своей стороны оперативность по задаваемым здесь вопросам в связи с ограниченностью во времени.
Вот откомментированный код по поводу $GET
 
/**
* If mode REWRITE is on (than URL will look like: site.ru/atr1/atr2/atr3) and external params exist, than
* Если включен REWRITE (тогда URL будет вида: site.ru/atr1/atr2/atr3) и есть входные параметры, то
*/

if(!empty($_GET['route']) && MOD_REWRITE == 'on')
{
/**
* < ENGLISH >
* Обрабатываем значение $_GET['route'], которое содержит в себе atr1/atr2/atr3.
* 1. Удаляем '/' в начале и конце строки функцией trim()
* 2. Разделяем полученную строку функциейexplode() по символу '/'
* 3. Записываем полученные значения в массив $get
*/

$get = explode('/', trim($_GET['route'], '/'));
$i = 0;

/**
* < ENGLISH >
* Теперь для каждого элемента массива $GET (не путать с $get) присваиваем, при наличии, соответствующие эл-ты массива $get.
*/

foreach($GET as $var => $val)
{
if(!empty($get[$i]))
$GET[$var] = $get[$i];

++
$i;
}
}

/**
* < ENGLISH >
* Иначе (если реврайт не включен, но параметры передаются)
*/

elseif(count($_GET))
{
/**
* < ENGLISH >
* Для каждого элемента массива $GET присваеваем соответствуещее внешнее значение $_GET (аргументы в URL-е)
*/

foreach($GET as $var => $val)
if(!empty($_GET[$var]))
$GET[$var] = $_GET[$var];
}


Если кто-то не помнит про Реврайт - дружно идем на первый урок курса и вчитываемся в корневой .htaccess
Для справки:
trim()
explode()

Спустя 5 часов, 33 минуты, 26 секунд (21.11.2009 - 22:39) Kerlyk написал(а):
Цитата (tata @ 21.11.2009 - 18:48)
Kerlyk, уточните, плиз:
массив $GET = array(
'mod' => 0,
'rem' => 0,
'id' => 0,
'page' => 0,
);

массив $get: $get[0]= 'atr1 ' $get[1]= 'atr2 ' $get[3]= 'atr2 '

В foreach($GET as $var => $val) "ключ текущего элемента присваивается переменной $var", т.е. $i
$val - последовательно будет принимать значения $get
тогда что получится в результате $GET[$var] = $get[$i]?
У меня получается, что
$GET[0] , т.е. ('mod') ='atr1' ?
что не так?

И

Цитата
Может кто-нить объяснить что конкретно попадает в массив $get на примере ссылки?


Смотрите. Пример
Используем Mod_Rewrite ON (т.е. теперь у нас работает правило изменения URL-а: RewriteRule ^(.*)$ index.php?route=$1 [L,QSA] ) Это значит, что адрес будет преобразован.
К примеру, такой зарос в адресной строке:
http://test.den/10/5/7/3
Будем логически преобразован в:
http://test.den/index.php?route=10/5/7/3
Отсюда у нас Есть один единственный $_GET параметр $_GET['route'].
Нам нужно значение $_GET['route'] разбить на отдельные параметры 'mod', 'rem', 'id' и 'page'.
Для этого и используется explode функция.
В итоге, после разбиения мы получим массив $get
Со значениями:
$get[0]=10
$get[1]=5
$get[2]=7
$get[3]=3
Потом мы перекидываем эти значения в массив $GET циклам foreach. Таким образом получаем:
$GET['mod']=10 //$get[0]
$GET['rem']=5 //$get[1]
$GET['id']=7 //$get[2]
$GET['page']=3 //$get[3]
Вот и все. Понятно?

Спустя 2 минуты, 40 секунд (21.11.2009 - 22:42) padsken7 написал(а):
Функция href
Вопрос №1: когда второй раз используем foreach, почему не используем фигурные скобки? хотя в первом foreach тело цикла обрамили {}.
Вопрос №2: в чем различие между и isset и !empty ?
Вопрос №3: функция href может принимать несколько аргументов?
Вопрос №4:
  foreach($GET as $var => $val)  
if(isset($val) && MOD_REWRITE == 'on')
$href .= '/'. $val;
elseif(!empty($val))
$href .= '&'. $var .'='. $val;

Можно вот это прокомментировать поподробнее?

Спустя 8 минут, 58 секунд (21.11.2009 - 22:51) Kerlyk написал(а):
Цитата (padsken7 @ 21.11.2009 - 19:42)
Функция href
Вопрос №1: когда второй раз используем foreach, почему не используем фигурные скобки? хотя в первом foreach тело цикла обрамили {}.
Вопрос №2: в чем различие между и isset и !empty ?
Вопрос №3: функция href может принимать несколько аргументов?
Вопрос №4:
  foreach($GET as $var => $val)  
if(isset($val) && MOD_REWRITE == 'on')
$href .= '/'. $val;
elseif(!empty($val))
$href .= '&'. $var .'='. $val;

Можно вот это прокомментировать поподробнее?

Ответ №1
Потому что этот цикл содержит 1 (хоть и комбинированный) операнд if elseif. Как известно, для 1 операнда фигурные скобки не требуются.
Ответ №2
isset() - определяет вообще наличие переменной. Неважно, каким она обладает значением, важно, чтобы она была хотя бы объявляена.
!empty() - определяет, что значение переменной не null и не ''.
К примеру.
$val='';
isset($val) вернет true, т.к. переменная объявлена
!empty($val) вернет false, т.к. переменная пуста (значение '' или null)
Ответ №3
функция href может получать любое кол-во аргументов.
Достаточно было посмотреть описание функции func_get_args(), чтобы получить ответ. Впредь попрошу проявлять хоть какую-то долю самостоятельности.
Ответ №4
  foreach($GET as $var => $val)  // Для каждого элемента массива $GET
if(isset($val) && MOD_REWRITE == 'on') //Если установлен влаг на REWRITE и установлено значение $val
$href .= '/'. $val; //добавляем его к общему URL в виде '/'+'значение'
elseif(!empty($val)) //Иначе (если MOD_REWRITE != 'on')
$href .= '&'. $var .'='. $val; //добавляем его к общему URL в виде '&'+имя_параметра+'='+'значение'

Спустя 1 час, 19 минут, 55 секунд (22.11.2009 - 00:11) padsken7 написал(а):
Kerlyk , спасибо огромное за такой подробный ответ! Но все еще осталось несколько вопросов:
1. WTF?
elseif(!empty($val)) //Иначе (если MOD_REWRITE != 'on') 

2.
$href .= '/'. $val; //добавляем его к общему URL в виде '/'+'значение'

Насколько я понял, в $GET значения $val по-умолчанию 0, если мы не задаем их функцией href. Тогда в урл будут 0 добавлятся? Сори, если очень сильно туплю, я нуб

Спустя 4 часа, 8 минут, 36 секунд (22.11.2009 - 04:20) Kerlyk написал(а):
Цитата (tata @ 21.11.2009 - 21:06)
Kerlyk , спасибо за подробный ответ smile.gif

Цитата
/**
*Distribution of values in variables
*Распределение значений в переменные
*/

$title = $main[ $GET['mod'] ]['title'];
$keywords = $main[ $GET['mod'] ]['keywords'];
$description = $main[ $GET['mod'] ]['description'];



Мы в переменных объявили $GET - массив, $main - двумерный массив, первый идекс $GET['mod'] - в нашем примере он должен принимать либо значение 'news' либо 'gellery'? а где определяется, какое именно значение у него?

Всегда пожалуйста.

Все очень просто. Наш массив входных параметров формируется в подключаемом файле variables.php вот этими строчками:
/**
* Array of variables for GET-parametres
* Массив переменных для GET-параметров
*/

$GET = array(
'mod' => 'news',
'rem' => 0,
'id' => 0,
'page' => 0,
);


/**
* Initialization of variables GET-parametres
* Инициализация переменных GET-параметров
*/

if(!empty($_GET['route']) && MOD_REWRITE == 'on')
{
$get = explode('/', trim($_GET['route'], '/'));
$i = 0;

foreach($GET as $var => $val)
{
if(!empty($get[$i]))
$GET[$var] = $get[$i];

++
$i;
}
}

elseif(count($_GET))
{
foreach($GET as $var => $val)
if(!empty($_GET[$var]))
$GET[$var] = $_GET[$var];
}


padsken7
1. Смотри
Первоначальное условие у нас было:
 if(isset($val) && MOD_REWRITE == 'on')

Мы перейдем к нашему проблемному условию только в трех случаях:
1. MOD_REWRITE != 'on'
2. isset($val) == false (т.е. переменная не назначена)
3. и MOD_REWRITE != 'on' и isset($val) == false
И после этого мы проверяем следующее условие:
 elseif(!empty($val)) //Иначе (если MOD_REWRITE != 'on') 

Если оно будет истинно (т.е. $val во-первых, существует, во-вторых, имеет какое-то значение), то оно тем самым исключаем пункты 2 и 3. Отсюда вытекает мой коммент:
//Иначе (если MOD_REWRITE != 'on') 


2. Да, по умолчанию там 0. НО !!!!
Посмотри на эти строки:

foreach($arg as $var)
{
$get = explode('=', $var);

if(array_key_exists($get[0], $GET))
$GET[$get[0]] = $get[1];
else
die('The variable <b>'. $get[0] .'</b> is not defined');
}

Здесь-то и формируются новые значения для $GET на основе переданных аругментов в функцию href().
Поэтому при заданных параметрах там не всегда будут нули.


----------------------------------

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

Спустя 6 часов, 14 минут, 54 секунды (22.11.2009 - 10:34) Kerlyk написал(а):
Ka4_0k
Ну вот прежде чем это писать, попробуй обратиться к нашему txt файлу напрямую у себя на хосте. Ну что, получилось ?
А все по той же причине, о которой я уже устал писать на форуме. Настроенный Rewrite в .htaccess В ЛЮБОМ СЛУЧАЕ не дает доступ к файлам, кроме index.php и admin/index.php

Спустя 6 часов, 51 минута, 2 секунды (22.11.2009 - 17:25) Хозяин Огня написал(а):
Пытаюсь разобраться с функцией href, кстати, twin, просьба о пояснениях для этой функции в силе)

Значит всё происходит так, на примере конкретной ссылки.
1. Юзер жмёт на ссылку http://test.den/galery
2. http://test.den/galery "отправляется" в index.php.
3. Оттуда - в variables.php, где galery забивается в ассоциативный массив - $GET = array('mod' => galery).
4. Дальше этот массив "отправляется" в ./libs/default.php., кстати, что попадает в аргументы функции href?

До этого момента всё верно?


Спустя 18 минут, 43 секунды (22.11.2009 - 17:44) Shturman написал(а):
Я разобрался:

function href()
{
global $GET; // Берем массив, сформированный ранее
$temp = $GET; // Это моя заплтка - ниже поясню от чего
$href = '';
$arg = func_get_args(); // Получаем массив аргументов переданных в скобках href(тут_вот)

if(defined('ADMIN'))
$href = '/admin'; // Если вошел админ - в начале ссылки будет '/admin'

foreach($arg as $var) // Перебираем полученные аргументы
{
$get = explode('=', $var); // Разделяем имя переменной и значение (mod=gallery, например)

if(array_key_exists($get[0], $GET)) // Если в массиве $GET есть ключ, полученный выше (в данном случае 'mod')
$GET[$get[0]] = $get[1]; // То этому ключу присваеваем полученное значение (в данном случае 'gallery') - вот от этого и сделана заплатка, т.к. запись идет в глобальный $GET
else
die('The variable <b>'. $get[0] .'</b> is not defined'); // Иначе...
}

foreach($GET as $var => $val) // Теперь поочередно вставяем значения из $GET в ссылку
if(isset($val) && MOD_REWRITE == 'on')
$href .= '/'. $val; // Если следующий парамтр существует
elseif(!empty($val))
$href .= '&'. $var .'='. $val; // Собсно, добавление значения в ссылку

$GET = $temp; // Вторая часть заплатки

if(MOD_REWRITE == 'on')
return HOST . trim($href, '/');
else
return
HOST .'?'. trim($href, '&');
}

Спустя 1 час, 9 минут, 3 секунды (22.11.2009 - 18:53) Shturman написал(а):
Предлагаю новую редакцию href()

/**
* Function of formation of GET-parametres
* Функция формирования GET-параметров
*/


function href()
{
global $GET;
$temp = $GET; // Это спасет от операций над глобальным массивом
$href = '';
$arg = func_get_args();

if(defined('ADMIN'))
$href = '/admin';

foreach($arg as $var)
{
$get = explode('=', $var);

if(array_key_exists($get[0], $temp))
$temp[$get[0]] = $get[1];
else
die('The variable <b>'. $get[0] .'</b> is not defined');
}

foreach($temp as $var => $val)
if(isset($val) && MOD_REWRITE == 'on')
$href .= '/'. $val;
elseif(!empty($val))
$href .= '&'. $var .'='. $val;


if(MOD_REWRITE == 'on')
return HOST . trim($href, '/');
else
return
HOST .'?'. trim($href, '&');
}

Спустя 8 дней, 9 часов, 47 минут, 48 секунд (1.12.2009 - 04:41) Evilsoul написал(а):
Всем привет.

Уже поздно и немного тяжело с соображением, но все же, есть пару вопросов:

1) index.tpl почему такое расширение а не "привычное нам" html;

2)
Цитата
Главный шаблон подключим к индексу. Теперь индекс будет выглялеть у нас так:
Где мы дели нашу кодировку и уровень ошибок?
header("Content-Type: text/html; charset=utf-8");
error_reporting(E_ALL);

3)
ob_start();
...

$content = ob_get_contents();
ob_end_clean();

Зачем нам нужна буферизация и как она будет работать?

4) Почему используем такие комментарии
/**
* Installation of a key of access to files
* Установка ключа доступа к файлам
*/


а не, типа:
//
/* ... */

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

Спустя 24 дня, 31 минута, 39 секунд (25.12.2009 - 05:13) twin написал(а):
Evilsoul
Цитата
Зачем нам нужна буферизация и как она будет работать?


Буфферизация, это такая штука, которая собирает весь вывод и упаковывает в переменную. Вот наглядно:


ob_start();
echo "Всякий текст";
$buffer = ob_get_contents();
ob_end_clean();


Если это запустить в браузере, никакого текста не будет. То есть функция echo не отправляет строку браузеру, а пишет в буффер, то есть в память. Если теперь сделать так:



ob_start();
echo "Всякий текст";
$buffer = ob_get_contents();
ob_end_clean();
echo $buffer;



То можно убедиться, что текст находится в переменной, куда мы считали его из буффера.
Для чего это надо. Для того, что бы не вызвать ошибку при отдаче заголовков, потому что заголовки должны отправляться раньше вывода. А теперь мы можем спокойно сделать это позже. Вот так:


ob_start();
echo "Всякий текст";
header("Content-Type: text/html; charset=utf-8");
$buffer = ob_get_contents();
ob_end_clean();
echo $buffer;



Вывод у нас по коду вроде как выше, но заголовок будет передан браузеру перед остальным текстом. Это касается так же старта сессий и установки кук.
Буфферизировать можно не только echo но и любой другой вывод. Допустим так:


ob_start();
?>
<div style="trxt" >
<?php
echo "Всякий текст";
?>
</div>
<?php
$buffer = ob_get_contents();
ob_end_clean();
echo $buffer;



Но самое главное, это то, что переменную $buffer, в которой собран весь вывод скрипта, можно теперь спокойно вывести в шаблоне. Что у нас и сделано.
Цитата
4) Почему используем такие комментарии
/**
* Installation of a key of access to files
* Установка ключа доступа к файлам
*/



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

Спустя 6 дней, 17 часов, 17 минут, 11 секунд (1.01.2010 - 22:30) AmberLEX написал(а):
А что делают строки
        if(is_array($arg[0]))
$arg = $arg[0];
в функции href() ? Я так и не понял смысла. Или их там уже нет нет?

Спустя 3 минуты, 26 секунд (1.01.2010 - 22:33) Romms написал(а):

Спустя 12 часов, 6 минут, 53 секунды (2.01.2010 - 10:40) AmberLEX написал(а):
Спасибо за исчерпывающий ответ biggrin.gif Справочник у меня есть.
Зачем они там? func_get_args и так массив возвращает, зачем проверять, а потом присваивать и получить в $arg тоже самое?
Во втором варианте с комментариями их уже нет, я так полагаю, они там не нужны?

Спустя 7 часов, 31 минута, 19 секунд (2.01.2010 - 18:11) twin написал(а):
Ну а ечли возникнет желание передать не массив... Все должнол быть предусмотренно. По возможности.

Спустя 36 минут, 59 секунд (2.01.2010 - 18:48) AmberLEX написал(а):
После выполнения $arg = func_get_args(); в $arg содердится массив, даже если там один параметр.
Если передавать просто href('mod=news'); (один параметр), все равно func_get_args возвращает массив
Array
(
[
0] => mod=news
)
Т.е. $arg[0] содержит mod=news

И зачем эти строки?
if(is_array($arg[0]))
$arg = $arg[0];

Спустя 9 часов, 43 минуты, 16 секунд (3.01.2010 - 04:32) twin написал(а):
И действительно - лишняя проверка. Прилепилась из другого релиза. Сеньк, поправлю. smile.gif

Спустя 11 часов, 13 минут, 8 секунд (3.01.2010 - 15:45) 7ion написал(а):
Увидел в коде "голые" ".php".
А мой друг все время на меня кричал, орал, плевался что вместо расширения надоставить $phpEx, ибо если расширение дефолтное другое - код править не нужно. И что если сервер вдруг из-за каких-то настроек не знает этой константы, объявлять в конфиге (кстати как - не сказал). Кто прав?

Также слышал, что require занимает меньше процессорного времени, чем include, а в коде инклуд. Что лучше?


Спустя 13 минут, 3 секунды (3.01.2010 - 15:58) 7ion написал(а):
И почему не сделать так шаблон, чтоб верстаков не пугать, да и себе удобнее:

<?php echo ("
<!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>$title</title>
<
meta name="keywords" content="$keywords" />
<
meta name="description" content="$description" />

</
head>
<
body>
$menu<br />
$content
</body>
</
html>
");

Спустя 3 часа, 52 минуты, 17 секунд (3.01.2010 - 19:50) twin написал(а):
Цитата
Увидел в коде "голые" ".php".
А мой друг все время на меня кричал, орал, плевался что вместо расширения надоставить $phpEx

Это зависит от стиля. Есть такой момент - полиформизм. Когда делается попытка написать скрипт универсальным. В переменную пишутся сепараторы, расширения и так далее, вполть до функций для работы с бд.
Хотя кроме неудобств и неприятностей в плане микрооптимизации это ничего не дает. Пусть твой друг вспомнит из собственной практики, как часто приходилось ему менять расширения скриптов. Лично мне - ни разу.
А вот читабельным такой код уже назвать можно с натяжкой. И лишняя, ничем не оправданная перезапись - лишняя память и время. Оно погоды особой не делает, но курочка по зернышку клюет.

Цитата
Также слышал, что require занимает меньше процессорного времени, чем include, а в коде инклуд. Что лучше?
Нет, это утка. Давно кем то запущенная - мол раз require подгружает файл до начала выполнения скрипта, то это быстрее. Я сам лично проводил кучу тестов и могу однозначно сказать - одинаково.
Единственная у них разница - генерация ошибки. include продолжит работу при ошибке, require остановит скрипт. Я привык к первому, мне он кажется более удобным при отладке.

Цитата
И почему не сделать так шаблон, чтоб верстаков не пугать, да и себе удобнее:

В чем тут удобство, не разглядел... В первых выдавать в поток простой html конструкцией echo слишком расточительно. А во вторых, такой шаблон нельзя открыть напрямую в браузере...

Спустя 1 день, 19 часов, 59 минут, 6 секунд (5.01.2010 - 15:49) Lenarfate написал(а):
теперь тут денвер у меня выдает такую ошибку при загрузке в браузер главного индекса:

Warning: Invalid argument supplied for foreach() in Z:\home\les.ru\www\libs\default.php on line 22
htp://les.ru/0 was not found on this server.


проблема была в функции func_get_args();
я набирал другую func_get_arg(); blink.gif

Спустя 20 часов, 51 минута, 8 секунд (6.01.2010 - 12:40) Lenarfate написал(а):
почему если закомментить строки

RewriteEngine on

RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d

RewriteRule ^(.*)$ index.php?route=$1 [L,QSA]

браузер выбрасывает меня на 404.html ?? а адрес так и остается в виде ЧПУ.
как его менять на типа index.php?qwe=rty&asd=fgh ??

Спустя 12 минут, 3 секунды (6.01.2010 - 12:52) twin написал(а):
Во втором уроке было. В конфиге есть константа IRB_REWRITE
Поставь ей значение off

Спустя 8 дней, 3 часа, 2 минуты, 12 секунд (14.01.2010 - 15:55) Schumi-1 написал(а):
Здравствуйте.
Есть 2 момента, опишу их в том уроке, который этому посвящен.
1.
Обработка ссылок

foreach($tmp as $var => $val)
if(IRB_REWRITE == 'on')
$href .= '/'. $val;
elseif(!empty($val))
$href .= '&'. $var .'='. $val;

Отcечение (не вывод в ссылку) "пустых" параметров идет только при вЫключенном mod_rewrite.
при включенном же эта проверка не стоит
и ссылки имеют вид http://test.den/news/read/0/0

2.
При формировании ссылок мы "заменяем" в ссылке только те параметры, которые переданы аргументом в функции href()
при этом делая ссылку:
<a href="<?php echo href('mod=gallery'); ?>"><?php echo $language['gallery']; ?></a>
ссылка должна получиться такой
http://test.den/gallery
однако
параметр 'rem' задается в другой части скрипта и никуда не исчезает
поэтому ссылка получается
http://test.den/gallery/read

как то так, вернее как то не так smile.gif

Спустя 45 минут, 26 секунд (14.01.2010 - 16:40) AmberLEX написал(а):
Цитата
параметр 'rem' задается в другой части скрипта и никуда не исчезает

Если rem не задан, то по умолчанию все равно rem=read (в переключателе контроллеров в case default) И что тут страшного? smile.gif
Я в менюхе "Новости" и "Галерея" вообще так прописал:
<a href="<?php echo href('mod=news',    'rem=read', 'page=1'); ?>"><?php echo $language['news']; ?></a> | 
<
a href="<?php echo href('mod=gallery', 'rem=read', 'page=1'); ?>"><?php echo $language['gallery']; ?></a>
т.е сразу написал нужную ссылку.

Спустя 12 минут, 52 секунды (14.01.2010 - 16:53) Schumi-1 написал(а):
AmberLEX,
например
пользователь читает новости ...
находится на странице http://test.den/news/full/7/4

тут ему захотелось перейти в галерею ...
он видит ссылку Галерея, но она ведет по адресу
http://test.den/gallery/full/7/4

а пользователю нужен "корень"
http://test.den/gallery

хотя сама ссылка сформирована как бы правильно
<a href="<?php echo href('mod=gallery'); ?>"><?php echo $language['gallery']; ?></a>

Спустя 49 минут, 9 секунд (14.01.2010 - 17:42) AmberLEX написал(а):
Цитата
например
пользователь читает новости ...
находится на странице http://test.den/news/full/7/4

тут ему захотелось перейти в галерею ...
он видит ссылку Галерея, но она ведет по адресу
http://test.den/gallery/full/7/4
Я ж написал как ссылки в менюхе прописал (т.е. прописывать нужно полностью путь).
<a href="<?php echo href('mod=gallery', 'rem=read', 'page=1'); ?>"><?php echo $language['gallery']; ?></a>
- как в ссылке "Галерея окажется http://test.den/gallery/full/7/4" если там rem=read и page=1?
id нам уже не нужно - просто не совсем красиво, что оно там присутствует.
Ссылка будет выглядеть так (по твоему примеру) http://test.den/gallery/read/7/1 - т.е. 7 есть, но она в контроллере не используется.
Было бы логично, чтобы она конечно, выглядела так: http://test.den/gallery/
Тут от этого из-за специфики самой структуры движка не избавитсья, как я понял.

Спустя 1 час, 20 минут, 10 секунд (14.01.2010 - 19:02) Хозяин Огня написал(а):
Вот наш переключатель в индексе гостевухи.
    switch($GET['rem'])
{


case 'gb_read':
include IRB_ROOT .'/modules/guestbook/gb_read_controller.php';
$rem = 'gb_read';
break;

case 'read':
include IRB_ROOT .'/modules/news/read_controller.php';
$rem = 'read';
break;

case 'full':
include IRB_ROOT .'/modules/news/full_controller.php';
$rem = 'full';
break;

case 'show':
include IRB_ROOT .'/modules/gallery/show_controller.php';
$rem = 'show';
break;

default:
include IRB_ROOT .'/modules/guestbook/gb_read_controller.php';
$rem = 'gb_read';
break;
}


Теперь, если мы введём в адресную строку http://tuitkarshi.comxa.com/guestbbok, не указывая rem (a rem у нас инициализирован как read) получим ошибку.
Это можно решить, отказавшись от gb_read в пользу read, но тогда пропадает смысл в этом

case 'read':
include IRB_ROOT .'/modules/news/read_controller.php';
$rem = 'read';
break;


Спустя 1 час, 10 минут, 10 секунд (14.01.2010 - 20:12) AmberLEX написал(а):
Не понял че-то я, это к чему?
Зачем нам в индексе контроллера гостевой news и gallery?
Этого разве не достаточно:
    switch($GET['rem'])
{
case 'read':
include IRB_ROOT .'/modules/guestbook/read_controller.php';
$rem = 'read';
break;

case 'add':
include IRB_ROOT .'/modules/guestbook/add_controller.php';
$rem = 'add';
break;

default:
include IRB_ROOT .'/modules/guestbook/read_controller.php';
$rem = 'read';
break;
}

Спустя 1 час, 18 минут, 25 секунд (14.01.2010 - 21:31) Хозяин Огня написал(а):
AmberLEX, Твин говорил, что это нужно будет, когда мы будем совмещать несколько модулей на одной странице.

Спустя 1 час, 5 минут, 11 секунд (14.01.2010 - 22:36) AmberLEX написал(а):
Так тут у тебя не совмещение получается. Тут все равно один контроллер выводит что-то одно: новости или отзывы.
Я так понимаю, он имел ввиду то, что если у тебя на странице допустим фотки выводятся и снизу или где-то еще последние 3 новости, например. Вот за новости отвечает один контроллер, а за фото - другой и это на одной странице.
Как это сделать здесь, я не очень представляю (на данном этапе, во всяком случае)
У себя я так делал:
Добавил файл с функциями (типа модель получилась), в которых делаются основные действия (примерно): чтение новостей, определение количества новостей, чтение 3-х последних новостей и т.д. для каждого модуля. А в контроллере вызываю нужные функции.
Например, для главной страницы в контроллере я вызываю нужные функции и готовлю к выводу в шаблон. Т.е. на главной я могу вывести, например, 3 последних новости, 3 новых изображения и текст который должен быть на главной странице. В общем типа того вышло.
Ну Твин обещал новый урок и рассказать подробно про структуру CMS, а то сейчас не понятно как это будет все выглядеть и что она должна уметь. Т.е. какие к ней требования, тогда будет можно что-то кодить, а то сейчас это на гадание похоже больше, что будет smile.gif

Спустя 11 часов, 50 минут, 39 секунд (15.01.2010 - 10:27) Schumi-1 написал(а):
AmberLEX
Заново скачиваю архив web6,
захожу http://test.den/
вижу 2 ссылки
Новости http://test.den/news/read/0/0
Галерея http://test.den/gallery/read/0/0

набираю в адресной строке снова
http://test.den/news/read/7/4
вижу 2 ссылки
Новости http://test.den/news/read/7/4
Галерея http://test.den/gallery/read/7/4

Идем дальше .. захожу в админ панель
http://test.den/admin/
Вижу три ссылки
Установки http://test.den/admin/setup/read/0/0
Новости http://test.den/admin/news/read/0/0
Галерея http://test.den/admin/gallery/read/0/0

опять
набираю в адресной строке
http://test.den/admin/news/read/7/4
вижу 3 ссылки
Установки http://test.den/admin/setup/read/7/4
Новости http://test.den/admin/news/read/7/4
Галерея http://test.den/admin/gallery/read/7/4

это по-моему не нормально ... и точно введенные ссылки тут совершенно не относятся к делу

Спустя 1 час, 22 минуты, 59 секунд (15.01.2010 - 11:50) AmberLEX написал(а):
Чесно, я даже не знаю что там в архиве))) Скачал.
В skins/tpl/menu.tpl замени строки на те, как я писал выше и все)
<a href="<?php echo href('mod=news','rem=read'); ?>"><?php echo $language['news']; ?></a> | 
<
a href="<?php echo href('mod=gallery'); ?>"><?php echo $language['gallery']; ?></a>
Архив - то пример. Че ты к нему привязался? smile.gif

Спустя 2 часа, 58 минут, 10 секунд (15.01.2010 - 14:48) Schumi-1 написал(а):
Эмм ... то ли я плохо излагаю, то ли стучусь в стену ...
Мне казалось, что результат работы функции href() должен быть следующий:
<a href="<?php echo href('mod=news','rem=read'); ?>"><?php echo $language['news']; ?></a>
http://test.den/news/read

<a href="<?php echo href('mod=gallery',); ?>"><?php echo $language['news']; ?></a>
http://test.den/gallery

в админке например
<a href="<?php echo href('mod=setup',); ?>"><?php echo $language['news']; ?></a>
http://test.den/admin/setup

Мы же имеем совершенно другое. Параметры, которые мы не передаём функции есть "на выходе".

Спустя 3 часа, 26 минут, 13 секунд (15.01.2010 - 18:14) twin написал(а):
Цитата
Параметры, которые мы не передаём функции есть "на выходе".

Да есть.
А чем они помешают? Ну есть и есть. Кстати говоря это очень удобно при постраничной навигации к примеру. можно писать ссылки на другие страницы, не боясь, что потеряется та страница, откуда ушли. Всегда можно вернуться.

Спустя 1 час, 46 минут, 32 секунды (15.01.2010 - 20:01) Shturman написал(а):
Просто надо стараться, чтобы сначала шли слова, а потом цифры - это воспринимается логичнее.

Спустя 5 дней, 5 часов, 25 минут, 11 секунд (21.01.2010 - 01:26) 7ion написал(а):
Переключатель-то не шибко универсальный.
Мне вот приходится во write.php присваивать юзеру куки.
До это все было налеплено в index.php и все работало - вывод снизу, код сверху, все отлично, все замечательно.
А теперь из-за кукисов, которые не терпят перед собой хедеров, мне приходится строить такой велосипед:

	switch ($GET['mode']) {
case 'posts':
list($posts, $nav) = explode('|a|', view_posts());
$body = include 'templates/'.$template.'/posts.tpl';
break;

case 'write':
include ION_ROOT .'/write.php';
$body = include 'templates/'.$template.'/form.tpl';
break;

case 'help':
// Тут будет вывод помощи
break;

default:
list($posts, $nav) = explode('|a|', view_posts());
}

// Выводим страницу
header('Content-Type: text/html; charset=utf-8');
include 'templates/'.$template.'/header.tpl';
echo $body;
include 'templates/'.$template.'/footer.tpl';


Это оправдано или можно как-то легче?

//Хм, странно, что-то код разбросало по сторонам, хотя я форматирую только пробелами...

Спустя 17 минут, 51 секунда (21.01.2010 - 01:44) twin написал(а):
Если проходишь этот курс, то и делай что написано. Не забегай вперед. Когда полностью освоишься, сможешь спроецировать на свой код. Пока эту адскую смесь я даже комментировать не зхочу.

Спустя 5 минут, 47 секунд (21.01.2010 - 01:49) 7ion написал(а):
twin
Ну ладно... sad.gif

Спустя 2 часа, 6 минут, 56 секунд (21.01.2010 - 03:56) qpayct написал(а):
Цитата (7ion @ 21.01.2010 - 00:26)
из-за кукисов, которые не терпят перед собой хедеров, мне приходится строить такой велосипед:

	switch ($GET['mode']) {
case 'posts':
list($posts, $nav) = explode('|a|', view_posts());
$body = include 'templates/'.$template.'/posts.tpl';
break;

case 'write':
include ION_ROOT .'/write.php';
$body = include 'templates/'.$template.'/form.tpl';
break;

case 'help':
// Тут будет вывод помощи
break;

default:
list($posts, $nav) = explode('|a|', view_posts());
}

// Выводим страницу
header('Content-Type: text/html; charset=utf-8');
include 'templates/'.$template.'/header.tpl';
echo $body;
include 'templates/'.$template.'/footer.tpl';


Это оправдано или можно как-то легче?

//Хм, странно, что-то код разбросало по сторонам, хотя я форматирую только пробелами...

Схожая ситуация. Мне надо в куки поместить череду параметров, которые определяются в заинклуженом файле, который инклудится, если юзер идентифицирован уже после вывода в индексе. Решил при помощи ob_start() и ob_end_flush(). Можно как то по другому или так и надо?

Спустя 1 час, 12 минут, 29 секунд (21.01.2010 - 05:09) 7ion написал(а):
qpayct

ob_start() и ob_end_flush()


Это, если не ошибаюсь, функции буферизации? huh.gif

twin

       if(IRB_REWRITE == 'on')
return IRB_HOST . trim($href, '/');
else
return
IRB_HOST .'?'. trim($href, '&');

Не заменить ли тут return на echo? Я целый час в поисках ошибки провел, пока не понял, что забыл в шаблонах поставить echo ph34r.gif

Спустя 2 часа, 21 минута, 24 секунды (21.01.2010 - 07:30) twin написал(а):
qpayct
Цитата
Решил при помощи ob_start() и ob_end_flush(). Можно как то по другому или так и надо?

Можно и по другому. В php.ini
output_buffering = On</span>
и тогда можно не заботиться о расположении хидеров. Другой вопрос, что это зависимость скрипта от настроек сервера, а это не есть гут. Так что:
7ion
Цитата
Это, если не ошибаюсь, функции буферизации?

Не ошибаешься. Не далее как вчера я написал 8-й урок, там как раз про это написано. smile.gif
Цитата
Не заменить ли тут return на echo? Я целый час в поисках ошибки провел, пока не понял, что забыл в шаблонах поставить echo

Нет. Функция должна возвращать значения, а не выводить в поток.
За крайне редкими исключениями. Так что привыкай к порядку. А если ты забудешь echo перед переменной поставить, что на что менять прикажещь? То, что ты тратишь время на свою неаккуратность еще не значит, что нужно ломать устои. Нужно как то соорганизоваться просто. smile.gif

Спустя 5 дней, 16 часов, 29 минут, 34 секунды (27.01.2010 - 00:00) 7ion написал(а):
twin
А вот я услышал, что в php уже есть встроенный шаблонизатор, в HEREDOC.
Что там можно просто писать html-код, а переменные - {$var}.
Это правда, и если да - то можно все это использовать?

Спустя 48 минут, 21 секунда (27.01.2010 - 00:48) twin написал(а):
Хередок это не шаблонизатор. И скобки там не нужны по моему.
Это просто способ форматировать вывод. А использовать можно все что угодно, главное на своем месте.

Спустя 2 месяца, 5 дней, 23 часа, 26 минут, 53 секунды (2.04.2010 - 23:15) ohxxx написал(а):
По третьему уроку
1.Вопросик в файле default.php есть строчка

        if($arg[0] == 'host') // Это для того, что бы сделать ссылку без параметров
return IRB_HOST;
я не понял как это условие может выполнится. Ели по все му скрипту host (на момент конца третьего урока) написано только в этой строчке. Откуда такое значение возьмётся вообще ?

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

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

Да кстати не знаю может я не совсем правильно сделал я поправил это так в файле config.php изменил строчку define('IRB_HOST', 'http://'. $_SERVER['HTTP_HOST'] .'/Jadro/'); Умнея просто лежит в директории Jadro


З.Ы. Надеюсь уважаемый автор курса это учтёт cool.gif .

З.Ы. Да я понимаю написание таких уроков это титанический труд

Спустя 46 минут, 52 секунды (3.04.2010 - 00:02) twin написал(а):
Все верно сделал. smile.gif Там вообще то написано это
Цитата
Еще один момент. Так как скрипт может находится и не в корневой директории, а идти допустим как дополнение к уже готовому сайту, нужно определить пути.

Спустя 6 дней, 14 часов, 16 минут, 10 секунд (9.04.2010 - 14:18) gripp написал(а):
Добрался до ядра - так все непонятно...

Спустя 5 часов, 16 минут, 47 секунд (9.04.2010 - 19:35) ohxxx написал(а):
Уважаемый г-н Twin

Один из первых ляпсусов ЯДРА вы только сейчас АЖ на третьем уроке присоединяете материал из прошлого курса Организация структуры сайта

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

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



Я думаю будут следующие плюсы :
1. Будет восприниматься в таком виде на порядок легче
2. Гораздо меньше будет ошибок у изучающего программиста да и в самом курсе вообще


С уважением Ohxxx

Спустя 10 минут, 15 секунд (9.04.2010 - 19:45) twin написал(а):
Действительно нужно пересмотреть.... Уроки рождались в разное время и в разных местах. Сейчас просто не хватает времени все упорядочить.
Принял к сведению, обязательно поправлю.

Спустя 2 дня, 16 часов, 38 минут, 20 секунд (12.04.2010 - 12:23) ohxxx написал(а):
Уважаемый г-н Twin

Моё предложение по уроку номер 3.

Шаг 3

Формируем ссылки и структуру

Так как нам понадобятся файлы из прошлого курса Структура сайта

Копируем почти все файлы из прошлого курса в директорю с ядром.

Файлы которые не нужно копировать (мы сними будем работать далее):
config.php
index.php
variables.php
.htaccess (он нам не понадобиться вобще т.к. мы уже создали свой)


Далее работаем с файлами которые мы не скопировали

открываем файл ядра config.php и добавляем в него

/**
* Выбор языка
* Language choice
*/


define('LANGUAGE','ru');


открываем файл ядра variables.php и добавляем в него

/**
* Вытаскивем данные для $page из GET массива
* Get an $page values from GET massive
*/


$page = !empty($_GET['page'])?$_GET['page']:NULL;



открываем файл ядра index.php и оставляем следующее содержание



/**
* Installation of a key of access to files
* Установка ключа доступа к файлам
*/

define('IRB_KEY', true);

/**
* We establish the charset and level of errors
* Устанавливаем кодировку и уровень ошибок
*/

header("Content-Type: text/html; charset=utf-8");
error_reporting(E_ALL);


/**
* De
bug
* Дебаггер
*
@TODO To clean in release
*/

define('IRB_TRACE', true);
include './debug.php';


После добавляем ниже всё содержание index.php из курса Структура сайта

Теперь у нас получилась такая структура

user posted image

(Г-н Twin картинка не совсем соотвестсвует истине из директории modules надо удалить main и second и вместо них поставить папку salutation с файлами из прошлого курса)

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

Удаляем из variables.php

/**
* Вытаскивем данные для $page из GET массива
* Get an $page values from GET massive
*/


$page = !empty($_GET['page'])?$_GET['page']:NULL;


А в index.php
Исправляем переключатель
заменяем
switch($page)

на
switch($GET['page']) 




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

Хочу сказать сразу. Мы не будем использовать шаблонизатор, хотя шаблоны использовать будем. Будет вспомогательный скрипт, который поможет нам с циклами, но его можно назвать шаблонизатором с очень большой натяжкой. Но об этом позже. Сейчас ссылки.

Можно конечно написать ссылку так:

<a href="?page=main" >Главная</a>


но тогда как переключиться на ЧПУ? Можно сделать так:
<a href="<?php echo $page; ?>" >Главная</a>


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

Выход есть и он весьма прост. Раз у нас определен порядок следования переменных в массиве, из этого можно извлечь кучу пользы. Допустим написать функцию формирования пути для ссылок.

Попробуем сделать это. Вернее все уже сделано осталость положить в файл в libs/default.php (замените содержимое файла кодом ниже ф-я времени из прошлого курса нам больше не нужна) , а нам осталось только разобраться на всем готовеньком.
Тут уже сразу много нового и интересного. Во первых, конструкция global.

Если вспомните, мы как то касались области видимости. Дело в том, что переменная, объявленная вне функции, внутри функции не видна. Можно передать её аргументом и зачастую так и нужно делать. Но иногда бывает удобнее затянуть её в функцию иначе, не аргументом. Для этого и существует конструкция global. Если объявить переменную глобальной (поставить перед ней эту конструкцию), то она станет доступной. Именно так мы и поступили с переменной $GET .
Тут надо отметить нюанс - если переменную, объявленную глобальной, изменить в функции, она изменится везде. Поэтому не стоит злоупотреблять такой конструкцией, можно очень сильно запутать логику. Мы, что бы обозначить то, что переменная объявлялась глобальной, написали её в верхнем регистре.

Дальше две новых функций: func_get_args(), array_key_exists(). Поняв как они работают, будет несложно разобраться в алгоритме:

/**
* Function of formation of GET-parametres
* Функция формирования GET-параметров
*/
   function href()
{
global $GET; // Объявляем массив $GET, сформированный ранее, глобальным
$tmp = $GET; //Переписываем переменную, что бы не влиять на глобальный массив
$href = '';
$arg = func_get_args(); // Получаем массив аргументов переданных в функцию href(тут_вот)

if($arg[0] == 'host') // Это для того, что бы сделать ссылку без параметров
return IRB_HOST;

foreach($arg as $var) // Перебираем полученные аргументы
{
$param = explode('=', $var); // Разделяем имя переменной и значение (page=gallery, например)

// Если в массиве $GET ($tmp) есть ключ, полученный выше (в данном случае 'page')

if(array_key_exists($param[0], $tmp))
$tmp[$param[0]] = $param[1]; // То этому ключу присваеваем полученное значение
else
die('The variable <b>'. $param[0] .'</b> is not defined'); // Иначе...
}

foreach($tmp as $var => $val) // Теперь поочередно вставяем значения из $GET ($tmp) в ссылку
if(IRB_REWRITE == 'on')
$href .= '/'. $val; // Если реврайт включен, через слэш
elseif(!empty($val))
$href .= '&'. $var .'='. $val; // Если нет = обычные GET параметры


if(IRB_REWRITE == 'on')
return IRB_HOST . trim($href, '/');
else
return
IRB_HOST .'?'. trim($href, '&');
}


Ну вот, теперь мы сможем сделать удобные ссылки, а значит и меню навигации.
Теперь содержимое файла menu.tpl должнобыть таким

<!-- ./skins/tpl/menu.tpl begin --> 
<
div id="menu">
<
ul>
<
li><a href="<?php echo href('page=main', 'rem=read'); ?>">Главная страница</a></li>
<
li><a href="<?php echo href('page=second'); ?>">Вторая страница</a></li>
</
ul>
</
div>
<!-- ./
skins/tpl/menu.tpl end -->


удалите или закомментируйте все водержимое из файла module/salutation/view.php это для того чтобы не получить нотис

Ну и разумеется нам нужен главный шаблон index.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>
<
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" />
</
head>
<
body>

<
div id="container">
<
div id="header">
<
h1>CMS</h1>
<
p>Курсы php онлайн </p>
</
div>
<?php include IRB_GENERAL_MENU; ?>
<?php
echo $content; ?>
<div id="footer">
created by <a href="http://irbis-team.com/15">IRBIS-team</a>(inovative resource for business and internet search ) © 2010
</div>
</
div>

</
body>
</
html>


Обратите внимание что $title , $keywords и $description за комментированы это чтобы не получит нотис. А также у нас откудато взялась новая константа IRB_GENERAL_MENU впринцепе она не новая просто мы дали ей расширения IRB_ ну и немного изменили название согласно новому курсу ядра.
Так вот в файле index.php надо изменить следущюю строчьку
 define('IMENU',  './skins/tpl/menu.tpl'); 

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


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

Для того чтобы мы потом не искали где у нас проблемы раскоментируйте $title , $keywords и $description.

И в конец файла variables.php добавьте

/**
* Other variables
* Другие переменные
*/

$title = '';
$keywords = '';
$description = '';



Теперь удалим Директорию salutation она нам больне не понадобится

Изменяем переключатель в файле index,php теперь он должен выглядеть так
/**
* The switch of modules
* Переключатель страниц
*/

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

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

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

Сразу видно что изменились пути до файлов в переключателе вот щас мы и займёмся созданием этих файлов.

Роутер модуля главной страницы пока будет таким:
modules/main/router.php

/**
* Router of the module of the second 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'));
}

/**
* Подключаем контроллер
* Includes the controller
*/

include './modules/main/controller.php';

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

include './modules/main/view.php';


controller.php пока пустой.
В view.php подключим шаблон модуля.

/**
* View
* Отображение
*
@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'));
}

/**
* Подключаем шаблон
* Includes the template
*/

include './skins/tpl/main/show.tpl';

По аналоги сделайте тоже смое для директории modules/second что мы сдедали для директории modules/main

Ну и определам принадлежность в шаблонах :
tpl/main/show.tpl
<!-- ./skins/tpl/main/show.tpl begin -->
<h2>Главная страница</h2>
<!-- ./skins/tpl/main/show.tpl end -->


Ну и определам принадлежность в шаблонах :
tpl/second/show.tpl
[html<!-- ./skins/tpl/second/show.tpl begin -->
<h2>Вторая страница</h2>
<!-- ./skins/tpl/second/show.tpl end --> [/html]

Вот теперь структура у нас полностью испрасленна и ваглятит она так
user posted image
Мы намерено не далаем никакого функционала, нам нужна голая рама. Функционал рассмотрим в следующих разделах, а пока можно и так убедиться - ссылки работают, модули переключаются, все в порядке. (дальше нужно добавить ссылку на архив)
С уважением Ohxxx

Спустя 4 дня (16.04.2010 - 12:23) twin написал(а):
Огромный респект и спасибо!
К сожалению этот вариант еще более запутает народ, но читая исправления меня осенило как сделать все плавно и красиво. Для этого правда придется полностью переписать оба раздела (структура и ядро), но оно того стоит.
Теперь я наконец то понял, что вызывает затык. smile.gif
Постараюсь сегодня-завтра все исправить.

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

Спустя 7 минут, 40 секунд (16.04.2010 - 12:31) ohxxx написал(а):
Цитата (twin @ 16.04.2010 - 09:23)
Огромный респект и спасибо!
К сожалению этот вариант еще более запутает народ, но читая исправления меня осенило как сделать все плавно и красиво. Для этого правда придется полностью переписать оба раздела (структура и ядро), но оно того стоит.
Теперь я наконец то понял, что вызывает затык. smile.gif
Постараюсь сегодня-завтра все исправить.

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

Ну я переделал только этот урок изходя из следущих сообраений
1. Меньше работы для переделки
2. Да менее понятно чем если всё переписать НО более понятно чем было.

Да пожалуйста. Как говорится помог чем смог.

Спустя 26 минут, 21 секунда (16.04.2010 - 12:57) twin написал(а):
Да, я давно собирался переписать оба курса, вот только не мог понять в каком ключе. Лепить заплатки не хотелось бы, менять, так уж кардинально.
Понятно, что второй должен был плавно вытекать из первого, но вот как именно...
А вот теперь я понял принцип, по которому нужно это все строить.
Спасибо еще раз, надеюсь в новом курсе на такое же плодотворное сотрудничество. smile.gif

Спустя 10 часов, 55 минут, 51 секунда (16.04.2010 - 23:53) twin написал(а):
Переписал полностью раздел "Структура" и первые три урока ядра. Теперь все логично продолжает друг друга. И со ссылками должно быть гораздо понятнее.
Спасибо за наводку еще раз. smile.gif

Спустя 13 часов, 26 минут, 29 секунд (17.04.2010 - 13:20) freed-master написал(а):
а есть ли какая разница между использованием абсолютных или относительных ссылок в include '*'; ?

Спустя 25 минут, 57 секунд (17.04.2010 - 13:46) twin написал(а):
Разницы никакой. Путь все равно подставляется автоматически. Другое дело, что подставляется путь до того файла, который запущен. То есть вложенное подключение будет работать относительно этого файла. Я распишу эту тему подробно, как руки дойдут))

Спустя 1 час, 12 минут, 29 секунд (17.04.2010 - 14:58) HardWoman написал(а):
ohxxx Вот уж умница. Николай, ты парня то приметил? Он у нас? Если нет - ему там место smile.gif

Спустя 3 часа, 48 минут, 51 секунда (17.04.2010 - 18:47) twin написал(а):
Я не идиот конечно... хотя иногда кажусь таковым. smile.gif
Обидно, что сторонится. Я для курса получил с его подачи столько, что за 50 лет сам бы не разгреб...
Еще раз, пользуясь случаем)))
ohxxx, ты знаешь где и что.

Спустя 16 часов, 53 минуты, 24 секунды (18.04.2010 - 11:40) antonov_sa написал(а):
Цитата
Полностью переработан раздел "Структура сайта" и три первых урока раздела "Ядро"

Уроки отличные, просмотрел переработанные, заметил несколько опечаток неопасных:

http://irbis-team.com/15/3/6

Цитата
<!-- skins/tpl/main/show.html begin --> 
видимо здесь должно быть show.tpl?

Цитата
В файле modules/salutation/index.php у нас имеется кирилица
а имеется она у нас в modules/main/index.php на данном этапе и далее по тексту тоже.

http://irbis-team.com/15/3/7

Цитата
Теперь подключим файл общих функций в систему
<?php

/**
* We connect a configuration file
* Подключаем конфигурационный файл
*/
    include './config.php';

/**
* We connect a file of the language
* Подключаем языковой файл
*/
    include './language/'. LANGUAGE .'.php';

а в конфиге у нас IRB_LANGUAGE

и в 3/8 "удинственный" вместо "единственный"

Ну вот собственно, спасибо за уроки

Спустя 23 минуты, 7 секунд (18.04.2010 - 12:04) twin написал(а):
Спасибо, все исправил)

Спустя 3 часа, 33 минуты, 19 секунд (18.04.2010 - 15:37) twin написал(а):
freed-master
по заявкам телезрителей файловая система. smile.gif

Спустя 3 дня, 4 часа, 32 секунды (21.04.2010 - 19:37) freed-master написал(а):
twin, а как быть с css-файлом?
на главной все хорошо, а когда переходишь на любую другую страницу путь меняется и стили не подгружаются

если поставить в ссылке на файл стилей: $_SERVER['DOCUMENT_ROOT'], тогда траблы с путями в самом файле стилей (на картинки и пр.)

может через .htaccess?
но пока не сообразил как?

Спустя 15 минут, 57 секунд (21.04.2010 - 19:53) freed-master написал(а):
ладно если навигация только 2х уровневая - можно в начало пути поставить вот это: ../

а если уровней больше?

Спустя 43 минуты, 39 секунд (21.04.2010 - 20:37) twin написал(а):
Ты сделал свою структуру, я о ней ничего не знаю... Что я могу сказать то?

Спустя 22 часа, 44 минуты, 35 секунд (22.04.2010 - 19:22) twin написал(а):
Из за перенапрвлений, пятый раз повторяю. Если ты меняешь по своему структуру, по своему и меняй правили рерайта. Я тут чем могу помочь?

Спустя 2 минуты (22.04.2010 - 19:24) freed-master написал(а):
сделал:
<link type="text/css" rel="stylesheet" href="<?php echo HOST; ?>style.css" />
и все норм... unsure.gif

Спустя 2 дня, 17 часов, 24 минуты, 17 секунд (25.04.2010 - 12:48) twin написал(а):
Ты зачем в этой теме такие вопросы задаешь? mad.gif
В моих скриптах такого нет и быть не может.

Спустя 11 дней, 8 часов, 2 минуты, 33 секунды (6.05.2010 - 20:50) Fox M. Lurde написал(а):
Уважаемые товарищи, возник такой вопрос. Честно списываю приведенный код, стараюсь изо всех сил понять логику его работы. И даже понимаю wink.gif НО! Как всегда, есть вопросы. А именно - вроде как все честно списал, ничего не менял, однако происходит следующее: при нажатии на ссылку в строку адреса передается следующая ссылка http://net.com/net.com/?page=sec&rem=you и ничего не происходит. То, что выделено красным, должно по идее отсутствовать.

Где именно искать ошибку - ума не приложу.

Спустя 6 минут, 36 секунд (6.05.2010 - 20:57) twin написал(а):
Не нужно много кода в один пост... портится

Спустя 21 час, 45 минут, 53 секунды (7.05.2010 - 18:43) Fox M. Lurde написал(а):
Господа, простите за назойливость, но все же подскажите, пожалуйста, куда можно посмотреть, чтоб найти ошибку?

Спустя 1 час, 3 минуты, 18 секунд (7.05.2010 - 19:46) twin написал(а):
Нет никакой назойливости))) Наоборот.

Просто не понятен вопрос. Откуда мог в ссылке появится этот параметр?
Скорее всего, что то недотянуто. Там внизу каждого урока есть архив. В нем рабочий скрипт.
Можно попросить поставить его рядом и сравнить?
Пока я не понял в чем ошибка.

Спустя 8 дней, 22 часа, 54 минуты, 22 секунды (16.05.2010 - 18:41) igor717 написал(а):
Здравствуйте, принялся изучать Ваши курсы, впринцепе все довольна таки понятно: и курс отличный, и идея!!! За что Вам большое человеческое спасибо, думаю не от меня одного!!!

Но вот по ЧПУ возникает уйма вопросов, возможно из-за того, что пока не удалось понять и уловить всю логику:

1) Скажите можно ли каким-либо образом избавится от ненужных GET параметров которые не используются

http://proba.ru/main/read/0/0

используется только 1-ый из 4-ех

Я перечитал предыдущие вопросы/ответы, но точно так и не понял

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

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

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


Спустя 4 часа, 57 минут, 21 секунда (16.05.2010 - 23:38) twin написал(а):
По первому вопросу руки не доходят. Если честно признаться, я эти ЧПУ недолюбливаю. Во первых ресурсоемко, а во вторых как то не по человечески (хоть и называется Чпу). GET значит GET и нечего мудрить. Себе дороже.
Вон даже Гугл не задуряется подобными вещами.
По этому мне лично эти нули не мешают. Но будет время - подумаю.

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

Спустя 49 минут, 6 секунд (17.05.2010 - 00:27) igor717 написал(а):
По 2-ому

Вот к примеру в курсе структура сайта делаем такие же две ссылки только с переключателем русский/английский по умолчанию русский. И вот когда мы нажимаем сначала к примеру на ссылку английский, то вылазит как и положено английский контент, но вот если нажать ссылку вторая страница, то получается следующие передается GET переменная ?page=second, а вот ?languege не передается, следовательно открывается вторая страница и язык становится по умолчанию русский.

Я раньше с таким боролся так, если относительно примера, в variables.php:


$ref = null;
if (isset($languege)) {$ref = "&languege=". $languege;}


И далее я подставлял $ref в ссылку в menu.tpl:

<li><a href="<?php echo IRB_HOST; ?>?page=second<?php echo $ref; ?>">Вторая страница</a></li>


Ну вот примерно по такому принципу. Тогда все работает. В результате имеем ссылку:

http://site.ru/?page=second&languege=en


Возможно это конечно неправильно (т.к. я относительно недавно начал изучать PHP и эта как бы просто моя идея, реализованная доступными на данный момент для меня знаниями и средствами, не судите строго smile.gif ), но вот как сделать нечто похожее здесь пока не пойму...


Спустя 2 часа, 34 минуты, 33 секунды (17.05.2010 - 03:02) igor717 написал(а):
Все впринцепе со всем разобрался относительно этой темы.

По второму вопросу:

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

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


Кстати после этого появился вот такой нюанс:

В файле config.php я сперва я поставил переключатель:

 /*Выбор языка сайта*/   
switch($GET['languege'])
{
/*Русский*/
case 'ru':
define('IRB_LANGUAGE', 'ru');
break;

/*Английский*/
case 'en':
define('IRB_LANGUAGE', 'en');
break;

/*По умолчанию*/
default:
define('IRB_LANGUAGE', 'ru');
break;
}


Но появилась ошибка - переменная $GET['languege'] не определена, из-за того что в индексном файле сначала подключается config.php, а затем уже variables.php. Если их поменять местами, то не определена будет константа IRB_REWRITE. Пришлось переключатель вынести в созданный файл ./language/config.php. Тогда все работает отлично. Не знаю все ли я сделал правильно?

Извините за назойливость, ничего если я Вам задам еще пару на мой взгляд совсем дурацких вопросов, чтоб до конца понять как здесь все работает? Просто мне они не дают спокойно спать... smile.gif

Спустя 6 часов, 11 минут, 36 секунд (17.05.2010 - 09:13) twin написал(а):
Канфигурационный файл вообще то не принято использовать для каких бы то нибыло вычислений. Это просто список первоначальных установок.
По этому по логике переключатель нужно поместить туда, где динамически задаются значения переменным (константам). А именно в файл variables.php.

Отдельный файл создавать для этого наверное не следует - и так достаточно большая разбивка на файлы.

Спустя 3 часа, 11 минут, 57 секунд (17.05.2010 - 12:25) igor717 написал(а):
Спасибо, понял.

А еще: скажите пожалуйста, не пойму, каким все же образом переписываются переменные в массиве $GET, они же заданы изначально

$GET = array( 
'languege' => 'ru',
'page' => 'main',
'rem' => 'read',
'id' => 0,
'num' => 0,


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

Спустя 33 минуты, 56 секунд (17.05.2010 - 12:59) twin написал(а):
Ну там же есть функция специательная. Которая ссылки формирует.
Если есть $_GET, то она перезапишет $GET с начальными условиями. Если $_GET нету, то с дефолтными

Спустя 12 минут, 28 секунд (17.05.2010 - 13:12) igor717 написал(а):
Спасибо, щас поищу, пока что-то в упор не вижу...

Спустя 2 минуты, 52 секунды (17.05.2010 - 13:14) igor717 написал(а):
А все понял спасибо!!! smile.gif

Спустя 2 часа, 57 минут, 42 секунды (17.05.2010 - 16:12) igor717 написал(а):
Я тут попробовал чуть-чуть помудрить: добиться подобных ссылок
http://my-site.ru/en/second
получилось. Но при этом естественно возникла проблема с тем, что они при включенном ЧПУ могут поступить непопорядку, к примеру может отсутствовать 2-я переменная, а получим 1-ю 3-ю и 3-я станет 2-й!!!

Скажите пожалуйста, а можно ли каким-небудь образом именно в ./libs/default.php в функции href() присваивать переменным в массиве $GET новые значения?

Спустя 20 минут, 52 секунды (17.05.2010 - 16:33) twin написал(а):
smile.gif
Ну чесслово некогда сейчас. Сделаешь сели, покаж. Давно спрашивают, а я никак минутку выкроить не могу.

Спустя 4 минуты, 51 секунда (17.05.2010 - 16:38) igor717 написал(а):
Да вроде сделал работает, но только с вон той оговоркой...
А как этот массив перезаписать - ну ни как не получается.
Просто нужно каким то образом сначала массив изменить, а уже потом ЧПУ сформировать, а у меня для этого знаний не хватает.

Спустя 1 час, 31 минута, 33 секунды (17.05.2010 - 18:09) igor717 написал(а):
Че та я не пойму этого, вот читаю материал по видимости переменной...

Вот у них пример есть рабочий (сам проверял):

$b = 2;

function Sum()
{
global $b;

$b = $b + 5;
}

Sum();
echo $b;


Вывод: 7

А чем наш собственно пример от их отличается? Если убрать инициализацию переменных.

1) Сначала объявляем переменную $GET в ./variables.php (в индексном он 1-й подключается)
2) Объявляем $GET глобальной в файле
./libs/default.php  (это все подключается на 2-м месте)

3) Присваиваем ей новые значения
4) В ссылка идет вызов этой функции (это все еще ниже в индексе)
А $GET без изменений!!! blink.gif

Спустя 17 часов, 30 минут, 57 секунд (18.05.2010 - 11:40) igor717 написал(а):
Ну собственно мучился я, мучился и в итоге пришел к тому - с чего начинал!!!

Идеально здесь сделать мне кажется, что не получится. Так как у инициализации переменных в массиве все же есть один большой недостаток - они должны в любом случаи шагать строем (по порядку), иначе начинается ХАОС.

Единственное, что получилось выжить из этого - это отсечение ненужных переменных, при условии, что после них нету нужных.

Это в ./libs/default.php:

function href() 
{
global $GET, $GET_DEFAULT; // Объявляем массивы $GET и $GET_DEFAULT, сформированные ранее, глобальным
$tmp = $GET; //Переписываем переменную, что бы не влиять на глобальный массив

$stop = '';
$href = '';

$arg = func_get_args(); // Получаем массив аргументов переданных в функцию href(тут_вот)

if($arg[0] == 'host') // Это для того, что бы сделать ссылку без параметров
return IRB_HOST;

foreach($arg as $var) // Перебираем полученные аргументы
{
$param = explode('=', $var); // Разделяем имя переменной и значение (page=gallery, например)

if(array_key_exists($param[0], $tmp)) // Если в массиве $GET ($tmp) есть ключ, полученный выше (в данном случае 'page')
$tmp[$param[0]] = $param[1]; // То этому ключу присваеваем полученное значение
else
die('The variable <b>'. $param[0] .'</b> is not defined'); // Иначе...
}

foreach($tmp as $var => $val) // Определяем последнее значение, которое используется не по умолчанию
if(!in_array($val, $GET_DEFAULT, true))
$stop = $var; // Присваимваем $stop имя последней переменной

if (!empty($stop)) // Если эта переменная неопределена, то ссылка будет без параметров
{
foreach($tmp as $var => $val) // Теперь поочередно вставяем значения из $GET ($tmp) в ссылку
{
if(IRB_REWRITE == 'on') // Если реврайт включен, через слэш
$href .= '/'. $val;
elseif(!empty($val)) // Если нет = обычные GET параметры
$href .= '&'. $var .'='. $val;
if ($stop == $var) // Останавливаем цикл
break;
}
}


if(IRB_REWRITE == 'on')
{
return IRB_HOST . trim($href, '/');
}
else
return
IRB_HOST .'?'. trim($href, '&');
}


И нужно еще добавить в ./variables.php массив переменных $GET_DEFAULT, который изменятся не будет:

/** 
* Array of variables for GET-parametres
* Массив переменных для GET-параметров
*/

$GET_DEFAULT = array(
'languege' => 'ru',
'page' => 'main',
'rem' => 'read',
'id' => 0,
'num' => 0,
);


$GET = array(
'languege' => 'ru',
'page' => 'main',
'rem' => 'read',
'id' => 0,
'num' => 0,
);


Получаем ссылки токого вида:
http://my-site.ru/en/second


Не знаю насколько все это правильно... Жду ответа.

Спустя 41 минута, 46 секунд (18.05.2010 - 12:22) twin написал(а):
Ну идея есть, надо развивать. Вообще можно попробовать меньшей кровью, на срезах массивов помудрить. Что то непомерно разрослась эта функция.
Навскидку, можно это место упростить пока
$GET_DEFAULT = $GET = array( 
'languege' => 'ru',
'page' => 'main',
'rem' => 'read',
'id' => 0,
'num' => 0,
);

Спустя 4 минуты, 59 секунд (18.05.2010 - 12:27) igor717 написал(а):
А ну да логично, спасибо, исправлю smile.gif

Не знаю было бы хорошо что-нибудь сделать по-красивше, просто вызов функции идет в конце и передать эти данные получается только через URL. Или можно как-то еще?

Спустя 4 минуты, 50 секунд (18.05.2010 - 12:32) igor717 написал(а):
Я пробовал удалять не нужные переменные из массивов, но ведь тогда теряется порядок!!!

Да и хорошо если человек на сайте и переключает ссылки, а если он перейдет по ссылке из другого сайта к примеру такой:

http://irbis-team.com/15/4/5


Какое значение, какой переменной присваивать, совсем не понятно...

Или я что-то не так понимаю?

Спустя 5 минут, 6 секунд (18.05.2010 - 12:37) twin написал(а):
Если человек перейдет с другого сайта по такой ссылке, значит она так и была задумана...
Отрезать лишние с хвоста не проблема. Из середины не выйдет. Да и зачем из середины вырезать?

Вот саму функцию следует оптимизировать. Так как она рождалась спонтанно, обрастая функционалом. Разгребусь на работе - подумаю.

Спустя 5 минут, 56 секунд (18.05.2010 - 12:43) igor717 написал(а):
А-а, понятно, просто я не так Вас понял...

Спустя 4 минуты, 4 секунды (18.05.2010 - 12:47) Shturman написал(а):
Я так понял, проблема в оптическом восприятии ссылки?

Спустя 3 часа, 10 минут, 7 секунд (18.05.2010 - 15:57) twin написал(а):
Не столько в этом, хотя, к моему удивлению, это почему то тревожит народ.
Мне лично не нравится сама функция. Куча циклов, да и вообще какая-то громоздкая sad.gif

Спустя 4 дня, 6 часов, 47 минут, 11 секунд (22.05.2010 - 22:44) AmberLEX написал(а):
А почему используются
include './config.php';
include './language/'. IRB_LANGUAGE .'.php';
include './variables.php';
а не require?
require вроде быстрее.

Спустя 18 минут, 46 секунд (22.05.2010 - 23:03) twin написал(а):
Заблуждение. Абсолютно одинаково работают. Медленнее (и то не критично) _once

А тут кто как привык. Мне удобнее видеть сразу несколько ошибок при отладке. require выдаст фатальную ошибку и остановит скрипт.

Спустя 18 минут, 39 секунд (22.05.2010 - 23:22) AmberLEX написал(а):
Я тут вычитал и спросил)
http://www.php.su/functions/?include
PHP преобразует сценарий во внутреннее представление, анализируя строки сценария по очереди, пока не доходит до конструкции include. Дойдя до include, PHP прекращает транслировать сценарий и переключается на указанный в include файл. Таким образом из-за подобного поведения транслятора, быстродействие сценария снижается, особенно при большом колличестве включаемых с помощью include файлов. С require таких проблем нет, поскольку файлы с помощью require включаются до выполнения сценария, то есть на момент трансляции файл уже включен в сценарий.

Спустя 9 минут, 37 секунд (22.05.2010 - 23:31) twin написал(а):
smile.gif
Кто то один это написал сто лет назад, неподумавши. А теперь все копипастят друг у друга.
Даже если не брать во внимание то, что я проводил замеры. Даже если закрыть глаза на тот факт, что вот это
Цитата
поскольку файлы с помощью require включаются до выполнения сценария, то есть на момент трансляции файл уже включен в сценарий.
полный бред, так как в таком случае require не работал бы в циклах, просто подумай логически. Какая разница, до или во время трансляции включать файл. Ведь это же одно и то же действие и выполнено должно быть обязательно. И время на него тратится одинаковое. smile.gif

Спустя 12 минут, 39 секунд (22.05.2010 - 23:44) AmberLEX написал(а):
По поводу ЧПУ и нулей. Может в этом направлении подумать:
Страница, раздел и параметры
Типа такого чтоб ссылки были, так и понятнее что к чему? я где-то такое встречал
http://my-site.ru/news/read/id/2/num/4

Только тогда переделывать придется функцию формирования GET-параметров и инициализацию переменных. Далеко еще не думал, может и не выйдет ниче.

Спустя 8 минут, 2 секунды (22.05.2010 - 23:52) twin написал(а):
Да что так здались эти нули... Ну вот в это место в функции href()
       if(IRB_REWRITE == 'on')
return trim($href, '/');
else
return
IRB_HOST .'?'. trim($href, '&');

подставить 0, и обрежет все крайние. А в середине пусть будут.
      if(IRB_REWRITE == 'on')
return trim($href, '/0');


А если не нравится, поставить дефолтное значение какое нибудь...
Меня больше сама функция волнует. Уж больно она некультяписта и громоздка.

Спустя 8 минут, 20 секунд (23.05.2010 - 00:00) AmberLEX написал(а):
Я че-то вообще прозевал, а по какому поводу усложнили функцию href() ?
Из-за такой ссылки
http://my-site.ru/en/second
?

Спустя 4 минуты, 14 секунд (23.05.2010 - 00:05) twin написал(а):
Да она и была такая. Просто разрослась как то сама собой. Завтра выходной - покумекаю. Мож и выйдет чего. smile.gif

Спустя 6 дней, 9 часов, 5 минут, 14 секунд (29.05.2010 - 09:10) gomer505 написал(а):
Шаг 4 Паттерн MVC. Контроллер.

Знаете, я понимаю , что это все не для тупых. Но проверил дважды, да больше ... Думал я ошибаюсь. Не работает сайт когда делаешь по листингу(по уроку), а иначе если у меня не получается - мне не интересно. Почему не получаетя? что не так?

Спустя 1 минута, 56 секунд (29.05.2010 - 09:12) gomer505 написал(а):
Получается не учишься, а натыкаешься на новые ошибки. Отпадает желание заниматься. А я разобраться хочу, а не просто скопировать готовый работающий архив. Простите конечно, но сами видите, как я ковыряю Ваш код.

Спустя 1 час, 9 минут (29.05.2010 - 10:21) igor717 написал(а):
Чем больше ошибок во время обучения возникает - тем лучше научитесь с ними справляться. Там же в ошибках куча подсказок, php вас предупреждает: Не удается открыть файл, нет его, или нет директории в которой он лежит, причем говорит какого файла не может найти и где подключение идет, даже на какой линии

Спустя 6 минут, 47 секунд (29.05.2010 - 10:28) twin написал(а):
Вот тут я написал про дебаггинг. Почитай советы и не расстраивайся))

На самом деле ошибки в листинге нет, скорее всего ты запустил раньше времени, не сделав файл libs/bb_tags.php

Не нужно запускать каждый листинг, сначала сделай все, что в уроке, потом пробуй. Это не гостевая книга, тут немного сложнее. Так разбить, как там было, уже не получается. smile.gif

Спустя 2 дня, 9 часов, 38 минут, 46 секунд (31.05.2010 - 20:06) gomer505 написал(а):
Знаете, я уже привык, что ко мне как к идиоту относятся. Файл libs/bb_tags.php я сделал - потому и написал, что выдает ошибку... Потому что сделал. И я не запускаю каждый листинг, читать умею, запускаю только тогда, когда написано - можно проверить.

Спустя 11 минут, 51 секунда (31.05.2010 - 20:18) gomer505 написал(а):
Цитата (igor717 @ 29.05.2010 - 07:21)
Чем больше ошибок во время обучения возникает - тем лучше научитесь с ними справляться. Там же в ошибках куча подсказок, php вас предупреждает: Не удается открыть файл, нет его, или нет директории в которой он лежит, причем говорит какого файла не может найти и где подключение идет, даже на какой линии

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

Спустя 3 минуты, 49 секунд (31.05.2010 - 20:22) igor717 написал(а):
PHP что попала не пишет. Гораздо хуже когда он молчит, а код работать отказывается... Тогда ой как хочется этих ошибок, спросить у него "эй, че случилось?"

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

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

Спустя 5 минут, 30 секунд (31.05.2010 - 20:28) gomer505 написал(а):
Дело в том, что прежде чем написать я перепроверяю раз пять. Файл есть и директория тоже, но в поток не выводит...Может такое быть?
<?php
/**
* The controller of a conclusion of the information
* Контроллер вывода информации
*
@author IT studio IRBIS-team
*
@copyright © 2009 IRBIS-team
*/
/////////////////////////////////////////////////////////


/**
* We connect a file of the model functions
* Подключаем файл функций модели
*/

include './libs/model.php';


/**
* The block of reading of the information
* Блок чтения информации
*/

$posts = getData('data/'. $GET['num']);
//24 линия следующая
include './libs/bb_tags.php';
$rows = '';

foreach($posts as $id => $post)
{
$date = $post['date'];
$name = htmlspecialchars($post['name']);
$mess = nl2br(bbTags(htmlspecialchars($post['mess'])));
$rows .= '<div class="guest_post">'. $date .' / <strong>
'
. $name .'</strong><hr width="30%" align="left" />
'
. $mess .'</div>';

}



Я надписал 24 линию. Файл есть и подключение есть... Но почему "Fatal error: Call to undefined function bbtags() in U:\home\my-site.ru\www\modules\second\read_controller.php on line 32"? Она же определена в библиотеке libs/bb_tegs.php или я не прав?
Подкажите пожалуйста.

Спустя 1 час, 8 минут, 49 секунд (31.05.2010 - 21:36) twin написал(а):
Идиотом тут никто никого и никогда не считал. Для того форум, чтобы помогать разбираться.

Ошибка у тебя банальна. Просто нужно немного внимательнее.
libs/bb_tegs.php
libs/bb_tags.php

Спустя 9 минут, 48 секунд (31.05.2010 - 21:46) gomer505 написал(а):
Цитата (twin @ 31.05.2010 - 18:36)
Идиотом тут никто никого и никогда не считал. Для того  форум, чтобы помогать разбираться.

Ошибка у тебя банальна. Просто нужно немного внимательнее.
libs/bb_tegs.php
libs/bb_tags.php

Спасибо. Простите... Работает.

Спустя 13 минут, 32 секунды (31.05.2010 - 22:00) Igrok написал(а):
Здравствуйте gomer505!
Не совсем понятно, что за раздел курса Вы проходите.
Вроде бы bb-теги подключали в "Гостевая книга с использованием MySQL. "
Если это так, то не ясно откуда у Вас директория second (судя по листингу ошибки U:\home\my-site.ru\www\modules\second\read_controller.php on line 32").
Т.к.в шаг 1 Шаблоны модуль second был переименован в guest
Да, и возможно, имеет смысл еще раз переписать название функции на английском (может быть какая-то буква набрана на русском, хотя выглядит правильно).

P.S. Пардон, не видел предыдущие сообщения. )

Спустя 28 дней, 48 минут, 51 секунда (29.06.2010 - 22:49) .:JIexa:. написал(а):
хм... Вроде бы разобрался без проблем вовсе.
Единственный момент, который меня почему-то заинтересовал это то, что при объявленной константе (по уроку) "IRB_REWRITE" = "on", если передать в функцию href только 2 аргумента, то в адресной строке дописывались нули. Вот что-то типа такого:
http://localhost/main/read/0/0
Мне это почему-то не особо понравилось. Дописав в foreach одну строку с условием, избавился от этого.

...
foreach($tmp as $var => $val)
{
if(!$val) continue;

if(IRB_REWRITE == 'on')
$href .= '/'. $val;
elseif(!empty($val))
$href .= '&'. $var .'='. $val;
}
...

Я так понимаю, ничего страшного от этого не будет ни сейчас ни позже?

Спустя 4 минуты, 20 секунд (29.06.2010 - 22:53) twin написал(а):
Я вроде это исправлял... Правда немного не так, но так даже интереснее.
Вообще я хочу эту функцию полностью переделать, все руки не доходят.

Спустя 25 дней, 15 часов, 33 минуты, 5 секунд (25.07.2010 - 14:26) VintoreZ написал(а):
Объясните работу...причем здесь $param[1] ohmy.gif :
// Если в массиве $GET ($tmp) есть ключ, полученный выше (в данном случае 'page')
if(array_key_exists($param[0], $tmp))
$tmp[$param[0]] = $param[1]; // То этому ключу присваиваем полученное значение
else
die('The variable <b>'. $param[0] .'</b> is not defined'); // Иначе...
}

Спустя 1 час, 4 минуты, 8 секунд (25.07.2010 - 15:30) VintoreZ написал(а):
помогите,почему у меня такой путь устанавливается у ссылок... blink.gif
http://localhost/main/read/0/0
http://localhost/second/read/0/0

Спустя 14 минут, 19 секунд (25.07.2010 - 15:44) twin написал(а):
Нормальный вид)))
Если не нравятся нули не конце, в функции href() последние строчки так:
       if(IRB_REWRITE == 'on')   
return $host . trim($href, '/0');
else
return
$host .'?'. trim($href, '&');

Спустя 7 минут, 54 секунды (25.07.2010 - 15:52) .:JIexa:. написал(а):
VintoreZ Ну или можешь сделать как я. *смотри мой предыдущий пост.
twin кстати, помнишь я тебе писал по поводу создания новых модулей, не видело файлы? Там не в путях ошибка была. Я просто сглупил и в папке с модулями у меня хранился бекап-архив модуля gallery. Только вот я не понял, на каком основании оно при нормальном обращении к папке modules/gallery/ ищет что-то в архиве modules/gallery.rar ???Ну или же просто архив мешал правильно ссылаться на файлы нового модуля.
Перенес архив - все заработало с первого раза.

Спустя 2 дня, 2 часа, 19 минут, 26 секунд (27.07.2010 - 18:12) VintoreZ написал(а):
Вопрос:if(IRB_REWRITE == 'on')
return IRB_HOST . trim($href, '/0');
else
return IRB_HOST .'?'. trim($href, '&'); понятно что этот алгоритм в итоге и есть сама ссылка взависимости от реврайта...а что дает оператор return? как я понял это переход по данному адресу чтоли?

Спустя 20 минут, 23 секунды (27.07.2010 - 18:32) .:JIexa:. написал(а):
Вот, посмотри тут. Конструкция return.

Спустя 8 минут, 1 секунда (27.07.2010 - 18:40) twin написал(а):
Если тебе незнакомы такие понятия как return, то ты рано взялся за тот раздел... Нужно с основ начинать. Вот здесь можешь посмотреть.

Спустя 1 час, 31 минута, 52 секунды (27.07.2010 - 20:12) VintoreZ написал(а):
блин,разобрался,понял что к чему,просто не увидел что в самой ссылке echo href()

Спустя 11 минут, 25 секунд (27.07.2010 - 20:23) VintoreZ написал(а):
Спасибо парни

Спустя 25 дней, 14 часов, 59 минут, 14 секунд (23.08.2010 - 11:23) Tokugava написал(а):
Очень прошу прощения, если подобное было выше... но...

Я несколько озабочен тем, что страница 404.html, ко мне несколько не ровно дышит...
Стоило мне закоментить в файле htaccess строки реврайта... и отключить его в конфиге...
Как вот она родимая на весь экран. sad.gif

Почему? Чем я заслужил такую любовь unsure.gif
Конфиг:
#######################################
### Включает модуль перенаправления ###
define('IRB_REWRITE', 'off');

Хтассес:

AddDefaultCharset UTF-8
php_flag magic_quotes_gpc Off
php_flag magic_quotes_runtime Off
php_flag register_globals Off
ErrorDocument 401 /401.html
ErrorDocument 403 /403.html
ErrorDocument 404 /404.html
Options -Indexes

# php_value error_reporting 2047
# php_value error_log "Z:/home/irbitm/public_html/testing/log/error.log"
# php_flag log_errors on
# php_flag display_errors off

# RewriteEngine on

# RewriteCond %{REQUEST_URI} !^/favicon.ico
# RewriteCond %{REQUEST_FILENAME} !-f
# RewriteCond %{REQUEST_FILENAME} !-d

# RewriteRule ^(.*)$ index.php?route=$1 [L,QSA]

Немного дополню...
При вводе ЧИСТО домена, тоесть хттп://сайт.ру выдает 404 страницу
При вводе хттп://сайт.ру/index.php открывается инекс как и положено... но...
ссылки вида
?page=board&rem=read
выдают так же 404

Спустя 25 минут, 21 секунда (23.08.2010 - 11:48) twin написал(а):
Наверно дело не в бобине... Может как то сервер не так настроен.
Что то я не припомню таких проблем.
А если совсем .htaccess снести?

Спустя 43 минуты, 18 секунд (23.08.2010 - 12:31) Tokugava написал(а):
Снес совсем перестало выкидовать на 404 blink.gif

Можно я как нибудь составлю большой список всех моих дурацких вопросов сделаю новой темой, ответите?

Просто недопонимаю огромное количество штук... а сформулировать вопросы не могу с ходу... unsure.gif

Спустя 4 минуты, 52 секунды (23.08.2010 - 12:36) twin написал(а):
Значит опять проблемы с самим .htaccess. Он скорее всего кидает 404 вместо 500. Попробуй вот этот:

Спустя 35 минут (23.08.2010 - 13:11) Tokugava написал(а):
Спасибо работает... все таки флаги виноваты были да?

Спустя 33 минуты, 13 секунд (23.08.2010 - 13:44) twin написал(а):
Нет. Флаги там есть. Это у тебя BOM шалит. smile.gif

Спустя 1 час, 7 минут, 19 секунд (23.08.2010 - 14:52) Tokugava написал(а):
Цитата (twin @ 23.08.2010 - 10:44)
Нет. Флаги там есть. Это у тебя BOM шалит. smile.gif

А что такое ВОМ?

Спустя 3 часа, 3 минуты (23.08.2010 - 17:55) A.V. написал(а):
BOM - несколько рабочих байтов, добавляемых в начале любого документа с кодировкой utf-8. По крайней мере во многих windows-программах.

Спустя 23 часа, 4 минуты, 48 секунд (24.08.2010 - 16:59) Rasty написал(а):
При формировании ссылки в таком ракурсе

<a  href='<?php echo href("page=all", "id=14"); ?>'>ссылка, сюда пошли, установили значение id</a>


$GET[id] принимает значение "14". Почему по переходу на такую ссылку где не установлено id,

<a  href='<?php echo href("page=main"); ?>'>сюда вернулись по ссылке без id</a>


значение элемента этого массива не принимает дефолтный 0, а сохраняется? ph34r.gif

Спустя 8 минут, 13 секунд (24.08.2010 - 17:08) Lenarfate написал(а):
ее вручную надо прописать .
<a  href='<?php echo href("page=main", "id=0"); ?>'>такая ссылка</a>

Спустя 15 минут, 46 секунд (24.08.2010 - 17:23) Rasty написал(а):
получается всегда все ссылки нужно писать так?

<a  href='<?php echo href("page=", "rem=", "id=", "num=", и тд); ?>'>


а то иначе могут эти уставленные элементы гулять по страницам ph34r.gif
--> так ведь?

Спустя 1 минута, 21 секунда (24.08.2010 - 17:25) Lenarfate написал(а):
ну какие надо менять, да

Спустя 8 дней, 20 часов, 50 минут, 22 секунды (3.09.2010 - 14:15) Rasty написал(а):
В функции href() внизу имеется вот это
 return $host . trim($href, '/0'); 

имеет ли обрезание нуля сакральный смысл, или просто приводит урл к чпу?
спс. ph34r.gif


Спустя 34 минуты, 10 секунд (3.09.2010 - 14:49) twin написал(а):
ну просто удаляет лишние
site.ru/main/0/0/0/0 будет просто site.ru/main

Спустя 13 минут, 4 секунды (3.09.2010 - 15:02) Rasty написал(а):
можно ли вместо 0 присваивать индексам пустоту?

'anchor' => '',

Спустя 45 минут, 32 секунды (3.09.2010 - 15:48) Lenarfate написал(а):
ты присваиваешь не пустоту, а пустое строковое значение. если тебе в дальнейшем не нужно будет работать с этой переменной как с числом, то да

Спустя 23 часа, 37 минут, 15 секунд (4.09.2010 - 15:25) memo написал(а):
Привет Twin! smile.gif Изучаю пхп по твоему курсу:) все гут написано:).

Возник один вопрос по поводу обрезания ohmy.gif Долго я мучился с ним:), но я его добил все-таки.smile.gif Все бы хорошо, но я не понимаю почему оно работает:) если не трудно объясни пожалуйста:)

 foreach($arg as $var)
{
$param=explode('=',$var);

if(array_key_exists($param[0],$tmp))

{
$tmp[$param[0]]=$param[1];

$stop=$param[0];

}
else
die('The variable<b>'.$param[0].'</b> is not defined');
}


foreach($tmp as $var=>$val)
{
if(((INF_REWRITE=='on')and($stop!=$var))or((INF_REWRITE=='on')and($stop===$var)))
$href.='/'.$val;
if((!empty($val)) and (INF_REWRITE=='off'))
$href.='&'.$var.'='.$val;
if($stop==$var)
{
$stop=TRUE;
}
}

if(INF_REWRITE=='on')
return $host.trim($href,'/0');
else
return
$host.'?'.trim($href, '&');


чесн не понимаю до конца почему он работает подозреваю что это происходит из за того что пхп юзает копию массива...

Спустя 8 минут, 21 секунда (4.09.2010 - 15:34) memo написал(а):
Вот код который сразу возник в голове, но он не работает sad.gif

foreach($tmp as $var=>$val) //перебираем временный массив($гет)
{

if((INF_REWRITE=='on')and($stop!=TRUE)) // если вкл реврайт и не стоит флаг то добовляй параметр в ссылку
$href.='/'.$val;
if((INF_REWRITE=='on')and($stop===TRUE))// если вкл реврайт и флаг то добовляй /0
$href.='/0';
if((!empty($val)) and (INF_REWRITE=='off'))
$href.='&'.$var.'='.$val;
if($stop===$var) // если последний переданный ключ параметра = ключу временного массива($гет) то ставь флаг тру
{
$stop=TRUE;
}
}


p.s. прочитал что те красота чпу не особо важна да и функция по твоему мнению получилась громоздкая, но к твоему коду, циклов лишних не добавил, а добавил всего 3 строчки smile.gif , надеюсь они не сильно скажутся на скорости... обращаюсь к тебе ибо ты ппц гений такое замутить smile.gif

Спустя 1 час, 49 минут, 54 секунды (4.09.2010 - 17:23) twin написал(а):
Вообще по сути эта функция не очень то толковая. По идее нужно вместо неё три на выбор.
Одну как есть - универсальную, и еще две - для ЧПУ и для простых параметров.
Универсальность нужна далеко не всегда. Именно поэтому возникают такие сложности.
Но это в планах, а пока - если нужно обрезать, дык возьми, да обрежь)
Посчитай количество аргументов и алга.
        foreach($arg as $var)
{
$param = explode('=', $var);

if(array_key_exists($param[0], $tmp))
$tmp[$param[0]] = $param[1];
else
die('The variable <b>'. $param[0] .'</b> is not defined');
}

$tmp = array_slice($tmp, 0, count($arg));

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

Спустя 1 час, 14 минут, 40 секунд (4.09.2010 - 18:38) memo написал(а):
понятн, про такое обрезание то я сразу вкурил smile.gif , о слайсе не знал sad.gif, но эт как то не интересно smile.gif цель была чтоб все smile.gif аргументы не писать и не уходил со страницы, контроллера и т.д. первый код работает, думаю пока его оставлю, но результат был подогнан... и принципа работы я не понял:( думал мб ты меня просвятишь... smile.gif

Спустя 1 час, 17 минут, 29 секунд (4.09.2010 - 19:56) twin написал(а):
Ну просветить - дело не хитрое. Мне просто не очень по душе твой подход к проблеме. Не хотелось усложнять синтаксис дополнительными параметрами. И тек не шибко просто, а еще следить, где true поставить, где false.

Вот так решатся все проблемы.
        foreach($arg as $var)
{
$param = explode('=', $var);

if(array_key_exists($param[0], $tmp))
$tmp[$param[0]] = $param[1];
else
die('The variable <b>'. $param[0] .'</b> is not defined');
}

$cnt = array_flip(array_keys($tmp));
$tmp = array_slice($tmp, 0, $cnt[$param[0]] + 1);


Обрежется все, после последнего переданного параметра. То есть если так:
href('rem=read'); 
ссылка будет такой:
http://sine.ru/main/read

Спустя 22 минуты, 15 секунд (4.09.2010 - 20:18) memo написал(а):
оО, мне понравилось smile.gif . Надо подтягиваться по пхп, надеюсь с опытом придет. Большое спасибо smile.gif .

Спустя 28 дней, 5 часов, 1 минута, 49 секунд (3.10.2010 - 01:20) allforweb написал(а):
А в Switch Case получается нельзя использовать <?php echo IRB_ROOT ?>

Спустя 7 часов, 2 минуты, 41 секунда (3.10.2010 - 08:22) twin написал(а):
Конечно нет. Это не зона PHP, зачем там
<?php echo 

Спустя 4 дня, 8 часов, 25 минут, 16 секунд (7.10.2010 - 16:48) ShamanV написал(а):
Цитата (twin @ 3.09.2010 - 11:49)
ну просто удаляет лишние
site.ru/main/0/0/0/0 будет просто site.ru/main

Только это не совсем корректно работает, если последний параметр числовой. Допустим, site.ru/page/read/10 преобразует в site.ru/page/read/1, т.е. убирает нолики в хвосте. Хотя из текста функции это не очевидно. Почему так?

Спустя 2 часа, 44 минуты, 27 секунд (7.10.2010 - 19:32) twin написал(а):
Очевидно кстати. Ноль он и в африке ноль... Я сам не пользуюсь ЧПУ за редким исключением. По этому проблем не видел...
Поправлю.

Спустя 16 часов, 47 минут, 56 секунд (8.10.2010 - 12:20) twin написал(а):
Все просто оказалось. Нужно убрать ноль и все. Функцию то переделали раньше, а про него забыли.

           return $host . trim($href, '/');   

Спустя 5 дней, 5 часов, 32 минуты, 49 секунд (13.10.2010 - 17:53) Rasty написал(а):
Цитата (twin @ 8.10.2010 - 09:20)
Все просто оказалось. Нужно убрать ноль и все. Функцию то переделали раньше, а про него забыли.

           return $host . trim($href, '/');   

B теперь вернулись к нашим баранам )
все ссылки приняли вид:

http://site/admin/main/0/0/0


а если поставить 0 в href() тут: "/0"

то такой вид)

http://site/admin/main/?route=main


Я из-за обрезания нуля переделал свои скрипты, чтобы ссылки не заканчивались нулем, например 10 не ставало 1 и тд, а теперь получается обрезание нуля вообще нет? ph34r.gif

Спустя 7 минут, 47 секунд (13.10.2010 - 18:01) twin написал(а):
Если версия функции последняя, то нужно обязательно писать в ссылку 'rem='
Остальное обрежет.

Спустя 4 дня, 1 час, 11 минут, 55 секунд (17.10.2010 - 19:13) kovaldm написал(а):
Я может что-то пропустил...
Почему массив $_GET при включенном ЧПУ содержит элемент с ключом 'route', а не с каким-либо другим? Кем и где это определяется?

Спустя 29 минут, 4 секунды (17.10.2010 - 19:42) twin написал(а):

Спустя 26 минут, 11 секунд (17.10.2010 - 20:08) kovaldm написал(а):
То есть в .htaccess определяется.
Сенкс.

Спустя 1 день, 2 часа, 20 минут, 30 секунд (18.10.2010 - 22:28) Nebe написал(а):
Доброго времени суток!

В новой редакции функции href(), нету перенаправления на админку. Я так понимаю, это нужно прописывать в самой ссылке?...

Спустя 17 минут, 15 секунд (18.10.2010 - 22:46) twin написал(а):
Есть чуть дальше.Там где админка начинается

Спустя 3 дня, 22 часа, 19 минут, 2 секунды (22.10.2010 - 21:05) Guest написал(а):
такой вопрос, если убрать из функции формирования ссылок эти строки:
if(is_array($arg[0]))
$arg = $arg[0];

то, что может нарушиться? (никак не могу выявить смысл этих строк unsure.gif )

Спустя 13 минут, 42 секунды (22.10.2010 - 21:18) twin написал(а):
А попробовать? smile.gif Боишься, что взорвется?

Мож и впрямь лишнее

Спустя 3 дня, 21 час, 30 минут, 49 секунд (26.10.2010 - 18:49) m4a1fox написал(а):
Если не трудно... Вопрос вот такой! Есть блок

<?
$query = "SELECT id, name FROM menu ORDER BY id";
$id = mysql_query($query);
if(!$id) exit("Ошибка - ".mysql_error());
while($ind=mysql_fetch_array($id))
{
echo "<img src='img/point_admin.gif'><a href=ind.php?ind=$ind[id]>$ind[name]</a><br>";
}
?>
выводит список из БД в строку со ссылкой к которой прикреплен индивидуальный номер. Как сделать так, что бы после нажатия на ссылку открывалась страница с данными из БД(menu)!

Спустя 6 минут, 23 секунды (26.10.2010 - 18:55) twin написал(а):
Это не по теме вопрос. Создай тему в соответствующем разделе, там помогут лучше.

Спустя 1 месяц, 1 день, 19 часов, 47 минут, 27 секунд (28.11.2010 - 15:43) Эдуард написал(а):
if($arg[0] == 'host')
Объясните пожалуйста эту строку, что такое 'host', откуда он взялся?

Спустя 1 час, 12 минут, 32 секунды (28.11.2010 - 16:55) twin написал(а):
Это для того, чтобы в любом месте можно было организовать ссылку или редирект на главную. Писать так:

    reDirect('host');
href('host');

Спустя 1 день, 3 часа, 55 минут, 8 секунд (29.11.2010 - 20:51) Эдуард написал(а):

Это понятно href('host');
А где находится функция ( reDirect('host'); ) в которую мы передаем аргумент host ?

Спустя 47 минут, 39 секунд (29.11.2010 - 21:38) twin написал(а):
Где то есть... Дальше наверно.

Спустя 6 дней, 23 часа, 43 минуты, 5 секунд (6.12.2010 - 21:21) Гость_Сергей написал(а):
Объясните пожалуйста смысл этих 2 сторок
$cnt = array_flip(array_keys($tmp)); // обрезаем те параметры, которые не передавались в аргумент
$tmp = array_slice($tmp, 0, $cnt[$param[0]] + 1);

Если я напишу href('page=main', 'rem=read'); то у меня в tmp будет
$tmp = array( page => main, rem => read) и из этого массива я могу формировать ссылку.

Зачем мне выбирать все ключи массива - array_keys($tmp) page, rem - затем их переворачивать функцией array_flip() и обрезать их array_slice

Спустя 10 часов, 20 минут, 16 секунд (7.12.2010 - 07:42) twin написал(а):
Это для того, чтобы можно было написать
href('rem=read'); 

тогда все до этого значения проставится автоматически, а после - обрежется.

Спустя 10 часов, 4 минуты, 4 секунды (7.12.2010 - 17:46) Гость_Сергей написал(а):
Если я понял правильно, при написании href('rem=read');
в массиве $GET будет array( page => main, rem => read)

А если мне надо array( page => qwer, rem => read)
то надо писать href('page => qwer', 'rem=read'); - ?

Спустя 22 минуты, 51 секунда (7.12.2010 - 18:08) twin написал(а):
Да, верно.

Спустя 2 дня, 21 час, 22 минуты, 12 секунд (10.12.2010 - 15:31) T1mer написал(а):
Вопрос по поводу комментариев:
/**       
* Data recording function
* Функция записи информации
*
@param string
*
@return array
*/

function setData($file, $array)
{
return file_put_contents($file, serialize($array));
}

Это опечатка или так и надо? :)
@param всего один. Хотя функция 2 параметра принимает.
@return array.

Вводит в заблуждение если опечатка.

Вот тут, в самом конце.

Спустя 12 минут, 22 секунды (10.12.2010 - 15:43) twin написал(а):
Опечатка, спасибо.

Спустя 4 часа, 3 минуты, 17 секунд (10.12.2010 - 19:46) bubu123 написал(а):
Подскажите пожалуйста...
не могу понять данную строчку.
$files = count($files) ? $files : array('1');  

http://irbis-team.com/15/16/3

если у нас один файл, т.е. массив files с одним элементом
то $files присваиваем $files
если нет то пишем туда массив из одной единички?

чет совсем непонимаю зачем это.. :(

Спустя 54 минуты, 57 секунд (10.12.2010 - 20:41) twin написал(а):
Другими словами - если массив не пуст, оставляем без изменений. Если пуст - добавляем туда первый элемент. Нужно же с чего то начать.

Спустя 23 минуты, 47 секунд (10.12.2010 - 21:05) bubu123 написал(а):
хм, понятно.
протупил немного)
Я просто думал, что если count($files) не ровняется 1
то будет false
как я понял тут наоборот если не 0, то будет true
Спасибо.

Спустя 21 час, 37 минут, 34 секунды (11.12.2010 - 18:43) Vall написал(а):
Здравствуйте!
Помогите разобраться тут:
Ядро, Шаг 1, строки в htaccess:
...
ErrorDocument 404 /404.html
...
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d

RewriteRule ^(.*)$ index.php?route=$1 [L]

Я так понимаю, что при запросе несуществующего файла будет вызван index.php, а вот эта строка
ErrorDocument 404 /404.html
никогда не сработает или сработает только при отсутствии index.php.
Или не так и почему?
Спасибо.

Спустя 6 дней, 20 часов, 1 минута, 20 секунд (18.12.2010 - 14:44) Garda1 написал(а):
ну раз тут никто этого не упоминал, то отпишусь я.
у нас существует define('IRB_HOST',true), которую мы используем при создании ссылок, НО замечу такой моментъ:
существует такой тэг в HTML <base>(описание тэга).
Мне кажется будет логичнее указать один раз в главном шаблоне<base href="<?=IRB_HOST?>">, чтобы не дёргать каждый раз эту константу и заодно избавляемся от одного if'a, а ссылки будут корректно открываться от корня сайта.

Спустя 37 минут, 51 секунда (18.12.2010 - 15:22) twin написал(а):
А скрипт в корне? подозреваю что нет.
404 только в корне работает. Ну если настроено по дефолту.

Спустя 2 дня, 1 час, 44 минуты, 18 секунд (20.12.2010 - 17:06) Vall написал(а):
Да, в корне.

Спустя 3 дня, 28 минут, 8 секунд (23.12.2010 - 17:34) Гость_Сергей написал(а):
Подскажите пожалуйста как лучше организовать главное меню (данные берутся с базы в цикле, как вы описывали здесь Шаг 5 Паттерн MVC. Вид.).
Думаю сделать так в
index.php записать define('IRB_GENERAL_MENU', '.modules/main_menu/router.php');
В router.php инклюдить include_once IRB_ROOT .'modules/main_menu/menu_controller.php'; и
include_once IRB_ROOT .'skins/tpl/menu.tpl';
А в index.tpl вывести IRB_GENERAL_MENU'

Спустя 11 минут, 17 секунд (23.12.2010 - 17:46) twin написал(а):
Я бы е стал модуль меню делить на кучу файлов. Он же один...
Там где контроллер один, нет смысла делать еще и роутер.

Спустя 4 дня, 6 часов, 30 минут, 2 секунды (28.12.2010 - 00:16) Гость_Сергей написал(а):
Подскажите пожалуйста, если ссылки выводятся с базы, то как лучше их затятуть в функцию
href (). Есть такой вариант, но он не очень красивый.

$a = "page=main";
$b = "rem=read";
<li> <a href="<?php echo href($a, $b); ?>">

Спустя 9 часов, 48 минут, 12 секунд (28.12.2010 - 10:04) twin написал(а):
А что тут из базы?

Спустя 9 часов, 39 секунд (28.12.2010 - 19:04) Челноков написал(а):
Пожалуйста, ответьте мне на следующие вопросы:

1) Имеется ли транслятор либо другой способ получения эффективного БИНАРНОГО кода для PHP-программы? Очевидно, что повышение эффективности программы - это хорошо даже тогда, когда это пока не требуется.

2) Для чего используются АССОЦИАТИВНЫЕ МАССИВЫ, если они напрямую не связаны с таблицей БД. Очевидно, что такой массив, хранящийся в памяти, будет сканироваться по индексу, а не по значению.

С уважением, Челноков

Спустя 5 часов, 32 минуты, 45 секунд (29.12.2010 - 00:37) Гость_Сергей написал(а):
С базы page=main и rem=read, как лучше затянуть ссылку в базу?

Спустя 12 дней, 16 часов, 13 минут, 16 секунд (11.01.2011 - 16:50) Riddick написал(а):
В функции href() после вот этих действий

$cnt = array_flip(array_keys($tmp));
$tmp = array_slice($tmp, 0, $cnt[$param[0]] + 1);

Наверное проверка elseif(!empty($val)) уже не нужна в коде

foreach($tmp as $var => $val)
if(IRB_REWRITE == 'on')
$href .= '/'. $val;
elseif(!empty($val))
$href .= '&'. $var .'='. $val;

Спустя 1 месяц, 29 дней, 5 минут, 19 секунд (10.03.2011 - 16:56) BorisBelyaev написал(а):
Подскажите, при использовании скаченного контента из раздела "Ядро" "Шаг 3
Формируем ссылки " на главной формируются ссылки следующего характера:
http://t/%3C!--error--%3E%3Cbr%20/%3E%3Cb%3ENotice%3C/b%3E:%20%20Undefined%20variable:%20host%20in%20%3Cb%3EZ:%5Chome%5Ct%5Cwww%5Clibs%5Cdefault.php%3C/b%3E%20on%20line%20%3Cb%3E61%3C/b%3E%3Cbr%20/%3E%3Cscript%20language=JavaScript%20src=%27/denwer/errors/phperror_js.php%27%3E%3C/script%3Emain


ну и соответственно ошибка:
Notice: Undefined variable: host in Z:\home\t\www\libs\default.php on line 61


Не могу разобраться.

Спустя 1 час, 5 минут, 44 секунды (10.03.2011 - 18:01) A.V. написал(а):
BorisBelyaev,

переменная не определена.
Пропишите в самом начале тела функции подобное:

$host = IRB_HOST;  

Спустя 59 минут, 34 секунды (10.03.2011 - 19:01) BorisBelyaev написал(а):
Цитата (A.V. @ 10.03.2011 - 15:01)
BorisBelyaev,

переменная не определена.
Пропишите в самом начале тела функции подобное:

$host = IRB_HOST;  

Понял, спасибо. Сразу не заметил.

Спустя 7 дней, 2 часа, 17 минут, 58 секунд (17.03.2011 - 21:19) amc-77 написал(а):
Команде IRBIS большое спасибо за уроки!

Накопились вопросы после разборки темы "Гостевая книга с использованием MySQL":

- 1-ый: ЧПУ - я не могу его назвать человеко-читабельным
а) при открытии сайта = http://*MySite*.ru/ = адрес в адресной строке виден как - "http://*MySite*.ru/", а если нажать на меню "Главная страница", то получается: "http://*MySite*.ru/main" ??? не корректно как-то... пропадает "наглядная красивость" (извините за белеберду).
б) при нажатии на пунк меню "Первая" в адресной строке видно следующее: "http://*MySite*.ru/main/read/first", хотя логичнее было бы "http://*MySite*.ru/main/first", так как это подраздел "Главная страница", на сколько я понял.

- 2-ой: В данном примере есть небольшие недочеты (можно так назвать), пример: нажали на меню "Главная страница" - выскочило в адресе "http://*MySite*.ru/main", далее дописываем в адресе "/" или "?123456" и ничего не происходит... логично было бы здесь кинуть страничку 404 или что-то в этом роде (или убирать лишние символы). Возможно я не прав !? Опять же это сказывается только на "наглядной красивости" - вродебы все и работает хорошо - но такая строка в адресе "http://*MySite*.ru/main?123456" при открытой главной странице как-то нелепо смотрица.

собственно и все. Просьба: не говорите - "читай дальше" или "ну ты и лапух", передо мной встала проблема и я хочу ее решить для себя сегодня и сейчас.. smile.gif

Спасибо!

Спустя 3 часа, 40 минут, 10 секунд (18.03.2011 - 00:59) twin написал(а):
ЧПУ я и сам недолюбливаю. Но есть такое слово - коньюнктура. Поэтому там есть возможность выбора. Специально так и задумано. По этому только так
http://*MySite*.ru/main/read/first возможно. Там важен порядок следования и пропустить ничего нельзя


Что касается защиты от дурака, всего не предусмотришь. Ну если кто то решил чего то дописать в строку - его проблема. Я исправить его голову этого не могу. Пусть и торчит так http://*MySite*.ru/main?123456

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

Спустя 1 минута, 52 секунды (18.03.2011 - 01:01) neadekvat написал(а):
Цитата (twin @ 18.03.2011 - 00:59)
коньюнктура

*шепотом* конъюнктура

Спустя 5 часов, 54 минуты, 43 секунды (18.03.2011 - 06:56) amc-77 написал(а):
Цитата
Если благочестиво жать на ссылки, ничего такого не произойдет.


Спасибо за ответ. Теперь ясна концепция smile.gif

Спустя 7 дней, 6 часов, 10 минут, 28 секунд (25.03.2011 - 13:06) Ulan написал(а):
не корректно работает ЧПУ.
если путь вида http://my.site/main/read и длиннее, не читает файл css

если путь короче, http://my.site/main то все нормально отображается

что делать? huh.gif

Спустя 7 минут, 4 секунды (25.03.2011 - 13:13) inpost написал(а):
Ulan
Это абсурд, должно работать.
Но это ещё не самое главное, важно узнать, не работает как сам css, или какой-то внутри класс, типо бг-картинка не отображается?
Когда открываешь через исходный код, правильный ли там путь до css файла?

Спустя 44 минуты, 27 секунд (25.03.2011 - 13:58) Ulan написал(а):
ссылка правильная, не подключает именно файл css. если посмотреть через firebug в firefox то видно что подключает страницу 404 вместо файла css, а на одной ссылке вообще подключает вывод MySQL error, хотя вся информация на странице выводится, только без форматирования.

Спустя 2 часа, 14 минут, 25 секунд (25.03.2011 - 16:12) twin написал(а):
Ulan
Цитата
не корректно работает ЧПУ.
если путь вида http://my.site/main/read и длиннее, не читает файл css

Всё корректно работает. Просто нужно верно указть путь. Где находится CSS?

Спустя 27 минут, 13 секунд (25.03.2011 - 16:39) Ulan написал(а):
файл лежит здесь.
<link rel="stylesheet" type="text/css" href="./skins/css/style.css" />


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

Спустя 22 минуты, 57 секунд (25.03.2011 - 17:02) Ulan написал(а):
посмотрел заголовки, если перехожу по адресу http://my.site/anekdot/read/2
то почему-то запрос идет к
http://my.site/anekdot/read/skins/css/style.css

вместо
http://my.site/skins/css/style.css


upd проблема решается указанием абсолютного пути
<link rel="stylesheet" type="text/css" href="http://my.site/skins/css/style.css" />
но это костыль какойто, а не решение, блин mad.gif

pps: оказалось, что во всем виновата точка перед указанием пути /skins/css/style.css

Спустя 12 дней, 2 часа, 25 минут, 17 секунд (7.04.2011 - 18:28) DarkGuard написал(а):
Здравствуйте, скорее всего, ошибка в конечном архиве 3-го урока.
При переходе с индекса по ссылке на главную страницу используется следующая ссылка:

http://test1.ru/%3C!--error--%3E%3Cbr%...script%3Esecond

Ничего не открывается и выдается ошибка.

Спустя 45 минут, 56 секунд (7.04.2011 - 19:14) twin написал(а):
Да, действительно. Не тот архив был. Исправил. Спасибо за подсказку.

Спустя 3 дня, 3 часа, 14 минут, 2 секунды (10.04.2011 - 22:28) mxwuser написал(а):
Почему во всех файлах подключаемых к индексу, защита от прямого доступа при запросе выполняет 404.html, а у variables.php идет передача заголовка с адресом хоста?
    if(!defined('IRB_KEY'))
header('http://'. $_SERVER['HTTP_HOST']);

Так же не понял почему эту строку:
    define('IRB_ROOT', str_replace('\\', '/', $_SERVER['DOCUMENT_ROOT']) .'/');

Функция str_replace должна заменить два обратных слеша на один обычный, но в переменной $_SERVER['DOCUMENT_ROOT'], и так ее нету, там ведь адрес url? Чего я не знаю, объясните, пожалуйсто (=

Еще вопрос, откуда берется переменная $_GET['route'] - она образуется только при включенном модреврайт?

Спустя 9 часов, 10 минут, 8 секунд (11.04.2011 - 07:38) twin написал(а):
Цитата
variables.php идет передача заголовка с адресом хоста?
Это где так? Уточните. Это ошибка разумеется.
Цитата
Функция str_replace должна заменить два обратных слеша на один обычный,
Это не два обратных. Это один. А второй - его экран.
Цитата
она образуется только при включенном модреврайт?
Именно так

Спустя 5 часов, 27 секунд (11.04.2011 - 12:38) mxwuser написал(а):
Цитата
Это где так? Уточните. Это ошибка разумеется.

Спустя 14 дней, 9 часов, 9 минут, 24 секунды (25.04.2011 - 21:48) bFire написал(а):
Классные уроки

Спустя 5 дней, 1 час, 58 минут, 8 секунд (30.04.2011 - 23:46) Winston написал(а):
Решил написать свою функцию формирование ссылки. И хочу узнать имеет ли она право на жизнь :)
Свернутый текст
function href()
{
// Получаем доступ к переменной в которой хранится состояние mod_rewrite
global $rewrite;

// Массив в который будут собираться параметры
$params = Array();

// Переменная в которой должна будет сформироваться ссылка
$href = '';

// Получаем параметры
$get_params = func_get_args();

foreach($get_params AS $param)
// Разбываем пары param=val
$params[] = explode('=', $param);

foreach($params AS $param)
{
// Если передано значеник без ключа прерываем работу
if(empty($param[0]) && !empty($param[1]))
die('Значение: <b>' . $param[1] . '</b> не присвоено никакому ключу !');

// Если передан ключ без значения прерываем работу
if(!empty($param[0]) && empty($param[1]))
die('Ключу: <b>' . $param[0] . '</b> не присвоено никакого значения !');
}

if(strtolower($rewrite['val']) == 'on')
{
// Если rewrite включен, формируем ссылку состоящую из значений параметров
$href .= 'http://' . $_SERVER['SERVER_NAME'] . '/admin/';
foreach($params AS $param)
$href .= $param[1] . '/';
}

elseif(strtolower($rewrite['val']) == 'off')
{
$href .= 'http://' . $_SERVER['SERVER_NAME'] . '/admin/index.php?';
// Узнаем количество параметров, используется для того чтобы не появился лишний & в конце ссылки
$count_param = sizeof($params);
$i = 1;
foreach($params AS $param)
{
$i++;
if($i <= $count_param)
$href .= $param[0] . '=' . $param[1] . '&';
else
$href .= $param[0] . '=' . $param[1] . '';
}
}


// Возвращаем сформированную ссылку
return $href;
}

Что можете сказать на её счет ?

Спустя 9 часов, 54 минуты, 23 секунды (1.05.2011 - 09:40) twin написал(а):
Ну работает, значит хорошо. Она немного неудобна тем, что нужно всегда прописывать все аргументы полностью.

Спустя 11 часов, 8 минут, 19 секунд (1.05.2011 - 20:48) Winston написал(а):
Цитата (twin @ 1.05.2011 - 08:40)
Она немного неудобна тем, что нужно всегда прописывать все аргументы полностью.

Не совсем понял.
А как тогда формировать ссылку? Если не передавать аргументы.
Вызывается так:
href('act=add', 'type=image');

Спустя 15 дней, 12 часов, 43 минуты, 32 секунды (17.05.2011 - 09:32) Vseonet написал(а):
В 3-ем уроке у Вас не соответствие с предложенным скриптом в архиве и скриптом, который получается по мере прохождения всех уроков по листингам.

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


2. Если делать по листингам, то в итоге получается 2 меню. Т.к. не указано, что помимо добавления определения константы в индексе
/**   
* Establish a path to the navigation menu
* Устанавливаем путь до меню навигации
*/
define('IRB_GENERAL_MENU', './skins/tpl/menu.tpl');

там еще нужно удалить эти строчки:
/**  
* Подключаем меню
* Includes the menu
*/
include './skins/tpl/menu.tpl';

Они находятся вначале буферизации.
Ну или можно удалить из главного шаблона эту строчку:
<?php include IRB_GENERAL_MENU; ?> 

В общем где то что то лишнее.

3. Здесь нужно переставить слова местами:
А для чего же еще было нужно так мудрить с гет-параметром?

Спустя 1 час, 46 минут, 4 секунды (17.05.2011 - 11:18) twin написал(а):
Да, спасибо. Сейчас в очередной раз пересматриваем уроки и пытаемся привести в божеский вид. Благодаря вашим замечаниям там очень много уже исправлено. Учтем и еще раз спасибо.
Цитата
3. Здесь нужно переставить слова местами:
А для чего же еще было нужно так мудрить с гет-параметром?
Не нужно. Я стараюсь писать не сухим техническим языком, а по возможности литературным. А он позволяет подобные вольности для усиления эфекта.

Спустя 22 дня, 22 часа, 59 минут, 9 секунд (10.06.2011 - 10:17) nugle написал(а):
twin
а когда не стоит употреблять global?
он на что-то влияет?

Спустя 1 час, 39 минут, 47 секунд (10.06.2011 - 11:57) twin написал(а):
Классы и функции разграничивают области видимости. global делает все наоборот. Иногда это достаточно полезная вещь, но злоупотреблять не стоит. Хотя и бояться тоже.

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

Я почти всегда использую глобальные переменные только для чтения. И если переменная предполагается быть глобальной, пишу её в верхнем регистре.
$SETTING

Это сводит на нет риски и дает массу преимуществ перед теми, кто боится глобальных переменных как черт ладана. :)

Спустя 50 минут, 2 секунды (10.06.2011 - 12:47) nugle написал(а):
twin
спасибо, понял)

Спустя 2 дня, 4 часа, 34 минуты, 29 секунд (12.06.2011 - 17:21) m4a1fox написал(а):
Извините если повторюсь. Но все же... Делаю так. В БД создал табличку. Приблизителтьно такой структуры: id, link, url (зачем еще сам не знаю), meta_k, meta_d, text. Эта таблица формирует вывод текста по ссылке типа - (www.sitename.com/link/?url= (вот тут из табл. вытаскивается link)). Соответственно сущ. папка /link/ в которой есть router он отображает тот текст, взависимости от ссылки которую получает get параметр. Собственно вопрос (ы).1. - я несколько запутался в каталогах и файлах. (Но это дело времени.) 2. - как мне вытащить ссылки из таблицы и преобразовать их в вид (www.sitename.com/link/(вот тут из табл. вытаскивается link) то есть чо бы не было вот этой штуки в get (?url=)). Так как, насколько понимаю ссылки такого вида возможно сформировать только при помощи функции href (). А если заносить данные ручную, то это уже тупичок. Собственно сам немного запутался.... Но все же.

Спустя 1 день, 18 часов, 1 минута, 38 секунд (14.06.2011 - 11:23) nugle написал(а):
Добрый день!
дошел до админки в разделе ЯДРО и решил повторить свой путь, так сказать, чтобы быть на хотябы 80% уверенным, что я все понял. И вот дошел до формирования ссылок.
Вопрос по функции href, проделываю я значит все, обдумываю, но я начинал тупить начиная с этой строчки
$cnt = array_flip(array_keys($tmp));

как я понимаю, мы вытаскиваем все ключи массива tmp и меняем их местами
следующая строчка вообще не понятна
Обрезаем массив от нуля до чего?
объяснитте пожалуйста

Спустя 19 часов, 55 минут, 28 секунд (15.06.2011 - 07:19) twin написал(а):
m4a1fox
Ничего я из сказанного не понял... Ссылки формируются в HTML и нет разницы как. Функцией или руками.

nugle
Это для того, чтобы обрезать незначимые параметры.

Спустя 6 минут, 4 секунды (15.06.2011 - 07:25) nugle написал(а):
twin
там тоже так написано, а что за незначимые параметры?
значимые это page?

Спустя 1 час, 30 минут, 25 секунд (15.06.2011 - 08:55) twin написал(а):
Ну ссылка может быть длинной, а нам допустим нужны только дв первых параметра. И вот чтобы не тащить лишнего:
http://site.ru/main/read/2/0/4/7/4

это и придумано. Обрезает то, чем мы в данный момент не пользуемся. Допустим можно написать так
<?php echo href('rem=second') ?>
и мы получим такую ссыль
http://site.ru/main/second

Спустя 3 часа, 9 минут, 16 секунд (15.06.2011 - 12:04) nugle написал(а):
Вроде понятно. спасибо.

Спустя 27 дней, 22 часа, 34 минуты, 37 секунд (13.07.2011 - 10:39) Гость_Kostya написал(а):
Добрый день!
Прохожу ваши уроки, очень хорошо и доступно написано. Спасибо огромное.
Остановился на функции формирования GET-параметров. Разобрался во всей функции, кроме единственного момента, который здесь уже поднимался, но по ответу так и не понял для чего эти строки и почему пишем именно 'host', что за проверка откуда у нас возьмется такой аргумент?

if($arg[0] == 'host')
return IRB_HOST. $href;

Спустя 8 минут, 14 секунд (13.07.2011 - 10:47) Гость_Kostya написал(а):
Прошу прощения, прочитал еще раз ответ на мой вопрос. Все понял smile.gif

Спустя 1 месяц, 28 дней, 12 часов, 36 минут, 1 секунда (11.09.2011 - 23:23) zeromind написал(а):
$tmp[$param[0]] = $param[1];

в param[0] - page, param[1] - main, что означает выше запись? $tmp а в массиве 'page' => 'main' ?

        $cnt = array_flip(array_keys($tmp)); 
$tmp = array_slice($tmp, 0, $cnt[$param[0]] + 1);

и пожалуйста поясните что происходит во второй строчке, не понимаю(

Спустя 2 минуты, 51 секунда (11.09.2011 - 23:26) Winston написал(а):
Цитата (zeromind @ 11.09.2011 - 23:23)
$tmp[$param[0]] = $param[1];

В массиве $tmp создается ключ с именем, которое хранится в $param[0] и этому ключу присваивается значение $param[1]
Насчет второго, читай.

Спустя 1 месяц, 7 дней, 10 часов, 22 минуты, 38 секунд (19.10.2011 - 09:49) gomer505 написал(а):
Работает - только я разницы не вижу. Да, и словом не зацеплено, что убираем старый include меню в основном индексе и ничего о style.css - хотя бы намек, а то включаешь, а вид сайта совсем другой. Если бы не загрузил исходник не посмотрел, то подумал бы, что так и надо. Просто стараюсь не просто копипастить - поймите правильно, пытаюсь включать серый мозг.

Будем копать.

Спустя 3 дня, 9 часов, 45 минут, 43 секунды (22.10.2011 - 19:34) gomer505 написал(а):
При отключенном ЧПУ не работает. Открывает страничку 404. Не понимаю я почему... Урок "Ядро. Шаг 3."

Спустя 1 час, 43 минуты, 28 секунд (22.10.2011 - 21:18) бошка написал(а):
1. у меня все работает нормально. 404 не вылазиет
2. отклоняешься от курса, а именно массив $GET который по курсу выглядит как
$GET = array(
'page' => 'main',
'rem' => 'read',
'id' => 0,
'num' => 0,
);
у тебя же page идет 3-им по счету в массиве. При нажатии на ссылку "вторая страница" ты в функцию передаешь <?php echo href('page=second'); ?> (/skins/tpl/menu.tpl) поэтому ссыль получается mod=main&rem=read&page=second (/main/read/second)
Разберись как работает функция, порядок следования переменных в массиве.
3. отключил RewriteEngine off в конфиге и .htaccess

Спустя 4 минуты, 33 секунды (22.10.2011 - 21:22) бошка написал(а):
и еще в конфиге константы не забудь поправить IRB_ROOT, IRB_HOST

Спустя 2 месяца, 9 дней, 5 часов, 10 минут, 21 секунда (1.01.2012 - 02:33) Гость_Юрий написал(а):
Подскажите пожалуйста, как доделать языковое меню? С какого бока подойти? Есть вот это
 include './language/'. IRB_LANGUAGE .'.php';
, а как сделать, чтоб переключалось, не смог. Делал типа:
 $GET['lang'] = !empty($_GET['lang']) ? $_GET['lang'] : 'ru';
, но при переключении на другую страницу, переходит на дефолтный язык.

Спустя 4 часа, 57 минут, 48 секунд (1.01.2012 - 07:31) twin написал(а):
Кукис надо юзать. COOKIE.

Спустя 1 час, 6 минут, 49 секунд (1.01.2012 - 08:37) Shturman написал(а):
От Николаю скучно-то как НГ встречать biggrin.gif

Спустя 10 дней, 8 часов, 15 минут, 34 секунды (11.01.2012 - 16:53) Гость_Юрий написал(а):
Здравствуйте!
Когда дошёл до системы регистрации, решил осуществить пару языков, но запутался в директориях. Сижу вот и не понимаю, как лучше... где правильней (чтоб не испортить всей гармонии) осуществить закукисанную языковую переменную_ Ведь нужно, чтоб переменная инклюдилась перед конфигурационным файлом... подскажите пожалуйста как лучше.

Спустя 7 минут, 38 секунд (11.01.2012 - 17:01) Гость_Юрий написал(а):
Вот меню:
<ul>
<li><a
id="se" href="?sprak=ru"></a></li>
<li><a
id="br" href="?sprak=en"></a></li>
</ul>

Я так понимаю, что его нужно в .tpl преобразовать, затем снять язык в переменную, потом меню в index.tpl, а переменную в config.php причём переменная должна сниматься перед config.php в index.php

Спустя 9 часов, 56 минут, 27 секунд (12.01.2012 - 02:57) Гость_Юрий написал(а):
Проблемы были только в ошибках написания кодов. Но теперь всё на своих местах. В index.php добавил
include ..._ROOT .'modules/lang_controller.php';
define('..._LANGUAGE', $lang);


и языковой код получился таким:
if(isSet($_GET['lang']))
{
$lang = $_GET['lang'];

// register the session and set the cookie
$_SESSION['lang'] = $lang;

setcookie("lang", $lang, time() + (3600 * 24 * 30));
}
else if(isSet($_SESSION['lang']))
{
$lang = $_SESSION['lang'];
}
else if(isSet($_COOKIE['lang']))
{
$lang = $_COOKIE['lang'];
}
else
{
$lang = 'ru';
}

Спустя 5 месяцев, 21 день, 15 часов, 40 минут, 3 секунды (3.07.2012 - 18:37) viaceslav176 написал(а):
Twin можно обратиться к вам с вопросом? Как в рамках ваших уроков реализовать вывод ссылок в циклах в виде чпу чтобы они имели вид http://irbis-team.com/15/8/7 ?
ознакомившись с вашими уроками в рамках одного перехода по ссылке понятно но у меня вывод компонентов меню извлекается из базы.
Вот реализация в таблице cat список элементов меню скажем для верхнего. В таблице data список альбомов и в таблице cat_prir список всех фото. При клике на пункт меню выводится список альбомов с фотографиями а при клике на альбом вывод всех фото данного альбома.
Запрос для верхнего меню:
$rec = mysql_query("SELECT * FROM cat WHERE menu='top'");
while($myrow = mysql_fetch_assoc($rec))
{
echo '<li><a href=" '. href('page=catalog') .'?cat='. $myrow['id'] .'">'.$myrow ['title'].'</a></li>';
}
Запрос на вывод альбомов:
if (isset ($_GET['cat'])) {$cat = $_GET['cat']; }
if (!isset($cat)) {$cat = 1;}
// вывод
$res = mysql_query("SELECT * FROM data WHERE cat='$cat'");
if(mysql_num_rows($res)>0)
while($row=mysql_fetch_assoc($res))
{
$table .= "<div id='cat'><table id='table'><tr>\n<td id='td' colspan='2'>".$row['title']."</td>\n</tr>\n";
$table .= "<tr>\n<td id='td' colspan='2'>\n<a href=view_cat?cat=".$row['id']." title=".$row['mini_img'].">\n<img src=".$row['mini_img']." width='220px' height='164px' /></a>\n</a>\n</td>\n<tr>";
$table .="<tr><td id='td'>...</td><td id='td'>...</td></tr></table></div>";
}
И вывод всех фотографий из альбома:
if (isset($_GET['cat'])) {$cat = $_GET['cat']; }
if (!isset($cat)) {$cat = 1;}
$res = mysql_query("SELECT * FROM cat_prir WHERE cat='$cat'");
if(mysql_num_rows($res)>0)
while($row = mysql_fetch_assoc($res))
{
$table .= "<div id='cat'><table id='table'><tr>\n<td id='td' colspan='2'>".$row['title']."</td>\n</tr>\n";
$table .= "<tr>\n<td id='td' colspan='2'>\n<a href=".$row['img']." title=".$row['title'].">\n<img src=".$row['mini_img']." width='220px' height='164px' /></a>\n</a>\n</td>\n<tr>";
$table .="<tr><td id='td'>...</td><td id='td'>...</td></tr></table></div>";
}
В результате такой реализации получается body/view_cat?cat=1
Понятно что за такую реализацию ссылок руки отрывают по самую майку, пробовал передавать страницу функцией href но тогда не выводятся данные из баз в переменной $row

Спустя 11 часов, 2 секунды (4.07.2012 - 05:37) twin написал(а):
'<a href="'. href('page=catalog', 'cat='. $myrow['id']) .'">'
Просто нужно читать внимательно, а не пытаться сделать что-то методом тыка.

Спустя 3 часа, 49 минут, 41 секунда (4.07.2012 - 09:27) viaceslav176 написал(а):
twin спасибо за ответ, я это сразу увидел и сделал но тогда не передается значение cat='. $myrow['id'])' поле cat находится в таблице каталогов. просто привязка поля cat из таблицы каталогов к id из таблицы пунктов мню. я связку таблиц по урокам небезызвестного Попова делал.

а можно попросить вас посоветовать какой нибудь ресурс на тему как правильно делать связи между таблицами? или хоть в каком направлении искать решение

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

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

Спустя 11 минут, 41 секунда (4.07.2012 - 09:38) twin написал(а):
Судя по представленному коду исправлять то, что есть - себе дороже. Могу посоветовать вот этот ресурс. Правда придется забыть все, чему учил Попов и начать все сначала.


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

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

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

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

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