Warning: Cannot use a scalar value as an array in /home/admin/public_html/forum/include/fm.class.php on line 757

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/include/fm.class.php on line 770

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/topic.php on line 737
Форумы портала PHP.SU :: Передать переменную в скрипт

 PHP.SU

Программирование на PHP, MySQL и другие веб-технологии
PHP.SU Портал     На главную страницу форума Главная     Помощь Помощь     Поиск Поиск     Поиск Яндекс Поиск Яндекс     Вакансии  Пользователи Пользователи


 Страниц (1): [1]   

> Описание: Помогите разобраться, как передать объявленную позже переменную в скрипт
Евгений 777
Отправлено: 13 Апреля, 2011 - 22:32:44
Post Id



Гость


Покинул форум
Сообщений всего: 81
Дата рег-ции: Июль 2010  
Откуда: Мурманск


Помог: 0 раз(а)




Всем привет. Проблемка возникла. Есть главная страница, в которую рекурятся шаблоны (хедер, контент и футер). В хедере надо указать название страницы. Названия страниц создаются в своих файлах. Т.е например в главной странице есть обработчик и он проверяет какая страница была запрошена и рекурит соответствующий обработчик. И внутри этого обработчика указано название страницы. Надо как то это название передать как бы вверх скрипта, т.е сначала на главной странице реурится хедер, где надо вывести это название, а само название уже рекурится позже и получается что в то время когда рекурится хедер, переменной с названием страницы ещё нет, она создаётся позже. Сможет кто помочь? Можно конечно указать перед рекуром хедера все названия страниц (страницы берутся не из базы, т.е я знаю их количество) и в условии написать что то типа if($page== 1) {$title= 'Главная';} if($page== 2) {$title= 'Не главная';}. У меня примерно такие условия и прописаны в коде главной страницы, но там в зависимости от выбранной страницы рекурятся соответствующие контроллеры. Получится что у меня одно и тоже условие будет написано 2 раза, это уже "костыли" по моему. А если спустить рекур хедера после этого условия (когда уже $title определена), то конечно вся страница разъезжается.


-----
Написать код не проблема. Написать правильный код- это наука.
 
 Top
OrmaJever Модератор
Отправлено: 13 Апреля, 2011 - 23:21:34
Post Id



Активный участник


Покинул форум
Сообщений всего: 7540
Дата рег-ции: Янв. 2010  
Откуда: Чернигов


Помог: 299 раз(а)




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

PHP:
скопировать код в буфер обмена
  1. $arr = array(1=>'Главная', 2=>'страница 2', 3=>'страница 3');
  2. $title = isset($arr[$page]) ? $arr[$page] : $arr[1];

(Отредактировано автором: 13 Апреля, 2011 - 23:21:57)



-----
Если вы хотя бы 3-4 раза не решите всё выкинуть и начать заново - вы явно что-то делаете не так.
 
 Top
DeepVarvar Супермодератор
Отправлено: 13 Апреля, 2011 - 23:30:46
Post Id



Активный участник


Покинул форум
Сообщений всего: 10377
Дата рег-ции: Дек. 2008  
Откуда: Альфа Центавра


Помог: 353 раз(а)




Чтобы не было таких проблем, пора бы уже логику от хтмл отделять.
Например сделать можно так:
Файлы в корне (index.php, news.php, contacts.php и т.д.)
В нем (в каждом из них) обьявлена константа (её значение = имя файла)
для файла news.php:

подключается ядро.
В ядре БД-коннект, сессии, куки,
там же идет подключение модуля для конкретной страницы:
PHP:
скопировать код в буфер обмена
  1. require_once("modules/module.".INDEX.".php");

Как видите без всяких if ... else все одной строчкой.
после того как отработает модуль страницы (сделает выборку из БД, соберет массивы объявит титлы кейвордс дескрипшн и пр..)
Закрываем коннект с базой.
Отправляем заголовки (экспириенс, нокеш, контенттайп, кодировка)
Далее require_once("templates/page.php");
В этой page.php (упрощаю до минимума):
CODE (html):
скопировать код в буфер обмена
  1. <html>
  2. <head>
  3. <title><?=$title?></title>
  4. </head>
  5. <body>
  6. <header>типа шапка сменюшками и пр..</header>
  7. <? require_once("templates/".INDEX.".php"); ?>
  8. <footer>типа футер с копирайтами</footer>
  9. </body>
  10. </html>

