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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Простой PHP сайт 
V
    Опции темы
SergV
Дата 1.7.2008, 09:11 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


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

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



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

В частности, почемуто не могу через переменную передать индетификатор текстов, для подстановки из языковыз файлов. Тоесть если я прямо указываю типа "echo _HOME", то проблем нет, а если передаю через переменную, то не срабатывает, а вот в масиве всё передаётся нормально.   Единственный вариант, который остаётся, это создать масив, получать переменную, и по ней выбирать  из масива нужный индетификатор, это то что на ум приходит.
Может кто знает в чем проблема с простой переменной?..., пробовал все известные варианты, со скобками и без, с отдельной подстановкой знака "_" и вместе со словом.

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

<?php
define( '_VALID_MOS', 1 );

$title="Home";
$page="home";

if (file_exists($_SERVER['DOCUMENT_ROOT'].'/config.php')) {
require_once( 'config.php' );
}
?>

Где переменные передают данные о странице в файл config.php, который и организует дальнейшую структуру сайта. Всё сделал без повторений кодов, кроме этих страниц. Переменная "$title", это как раз та, что нужна для передачи и подстановки для языковых файлов.
Хотелось бы сделать это одной страницей, но пока из идей, только запись в куки какая страница должна грузиться. Да только у куков свои недостатки, если они отключены, то страница буде всегда главная.
Может кто посоветует, как лучше это сделать, чтобы без лишнего передаваемого кода.

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

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

Хотелось бы также узнать, что не так там, что следует доработать?

Это сообщение отредактировал(а) SergV - 1.7.2008, 09:12
PM   Вверх
Feldmarschall
Дата 1.7.2008, 09:19 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок
****


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

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



Цитата(SergV @  1.7.2008,  09:11 Найти цитируемый пост)
В частности, почемуто не могу через переменную передать индетификатор текстов, для подстановки из языковыз файлов. Тоесть если я прямо указываю типа "echo _HOME", то проблем нет, а если передаю через переменную, то не срабатывает, а вот в масиве всё передаётся нормально.   Единственный вариант, который остаётся, это создать масив, получать переменную, и по ней выбирать  из масива нужный индетификатор, это то что на ум приходит.
Может кто знает в чем проблема с простой переменной?..., пробовал все известные варианты, со скобками и без, с отдельной подстановкой знака "_" и вместе со словом.

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

Цитата(SergV @  1.7.2008,  09:11 Найти цитируемый пост)
Хотелось бы сделать это одной страницей,

Одним скриптом, ты хотел сказать? Если страницы представляют из себя чистый HTML, то можно.
имя файла передавать, разумеется, не в куках, а в адресной строке.
обезопасить его с помощью функции basename() и прочитать этот файл.

Это сообщение отредактировал(а) Feldmarschall - 1.7.2008, 09:27
PM   Вверх
SergV
Дата 1.7.2008, 09:37 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


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

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



Цитата

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

Передовал так:
Код

$title="_HOME";
$title='_HOME';
$title="HOME";
$title=_HOME;

Принимал так:
Код

echo $title;
echo '_'.$title


Цитата

Одним скриптом, ты хотел сказать? Если страницы представляют из себя чистый HTML, то можно.
имя файла передавать, разумеется, не в куках, а в адресной строке.
обезопасить его с помощью функции basename() и прочитать этот файл.

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

<?php
define( '_VALID_MOS', 1 ); // прямой доступ только к этому файлу....


PM   Вверх
Feldmarschall
Дата 1.7.2008, 09:50 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок
****


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

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



Цитата(SergV @  1.7.2008,  09:37 Найти цитируемый пост)
Передовал так:

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

Цитата(SergV @  1.7.2008,  09:37 Найти цитируемый пост)
Написал же, пхп сайт, какой там может быть чистый хтмл код?

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

Цитата(SergV @  1.7.2008,  09:37 Найти цитируемый пост)
Уже только по дному участку приведённого куска кода, должно быть понятно, что остальные файлы пхп.

Нет, непонятно. Чаще всего "страницы" представляют из себя именно HTML. Большую часть содержимого любого сайта составляюет HTML. 
есть понятие "пхп скрипт" и есть понятие "страница сайта". так вот, страниц обычно бывает в десятки раз больше, чем скриптов.
К примеру, вот эту страницу, которую ты сейчас читаешь, показывает один скрипт. И таких страниц на сайте - десятки тысяч.

Определись, что ты называешь своими "страницами".

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


Бывалый
*


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

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



Цитата

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

Я не программист, и выражаюсь так, как приходит на ум в данный момент. 
Я присваиваю этой переменной значение, которое потом берётся из этой переменной в подкрепляемом файле. Всё что мне надо, чтобы в переменной передать значение "_HOME", которое подставится в "<?php echo $title; ?>" также, как если бы я просто написал "<?php echo _HOME; ?>". В языковом файле значение берётся из такой строки - "define( '_HOME', 'Главная' );"
Думаю достаточно ясно написал?

