| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > PHP: Общие вопросы > Простой PHP сайт |
| Автор: SergV 1.7.2008, 09:11 | ||
| Привет! Тут начал писать простой сайт на пхп с ява скриптами, решил его сделать какбы полудинамичным. В общем сделал чтото вроде заготовки, всё работает как задумал, но есть некоторые проблемки. В частности, почемуто не могу через переменную передать индетификатор текстов, для подстановки из языковыз файлов. Тоесть если я прямо указываю типа "echo _HOME", то проблем нет, а если передаю через переменную, то не срабатывает, а вот в масиве всё передаётся нормально. Единственный вариант, который остаётся, это создать масив, получать переменную, и по ней выбирать из масива нужный индетификатор, это то что на ум приходит. Может кто знает в чем проблема с простой переменной?..., пробовал все известные варианты, со скобками и без, с отдельной подстановкой знака "_" и вместе со словом. Также меня интересует, как лучше организовать страничную структуру. Сейчас я сделал типа как в хтмл, каждая страница свой файл, с той лишь разницей, что в индексах всего пару строк такой структуры.
Где переменные передают данные о странице в файл config.php, который и организует дальнейшую структуру сайта. Всё сделал без повторений кодов, кроме этих страниц. Переменная "$title", это как раз та, что нужна для передачи и подстановки для языковых файлов. Хотелось бы сделать это одной страницей, но пока из идей, только запись в куки какая страница должна грузиться. Да только у куков свои недостатки, если они отключены, то страница буде всегда главная. Может кто посоветует, как лучше это сделать, чтобы без лишнего передаваемого кода. Сайт делаю в качестве главного сайта, нужно всего с десяток страниц, база не нужна, так как контент меняться если и будет, то очень редко, другими словами постоянный контент. Динамичным будет лишь информация с сайтов поддоменов, которая и будет от туда браться. Сам сайт http://www.webcolor.eu, пока в стадии разработки. Скрипт закладок взял готовый, но он мне не нравится, внути закладок нельзя использовать теги заголовков, они просто не отображаются. Календарь тоже в стадии написания, как и другое. Хотелось бы также узнать, что не так там, что следует доработать? |
| Автор: SergV 1.7.2008, 09:37 | ||||||||||
Передовал так:
Принимал так:
Написал же, пхп сайт, какой там может быть чистый хтмл код? Уже только по дному участку приведённого куска кода, должно быть понятно, что остальные файлы пхп.
|
| Автор: Feldmarschall 1.7.2008, 09:50 | ||
Никакой "передачи" в этом коде нет. Все, что там написано, называется "присвоение переменной $title различных значений". Если ты пояснишь, что имеется ввиду под словом "передача", помочь можно будет более конкретно. Пишешь ты очень невнятно. поэтому не стоит апеллировать к своим писаниям.
Нет, непонятно. Чаще всего "страницы" представляют из себя именно HTML. Большую часть содержимого любого сайта составляюет HTML. есть понятие "пхп скрипт" и есть понятие "страница сайта". так вот, страниц обычно бывает в десятки раз больше, чем скриптов. К примеру, вот эту страницу, которую ты сейчас читаешь, показывает один скрипт. И таких страниц на сайте - десятки тысяч. Определись, что ты называешь своими "страницами". |
| Автор: SergV 1.7.2008, 10:18 | ||||||
Я не программист, и выражаюсь так, как приходит на ум в данный момент. Я присваиваю этой переменной значение, которое потом берётся из этой переменной в подкрепляемом файле. Всё что мне надо, чтобы в переменной передать значение "_HOME", которое подставится в "<?php echo $title; ?>" также, как если бы я просто написал "<?php echo _HOME; ?>". В языковом файле значение берётся из такой строки - "define( '_HOME', 'Главная' );" Думаю достаточно ясно написал?
Ладно, объясню коротко структуру того что у меня есть. 1. Это файл с кодом который привел в первом посте. Таких файлов несколько, и они отвечают за загрузку нужного контента. 2. Файл конфигурации, который содержит небольшой пхп код, подключающий те или иные файлы, в зависимости от первого пункта, и выбранного языка, а также файл шаблона. 3. Основной файл содержащий функции меню, сонтента и т.д.. а из него подключаются файлы модулей. 4. PHP файл шаблона, который содержит саму страницу HTML сайта, от куда и вызываются все функции. Всё что мне надо, это в index.php сделать так, чтобы происходило подключение нужного файла контента, в зависемости от выбранной страницы. Сейчас происходит это через переменную $page, которая подставляется в include в функии отвечающей за вывод контента.
Для каждой страницы эта переменная содержит соответственно своё значение. Вот мне и надо, както передать это значение при переходе на другую страницу, но чтобы всё это было с одним index.php. И насколько я понял, то единственный способ, это передавать переменную через адресную строку, а раз так, то как это проще и надёжней реализовать? |
| Автор: IceDragon 1.7.2008, 10:26 |
| SergV, Извиняюсь за суждение Для того чтобы написать даже простенький сайт - советую почитать основы, и эксперементировать например - пройти курс на intuit.ru - http://www.intuit.ru/department/pl/plphp/ или читать документацию - http://www.php.net/manual/en/ (или русская версия - http://www.php.net/manual/ru/) |
| Автор: slaw 1.7.2008, 10:26 | ||||||
используй в самом начале кода
и записывай свой идентификатор в
|
| Автор: Feldmarschall 1.7.2008, 10:29 | ||
почти. что имеется в виду под "прикреплением" файла? если оператор include, и <?php echo _HOME; ?> работает, а <?php echo $title; ?> - нет, то, скорее всего, ты вызываешь его внутри функции, и проблема связана с областью видимости переменных.
а зачем? |
| Автор: IceDragon 1.7.2008, 10:29 |
| можно получать параметр через массив $_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']; ... ?> |
| Автор: SergV 1.7.2008, 10:56 | ||||||
| IceDragon, знаю что надо изучать, и постепенно изучаю, но в основном на готовых кодах, кода что нибуть править приходится. На детальное изучение нет времени, да и нужен мне пхп только для определённых целей, а сайт решил сделать, так как не хочу использовать готовы CMS из за нескольких страниц. slaw, мне нужно без куков это сделать, с куками я знаю и так как сделать.
Проблем с видемостью нет, всё видимо, другие перемненные доступны, как и эта. Просто не хочет переменная приниматься в качестве индетификатора, или как там его. Если я просто пишу <?php echo _HOME; ?>, то перевод подставляется, если _HOME помещаю в переменную и подставляю её так <?php echo $title; ?>, то просто выводится _HOME.
На будущее, я пока не знаю, сколько страниц будет, и будет проще, если это будет в одном файле а не в нескольких десятков.
Об этом я думал, только мне как раз и не хотелось это делать так, но походу другого варианта нет, если не хочу делать кучу стартовых индексов, даже если там 3 строчки. |
| Автор: skyboy 1.7.2008, 11:06 | ||||
значит, файл с объявлением _HOME происходит после присвоения переменной $title. или в другой области видимости. то, что у тебя в title оказывается строка _HOME абсолютно не значит, что в переменную нельзя запихнуть константу, нет. это значит, что в момент присвоения константа _HOME не определена и вместо того, что ты для _HOME определил через define, черезвычайно услужливый РНР подставляет строку, равную имени константы. и такое происходит только тогда, когда константа не определена. вот вставь перед присвоением $title следующий код:
и посмотри, есть ли там в списке твоя _HOME. готов спорить, что нету. |
| Автор: Feldmarschall 1.7.2008, 11:10 | ||||
Страниц или скриптов? Если страниц, то это вообще от индекса не зависит, их показывают соответствующие скрипты. если скриптов, то откуда их много возьмется?
чем проще? что за странная идея запихнуть все в один файл? у тебя на диске в компьютере все файлы лежат в одном каталоге? вызываются одной программой? объясни - в чем удобство, когда каждый скрипт не вызывается отдельно, а все толкаются в индексе и надо писать отдельный код, который будет их разбирать?
о господи. наконец-то написал, в чем проблема. _HOME у тебя - КОНСТАНТА. Теперь объясни, зачем ты хочешь записывать имя константы в переменную? Тебе язык, что ли, передавать надо? тогда при чем здесь подключение вообще? Вообще, если бы ты с самого начала писал, какую задачу решаешь, а не пытался изложить про качеств идентификаторов, то и ответ получил гораздо раньше. почему нельзя сразу писать реальную задачу, а не свои потуги по её решению? Первое правило - язык должен передаваться в адресной строке. второе правило - лучше, если это будет не квери стринг (то, что после знака вопроса), а другая часть адреса - каталог или субдомен ua.site.com/page.php ru.site.com/page.php или site.com/ru/page.php site.com/ua/page.php только если такой возможности нету - тогда передавать в квери стринг. но при этом надо помнить, что ижентификатор языка надо добавлять ко всем без исключения ссылкам на сайте. ведь иначе он тут же потеряется. |
| Автор: IceDragon 1.7.2008, 11:15 |
| ну при помощи mod_rewrite можно пользоваться аиртуальной структурой каталогов. ИМХО тема топика - это просто один из шагов к той структуре что предложил Feldmarschall, для простого сайта сойдет ) а потом можно и посложнее |
| Автор: skyboy 1.7.2008, 11:22 | ||||||
впрочем, если присвоение происходит так: а не как должно быть: то, конечно, может статься, что константа в нужном месте объявлена. а ты вместо константы пихаешь в переменную текстовое значение "HOME"...
если не уверен, что тебя поймут однозначно - лучше перефразировать. или здравый смысл, логичность и последовательность - качество мышления сугубо программистов? Добавлено через 28 секунд
эээ... может, с константами бы сначала разобраться? |
| Автор: Feldmarschall 1.7.2008, 11:23 |
| тема топика - сначала понять, что автору надо. сначала у него передача (куда-то, неизвестно куда) переменных. потом присвоение имени константы переменной и потом обращение к этой константе из переменной. на самом деле, вроде бы, передавать язык надо между вызовами скрипта, но это толко мои догадки. SergV, у тебя один файл с языками, что ли? как вообще структура реализована? не проще сделать для каждого языка свой файл, и в переменную писать только его имя? |
| Автор: SergV 1.7.2008, 11:44 | ||||||||
| skyboy, мне выдало это - Array ( [_VALID_MOS] => 1 ) у меня сначало идёт присвоение переменных, потом подключается языковой файл, а потом файл в котором функция вызова контента, потом файл шаблона, откуда и вызывается функция.
Файлов index.php с таким содержимым
Да не пишу я кучу одинаковых скриптов, наоборот, хочу чтобы в этой индекс странице был один скрипт, который передавал бы информацию о вызове нужного файла с текстом, и всё. Если бы я хотел сделать кучу одинаковых файлов с одинаковыми скриптами, я не стал бы их разбивать, а просто бы индекс файл объединил бы с конфиг файлом, а то и вообще все скрипты в индекс.пхп запихал бы, и наплодил бы их столько, сколько страниц. Я может и плохо знаю пхп, но не стану дублировать скрипты.
Мне от куда знать, константа это или что, у меня мозги не резиновые, всё не запомнить. Константу я помещаю в переменную, так как мне нужно их файла индексюпхп передать в файл с функциями, к какой странице это относится, и вывести нужное название. Функция одна для контента, и вывести заголовок я могу только один, а значить через переменную из индекс.пхп. Зачем мне язык передовать через адресную строку язык, или делать разные языки на разных субдоменах, для сайта в десяток страниц? Всё прекрасно работает с языком через куки, всё кроме этой переменной. Ладно с языком и прочим, сделаю через масив в том же переменной контента, и буду вызывать через полученную переменную. |
| Автор: skyboy 1.7.2008, 11:53 | ||||||
т.е. сначала запихиваешь константы по переменным, а потом уже только эти константы объявляешь? да-да, я помню - ты не программист. но, черт побери, элементарная логика где? и, в любом случае, так ты не записываешь в переменную title значение константы Home. так ты записываешь в переменную строку "Home". не более и не менее. если тебе это и надо - одно дело(только тогда зачем было тема создана?). если же тебе надо было записать в переменную значение константы с именем "Home", то мне непонятно, с чего это ты именно так записал?
файлы с РНР-кодом у нас или у тебя? или тебе даже посмотреть сложно? Добавлено через 42 секунды значит, все-таки
|
| Автор: SergV 1.7.2008, 12:01 | ||||||||||||||
Блин, а что у мнея в топике этажами выше этого не написано?
Передовал я так тоже, и результат пустая строка.
У меня отдельные языковые файлы, и структура простая, написал выше уже, но повторюсь подробней. 1. Первый файл index.php имеет пару переменных и подключает файл конфигурации, отвечающий за остальные действия. Только к этому файлу возможен прямой доступ. 2. Второй файл конфигурации имеет глобальные переменные, присвоение значений некоторым переменным, требующимся в остальных файлах. Потом идёт проверка SSL, потом проверка куков, получение данных или создание если первый вход на сайт. Потом в зависимости от полученных данных из куков, или по дефолту подключаю нужный языковой файл. Потом подключаю файл с функциями и файл шаблона страницы. 3. Файлы языков отдельные, файл функций содержит основные функции, и подключает к себе из функци дополнительные файлы, такие как модули к примеру календаря, файлы текстов и др. Всё на этом, это основная конструкция, проще не знаю. Добавлено @ 12:10 skyboy, блин, сколько можно писать, да присваивал я и так
пустая строка выходит. А тему я создал, потому что, это не единственные задачи, которые мне надо решить, а значить нет смысла плодить кучу отдельных тем. К тому я не создаю тем, на вопросы, на которые нашёл ответ по форуму. Основной смысл темы, это попытаться найти решение вариантов реализации, и устранение ошибок и недоработок. Мне конечно хочется самому во всём разобраться, но только это слишком длительное занятие, особенно когда нет времени. |
| Автор: SergV 1.7.2008, 13:51 |
| Всё, разобрался сам с константами, теперь всё передаётся как надо. |
| Автор: Лиходей 5.7.2008, 09:44 | ||||||
| Можно сделать так: index.php - пусковой shapka.php - "верхушка" сайта menu.php - меню data.php - загружает(показывает) сайт выбранный в меню index.php --------------------------
menu.php ---------------------------
data.php ---------------------------
|
| Автор: Feldmarschall 5.7.2008, 09:46 |
| офигенная система. если статей будет сто, то скрипт получится большим и красивым. а, главное, очень интеллектуальным =) |
| Автор: SergV 26.8.2008, 19:00 |
| Лиходей, спасибо за идею, как будет время попробую. Feldmarschall, статей 100 не будет, максимум с десяток, и всё будет в норму. Да и к тому же, это всего лишь тест, что получится так сказать. |
| Автор: lukas 26.8.2008, 20:43 | ||||
| Сделай так... В своих языковых файлах объяви что то типа массива...
и где нибудь сделай функцию, что-то вроде...
Ну а в коде просто будешь вызывать эту функцию с нужными сообщениям... |