Написание движка на PHP
У меня появилась одна задача и мне её обязательно надо выполнить.
Я создаю портал. Портал планируется крупный, на нескольких субдоменах.
Короче, пробовал я пробовал разные CSM, ничего подходящего не нашел. То одно глючит, то другое, ну короче решил я свою CMS написать.
Особо загонного мне ничего не требуется.
Вот конкретно те вещи, которые требуют вашей помощи:
- Написание раздела статей;
- Написание раздела Download;
Всё остальное я сам смогу сделать, но вот в этих вещах мне требуется некоторая помощь. Поэтому, если Вы не против, я периодически буду писать в этой теме вопросы.
Начну я с раздела статей:
Как писать данные в текстовый файл и выводить сообщения из него - я знаю (гостевуху как-то писал, даже оч неплохо получилось :) ).
Вот непойму я одну фишку - как мне зделать возможность создания категорий и подкатегорий???
Буду ОЧЕНЬ благодарен за Ваши ответы!!! :)
Выбирается всё это рекурсивно, т.е. в функцию по ссылке передаётся массив, в который выбирается все "детки" раздела.
И так каждый раздел.
В результате получается очень ветвистое дерево :)
Пример такой рекурсии: http://rio.kbtour.ru/c_list.htm
$cat[firm1][series2] = goods1
и так далее. Думаю общий смысл ясен. Если не поймёшь, то реально, не пожалей денег и прочти эту книгу...
Зачем выдумывать велосипед (тут - функции для сортирвки, выборки поиска по текстовым файлам), когда есть MySQL. Выучить его - день времени. А в будущем - экономия в сотне часов.
И еще. Если надумает кто сказать, что MySQL стоит-де не на всех серверах, тем отвечу, что серьезные порталы на бесплатных хостингах не вешают, а на платных MySQL чаще всего стоит по умолчанию (если речь идет о Юникс-сервере).
Я его, пока CMS делаю, "заморозил". Насчёт MySQL - у меня их можно хоть 9999 делать! :)
Ладнинько, почитаю...
Вот только домен я отдельно регистрировал (поздно хостера нашёл, он их бесплатно раздавал при заказе хостинга), поэтому придётся быстрее шевелиться мне, а то время идёт попусту... Ну это так - лирическое отступление.
В общем спасибо всем отозвавшимся!
Быду пока мускул изучать! :)
Другое дело - релятивность и другие достоинства, присущие БД. С разбегу можно потратить уйму времени на попытки написания файловой конструкции и ворочать массивы... Но, IMHO, зачем, если БД всё же существуют?
Я, кстати, году в 2000м, кажется, что-то такое пытался нарисовать на Perl'е с использованием огромного количества файлов с данными. Ясный пень, ничего не получилось. Потому что не знал ни Perl'а, ни вообще теории баз данных. :)
Эта книга - хлам. Она поверхностна. Там даже перечень функций и языковых конструкций языка "кривой SQL а-ля MySQL" неполная. Для начинающего она тоже не пойдет, т.к. написана не лучшим образом. ИМХО лучше будет почитать "Создание приложений на PHP+MySQL" - найти ее легко и информации лишней для начинающих там нет.
Если у статьи есть Автор, Дата, Комментарии юзеров, рейтинг или фотки.. То без бд это будет очень тяжело.
Я тоже читал Дюбуа и остался недоволен... Хотя наверное это от того что я недолюбливаю саму MySQL
Вопрос исчерпан
Пишу на PHP+MySQL
И вот появился вопросик:
Короче, для публикации статей я использую ББ - код (может ещё визуальный редактор добавлю).
Собственно вопрос про парсинг ББ-кода при выводе статьи. :)
Простые теги типо B, I, U, quote и т.п. я понятно, как заменять на HTML-эквиваленты.
Но вот например, если написано:
|quote="А.С. Пушкин"]
Текст цитаты
|/quote]
- это уже сложнее. :)
Необходимо выделить из тега quote имя цитируемого человека.
Пожалуйста подскажите - как это сделать (чует душа моя, что нужно использовать регулярные выражения, но немогу пока въехать (: ).
За ранее благодарен!!! ;)
1. Качаешь любой форум и смотришь как там реализованно.
2. Пользуешься поиском на форуме и читаешь ответы, т.к. тема поднималась уже не один десяток раз.
Могу и ошибаться
Насчёт \[quote]:
// далее читай мануал. под \\1 будет ник, под \\2 текст цитирования
# элементарно. написал на скорую руку, chr коды символов не помню(((
По поводу замены:
1. Качаешь любой форум и смотришь как там реализованно.
Смотрел phpBB - черт ногу сломит :) . Так и не разобрался.
2. Пользуешься поиском на форуме и читаешь ответы, т.к. тема поднималась уже не один десяток раз.
И всегда отвечали "Пользуйся поиском!" :)
Шутка... Поищу.
[QUOTE=UAS]
Не сочтите, но почему-то у меня такое чувство что в итоге закончится все тем, что человек попросит написать все за него!
[/QUOTE]
Ну почему же всё!??? Я что прошу весь движок за себя написать!???
Это лишь одна мелочь, которая поможет мне разобраться со всеми подобными проблемами и не задавать подобных вопросов более (BB-тегов ведь много :) ).
ЗЫ. Спасибо за код.
2. Пользуешься поиском на форуме и читаешь ответы, т.к. тема поднималась уже не один десяток раз.
Поискал. Даже по простому запросу bb код в подфоруме Web программирование ответ "Извините, нет совпадений. Попробуйте указать другие темы."
Видать всетаки не поднималась тема, или Вы меня не так поняли...
Могу и ошибаться
Насчёт \
// далее читай мануал. под \\1 будет ник, под \\2 текст цитирования
# элементарно. написал на скорую руку, chr коды символов не помню(((
Блин, а я кажется въезжать начал! :) Очень похоже на то как псевдостатику через mod_rewrite делают! :)
Я просто с регулярными выражениями ещё почти не работал.
Ты издеваешься или как???
У меня ушло ровно 11сек. 7 на открытие папки с исходником phpBB, 4 сек на поиск файли с BB-кодами... includes/bbcode.php
У меня ушло ровно 11сек. 7 на открытие папки с исходником phpBB, 4 сек на поиск файли с BB-кодами... includes/bbcode.php
:)))
Ну я нимагу!!!
Ну конечно же я нашел файл!!! Я просто с кодом этого файла не разобрался (хотя сейчас потихоньку врубаться начинаю).
Просто мне нужно где-нибудь почитать про регулярные выражения в ПХП, где это подробно написано.
Вы уж меня совсем за идиота не держите! :) Лучше посоветуйте мануал - где про регулярные выражения подробно изложено.
Насчёт цитирования - все работает.
Только объясните пожалуйста, какую роль в выражении играют ~ и ~isU??? Нигде не нашёл о них ни слова. Всё остальное понятно.
Читаем:
http://ru.php.net/manual/ru/reference.pcre.pattern.syntax.php
http://ru.php.net/manual/ru/reference.pcre.pattern.modifiers.php
Так же не забываем читать комментарии к статьям=)))
Я думаю, если появятся ещё вопросы, я смогу их сдесь задать?
Начать с поиска готовых решений. Как ты думаешь сколько готовых движков сейчас в инете? Неужели ты все просмотрел и ни один тебе не подошел?
Сначала разработай блок-схему того, чего ты хочешь получить в итоге (какие разделы, какая структура сайта, какие блоки тебе нужны, нужна ли регистрация пользователей или нет и т.д.).
Потом приступай к отработке каждого раздела более чательно:
раздел "статьи" (что должен будет юзер видеть читая статью, какие доп. инфу и т.д.) на базе такого анализа придумай имя табличке БД и её структуру.
Затем разработай скрипт публикации статьи в админке параллельно со скриптом просмотра юзером на сайте.
Ну и т.д.
Вообще в 2-х словах конечно трудно объяснить.
Да и сразу полностью готовый движок не напишешь. Всеравно потом баги вылазить начнут. Скоро это и меня постигнет... Когда свой допишу. :)
А вот у меня опять по регуляркам вопрос:
Почему конструкция:
$view_text = preg_replace("~\[HTMLcode\](.+)\[/HTMLcode\]~isU", str_replace("{tag_br}", "символ", "\\1"), $view_text);
не работает???
Поидее ведь все вхождения {tag_br} в строке \\1, выщемленной из $view_text с помощью preg_replace, должны заменяться на строку "символ"!?!?
2Fobos
не должно там ничо заменятся.
сначала str_replace() выполняется потом ужо прег_реп
\\1 лишь сигнализируют како образца строку выдать
сделай свою ф-ию
{
for ($i=0; $i <= substr_count($view_text, '[HTMLcode]')+1; $i++)
{
$buffer="";
preg_match("~\[HTMLcode\](.*)\[/HTMLcode\]~isU", $view_text, $array_str);
$buffer = str_replace("[br]", "\n" , $array_str[1]);
$buffer = str_replace("<", "<" , $buffer);
$buffer = str_replace(">", ">" , $buffer);
$buffer = str_replace("&one_quote;", "'" , $buffer);
$buffer = str_replace(""", '"', $buffer);
$buffer = str_replace(" ", ' ', $buffer);
$view_text = preg_replace("~\[HTMLcode\](.+)\[/HTMLcode\]~isU", $buffer, $view_text, 1);
}
}
+1. интересно что у народа получается :)
Посмотрите, конечно. :) (Только ломать не надо :) )
Вот ещё хочу подсветку синтаксиса в статьях для разных языков зделать (ну простенько, хотябы не полно, пока).
Вот кусок для Delphi кода:
$buffer = eregi_replace("uses", "<b>uses</b>", $buffer);
$buffer = eregi_replace("type", "<b>type</b>", $buffer);
$buffer = eregi_replace("class", "<b>class</b>", $buffer);
$buffer = eregi_replace("private", "<b>private</b>", $buffer);
Но как-то неправильно то, что например если переменная или что-то иное в коде будет называться classicalVariable будет выделяться жирным кусок переменной: classicalVariable.
Нужно каието альтернативы искать...
Воотще я по правильному пути иду?