Ну а в шаблоне контента для страницы просто выводим давно уже готовые переменные.
template/news.php:
CODE (html):
скопировать код в буфер обмена
  1. <div id="news">
  2. <? foreach ($news as $new) { ?>
  3. <div><?=$new['newstitle']?></div>
  4. <div><?=$new['newstext']?></div>
  5. <? } ?>
  6. </div>
 
 Top
Евгений 777
Отправлено: 13 Апреля, 2011 - 23:46:35
Post Id



Гость


Покинул форум
Сообщений всего: 81
Дата рег-ции: Июль 2010  
Откуда: Мурманск


Помог: 0 раз(а)




что то я из этих кусков ода не понял что к чему. У меня вроде и так логика отделена. У меня есть контроллеры, есть модели и есть шаблоны. Просто главный шаблон рекурится ещё ДО того как определяется запрошенная страница и рекурится её котроллер, модель и шаблон. Поэтому даже если я создаю константу в каком либо контроллере, потом запрашиваю эту страницу, вылетает нотайс, что константа ещё не объявлена. Ведь прежде, чем написать require_once для подключаемого файла, нужно узнать какой именно файл был запрошен. Для этого у меня и сделаны if-else. Возможно я что то не совсем правильно сделал. У меня один шаблон с хедером для всех страниц, он реурится в самом начале главной страницы (главного контроллера), а все остальные подключаемые шаблоны просто встраиваются в этот шаблон с хедером, в div контент. Даже если изменю эти шаблоны, сделаю для каждого шаблона свой (одинаковый) хедер, хотя это по моему идиотизм Улыбка , то всё равно мне же надо знать какая страница была запрошена, какой контроллер мне подключать. Опять же без if-else никак по моему. Можете разъяснить?

(Отредактировано автором: 14 Апреля, 2011 - 00:23:50)



-----
Написать код не проблема. Написать правильный код- это наука.
 
 Top
OrmaJever Модератор
Отправлено: 14 Апреля, 2011 - 00:46:20
Post Id



Активный участник


Покинул форум
Сообщений всего: 7540
Дата рег-ции: Янв. 2010  
Откуда: Чернигов


Помог: 299 раз(а)




Евгений 777 пишет:
росто главный шаблон рекурится ещё ДО того как

Зачем?
PHP:
скопировать код в буфер обмена
  1.  
  2. <?PHP
  3. // здесь мы щитаем
  4. // выщитываем
  5. // обрабатываем
  6. // и делаем все дела в php
  7. ?>
  8. <html>
  9. <head>
  10. <? require('head.php') ?>
  11. </head>
  12. <body>
  13. <? require('body') ?>
  14. </body>
  15. </html>

html код не куда не денется.


-----
Если вы хотя бы 3-4 раза не решите всё выкинуть и начать заново - вы явно что-то делаете не так.
 
 Top
Евгений 777
Отправлено: 14 Апреля, 2011 - 09:22:52
Post Id



Гость


Покинул форум
Сообщений всего: 81
Дата рег-ции: Июль 2010  
Откуда: Мурманск


Помог: 0 раз(а)




OrmaJever пишет:
html код не куда не денется.

У меня для вывода опеределённой страницы есть контроллер, модель и шаблон. Модель и шаблон рекурятся в контроллер. В главной же странице как бы главный контроллер, который смотрит какая страница была запрошена и исходя из этого запускает тот или иной контроллер, тот в свою очередь запускает свою модель и шаблон. Поэтому, если подключать какой либо контроллер ещё ДО html разметки в главной странице, то сначала запустится контроллер и выведет шаблон, а только потом появится каркас сайта. Фигня получается. С этим я думаю разберусь. А вот по поводу того, что писали выше
PHP:
скопировать код в буфер обмена
  1. require_once("modules/module.".INDEX.".php");

надо же знать какая страница была запрошена, какой контроллер надо запускать. Как тут можно обойтись без if-else? Я никак не допру.


-----
Написать код не проблема. Написать правильный код- это наука.
 
 Top
Страниц (1): [1]
Сейчас эту тему просматривают: 0 (гостей: 0, зарегистрированных: 0)
« Программирование на PHP »


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



Powered by PHP  Powered By MySQL  Powered by Nginx  Valid CSS  RSS

 
Powered by ExBB FM 1.0 RC1. InvisionExBB