Цитата

Нет, непонятно. Чаще всего "страницы" представляют из себя именно HTML. Большую часть содержимого любого сайта составляюет HTML. 
есть понятие "пхп скрипт" и есть понятие "страница сайта". так вот, страниц обычно бывает в десятки раз больше, чем скриптов.
К примеру, вот эту страницу, которую ты сейчас читаешь, показывает один скрипт. И таких страниц на сайте - десятки тысяч.

Ладно, объясню коротко структуру того что у меня есть.
1. Это файл с кодом который привел в первом посте. Таких файлов несколько, и они отвечают за загрузку нужного контента.
2. Файл конфигурации, который содержит небольшой пхп код, подключающий те или иные файлы, в зависимости от первого пункта, и выбранного языка, а также файл шаблона. 
3. Основной файл содержащий функции меню, сонтента и т.д.. а из него подключаются файлы модулей.
4. PHP файл шаблона, который содержит саму страницу HTML сайта, от куда и вызываются все функции.

Всё что мне надо, это в index.php сделать так, чтобы происходило подключение нужного файла контента, в зависемости от выбранной страницы. Сейчас происходит это через переменную $page, которая подставляется в include в функии отвечающей за вывод контента. 
Код

include($path_direct.'/content/'.$page.'.php');

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

И насколько я понял, то единственный способ, это передавать переменную через адресную строку, а раз так, то как это проще и надёжней реализовать?

Это сообщение отредактировал(а) SergV - 1.7.2008, 10:22
PM   Вверх
IceDragon
Дата 1.7.2008, 10:26 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



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

например - пройти курс на intuit.ru - http://www.intuit.ru/department/pl/plphp/
или читать документацию - http://www.php.net/manual/en/  (или русская версия - http://www.php.net/manual/ru/)
 
PM MAIL   Вверх
slaw
Дата 1.7.2008, 10:26 (ссылка)    | (голосов:3) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Цитата(SergV @  1.7.2008,  09:11 Найти цитируемый пост)
Переменная "$title", это как раз та, что нужна для передачи и подстановки для языковых файлов.Хотелось бы сделать это одной страницей, но пока из идей, только запись в куки какая страница должна грузиться. Да только у куков свои недостатки, если они отключены, то страница буде всегда главная.

используй в самом начале кода
Код

  session_name("name");
  session_start();


и записывай свой идентификатор в
Код

 $_SESSION["title"]

PM MAIL WWW   Вверх
Feldmarschall
Дата 1.7.2008, 10:29 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок
****


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

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



Цитата(SergV @  1.7.2008,  10:18 Найти цитируемый пост)
Думаю достаточно ясно написал?

почти.
что имеется в виду под "прикреплением" файла?
если оператор include, и <?php echo _HOME; ?> работает, а <?php echo $title; ?> - нет, то, скорее всего, ты вызываешь его внутри функции, и проблема связана с областью видимости переменных.

Цитата(SergV @  1.7.2008,  10:18 Найти цитируемый пост)
Всё что мне надо, это в index.php сделать так, чтобы происходило подключение нужного файла контента, в зависимости от выбранной страницы.

а зачем?
PM   Вверх
IceDragon
Дата 1.7.2008, 10:29 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



можно получать параметр через массив $_GET[]

т.е. $page=$_GET['page'];
а страницу вызывать - index.php?page=main

а потом подключать - include $page.'html';

только единственно - надо обезапасить переменную.

Добавлено через 9 минут и 28 секунд
по поводу языка своетую не через define работать - а через массив слов
например файл который мы подключаем - /ru/home.lang.php
<?
$lang['title'] = 'Главная';
$lang['description'] = 'Это главная страничка сайта Васи Пупкина';
?>

и соответственно в коде - 

<?

...
$lang='ru';
include($path.'/'.$lang.'/home.lang.php');
echo $lang['title'];
...
?>

Это сообщение отредактировал(а) IceDragon - 1.7.2008, 10:30
PM MAIL   Вверх
SergV
Дата 1.7.2008, 10:56 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


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

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



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

slaw, мне нужно без куков это сделать, с куками я знаю и так как сделать.

Цитата

почти.
что имеется в виду под "прикреплением" файла?
если оператор include, и <?php echo _HOME; ?> работает, а <?php echo $title; ?> - нет, то, скорее всего, ты вызываешь его внутри функции, и проблема связана с областью видимости переменных.

Проблем с видемостью нет, всё видимо, другие перемненные доступны, как и эта. Просто не хочет переменная приниматься в качестве индетификатора, или как там его. Если я просто пишу <?php echo _HOME; ?>, то перевод подставляется, если _HOME помещаю в переменную и подставляю её так <?php echo $title; ?>, то просто выводится _HOME.

