А это клавиатура, с помощью которой я творю...
http://kurepin.ru/php/back4/
Rambler's Top100
Пишем на PHP: BackOffice (продолжение-4)

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

А все почему? А все потому, что в жизни все всегда перевернуто с ног на голову: пиво пить -- почки бунтуют, водку -- печень. В телевизоре, после закрытия ТВ-6, все каналы сразу превратились в однояйцовых близнецов и вещают только о том, какой у нас классный президент и о том, что за время его правления мы все стали жить еще лучше.

Вот и приходится -- пить чай, читать новости в Сети. Пока еще импорт зеленого чая не прикрыли, а модем не отняли.

Значит надо успеть закончить курс PHP, пока у меня не отобрали лицензию на доступ в Сеть из-за всяких нелицеприятных проектов, вроде voices.ru.

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

Как мы это сделаем?

Для начала уберем все упоминания рубрики в функции добавления текста (у нас там номер рубрики якобы сразу добавлялся в таблицу текстов), а заодно подправим опечатки и ошибки, если попадутся.

Теперь функция in_text_add выглядит вот так:


Ошибок не заметил.

Эта функция добавляет текст на диск, в директорию /data/ и в таблицу tbl_text добавляется название текста.

Теперь давайте разбираться с рубриками...

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

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

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

Итак. Надо снабдить функцию добавления нового текста привязкой текста к рубрике.

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

Она маленькая, мы добавим ее в класс in.


Как видите, функция принимает в качестве параметров: id рубрики и id текста, и добавляет в таблицу связи новую запись.

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

Так, да не так. Держите меня, сейчас опять понесет в философию...

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

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

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

Если же вы в себе не уверены, то можете просто объявить в базе данных связку id_текста+id_рубрики -- уникальной и SQL сам не станет добавлять повторных записей. Кстати, такой ключ нам еще понадобится, когда мы начнем делать выборки текстов из базы по номеру рубрики. Но это тема другого выпуска, не стану сейчас отвлекать вас на это.

Возвернемся к нашим баранам и добавим в функцию добавления текста вызов связки in_text_id с in_text_cat.

На сегодняшний момент функция добавления текста будет выглядеть так:


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

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

До завтра!

[шаг назад] [печатать] [в начало сайта]



copyright ©2000-2017 Ruslan Kurepin