Цитата

Цитата(SergV @  1.7.2008,  10:18 Найти цитируемый пост)
Всё что мне надо, это в index.php сделать так, чтобы происходило подключение нужного файла контента, в зависимости от выбранной страницы.


а зачем? 

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

Цитата

можно получать параметр через массив $_GET[]

т.е. $page=$_GET['page'];
а страницу вызывать - index.php?page=main

а потом подключать - include $page.'html';

Об этом я думал, только мне как раз и не хотелось это делать так, но походу другого варианта нет, если не хочу делать кучу стартовых индексов, даже если там 3 строчки.
PM   Вверх
skyboy
Дата 1.7.2008, 11:06 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


неОпытный
****


Профиль
Группа: Модератор
Сообщений: 9820
Регистрация: 18.5.2006
Где: Днепропетровск

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



Цитата(SergV @  1.7.2008,  09:56 Найти цитируемый пост)
если _HOME помещаю в переменную и подставляю её так <?php echo $title; ?>, то просто выводится _HOME

значит, файл с объявлением _HOME происходит после присвоения переменной $title. или в другой области видимости.
то, что у тебя в title оказывается строка _HOME абсолютно не значит, что в переменную нельзя запихнуть константу, нет. это  значит, что в момент присвоения константа _HOME не определена и вместо того, что ты для _HOME определил через define, черезвычайно услужливый РНР подставляет строку, равную имени константы. и такое происходит только тогда, когда константа не определена.
вот вставь перед присвоением $title следующий код:
Код

$consts= get_defined_constants(true); 
print_r($consts['user']); // список обїявленніх пользователем констант

и посмотри, есть ли там в списке твоя _HOME. готов спорить, что нету.
PM MAIL   Вверх
Feldmarschall
Дата 1.7.2008, 11:10 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок
****


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

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



Цитата(SergV @  1.7.2008,  10:56 Найти цитируемый пост)
На будущее, я пока не знаю, сколько страниц будет

Страниц или скриптов? 
Если страниц, то это вообще от индекса не зависит, их показывают соответствующие скрипты. если скриптов, то откуда их много возьмется? 

Цитата(SergV @  1.7.2008,  10:56 Найти цитируемый пост)
 будет проще, если это будет в одном файле а не в нескольких десятков.

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

Цитата(SergV @  1.7.2008,  10:56 Найти цитируемый пост)
если _HOME помещаю в переменную и подставляю её так <?php echo $title; ?>, то просто выводится _HOME.

о господи. наконец-то написал, в чем проблема. _HOME у тебя - КОНСТАНТА. 
Теперь объясни, зачем ты хочешь записывать имя константы в переменную?

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

Первое правило - язык должен передаваться в адресной строке. 
второе правило - лучше, если это будет не квери стринг (то, что после знака вопроса), а другая часть адреса - каталог или субдомен
ua.site.com/page.php
ru.site.com/page.php
или
site.com/ru/page.php
site.com/ua/page.php

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





PM   Вверх
IceDragon
Дата 1.7.2008, 11:15 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



ну при помощи mod_rewrite можно пользоваться аиртуальной структурой каталогов. 

ИМХО тема топика - это просто один из шагов к той структуре что предложил Feldmarschall, для простого сайта сойдет ) а потом можно и посложнее
PM MAIL   Вверх
skyboy
Дата 1.7.2008, 11:22 (ссылка) |    (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


неОпытный
****


Профиль
Группа: Модератор
Сообщений: 9820
Регистрация: 18.5.2006
Где: Днепропетровск

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



Цитата(skyboy @  1.7.2008,  10:06 Найти цитируемый пост)
и посмотри, есть ли там в списке твоя _HOME. готов спорить, что нету.

впрочем, если присвоение происходит так:
Цитата(SergV @  1.7.2008,  08:37 Найти цитируемый пост)
$title="_HOME";
$title='_HOME';
$title="HOME";

а не как должно быть:
Цитата(SergV @  1.7.2008,  08:37 Найти цитируемый пост)
$title=_HOME;

то, конечно, может статься, что константа в нужном месте объявлена. а ты вместо константы пихаешь в переменную текстовое значение "HOME"... 
Цитата(SergV @  1.7.2008,  09:18 Найти цитируемый пост)
Я не программист, и выражаюсь так, как приходит на ум в данный момент. 

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

Добавлено через 28 секунд
Цитата(IceDragon @  1.7.2008,  10:15 Найти цитируемый пост)
ну при помощи mod_rewrite можно пользоваться аиртуальной структурой каталогов. 

эээ... может, с константами бы сначала разобраться?
PM MAIL   Вверх
Feldmarschall
Дата 1.7.2008, 11:23 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок
****


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

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



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

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

Новичкам:

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

Важно:

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

Внимание:

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

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

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


 




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


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

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