Вопросы по Web-программированию |
Здравствуйте, гость ( Авторизация | Регистрация )
Вопросы по Web-программированию |
25.06.2013, 22:59
Сообщение
#261
|
|
Игровой Бог первой степени Репутация: 1167 Группа: Участник Сообщений: 9404 Награды: 5 Регистрация: 15.03.2007 |
Начал изучать MVC паттерн.
Вот такое отделение HTML кода от PHP нормально выглядит? Код <div class="bodyinnerleft1x3"> <div class="bodyinner" title="iTreesVol 1" onclick="location.href='item.php?id=2'" onmouseover="change()" onmouseout="changeback()"> <style> .bodyinner{ background: url(images/gallery/itreesvol1/1.jpg); background-position: center; background-size:cover; } </style> </div> <div class="bodyinnernewscontainer"> <div class="bodyinnernewshead"> <span class="bodyinnernewsheadcapture"> Новости <?php $html = "<div class='add_news_button' title='Добавить новость'>+</div>"; echo model::if_1_1_eq($statusadmin['status'], 'admin', model::print_html($html)); ?> </span> </div> <div id="bodyinnernewsbody"> <div id="bodyinnernewsbodycontainer"> <?php $html = "<form name='add_news_form' class='add_news' action='/index' method='POST' ENCTYPE='multipart/form-data'> <div class='add_news_div'> <table style='width:100%'> <tr> <td><textarea required placeholder='Заголовок новости' id='news_title_id' name='news_title' cols='40' rows='3' class='news_title_textarea'></textarea></td> </tr> <tr> <td><textarea placeholder='Ссылка (опционально)' id='news_titlelink_id' name='news_titlelink' cols='40' rows='3' class='news_titlelink_textarea'></textarea></td> </tr> <tr> <td><div class='news_bbcode_wrapper'> <div class='bbcode_button' onClick='bb(\"news_text_id\", \"b\")'>B</div> <div class='bbcode_button' onClick='bb(\"news_text_id\", \"i\")'>i</div> <div class='bbcode_button' onClick='bb(\"news_text_id\", \"u\")' style='text-decoration:underline'>U</div> <div class='bbcode_button' onClick='bb(\"news_text_id\", \"url\")' style='width:30px'>URL</div> </div></td> </tr> <tr> <td><textarea required id='news_text_id' name='news_text' cols='40' rows='3' class='news_text_textarea'></textarea></td> </tr> <tr> <td><input type='submit' value='Добавить новость' name='news_submit' class='news_submit_button'></td> </tr> </table> </div> </form>"; echo model::if_1_1_eq($statusadmin['status'], 'admin', model::print_html($html)); echo model::if_1_1_eq($statusadmin['status'], 'admin', model_index::add_news()); ?> <?php $news = mysql_query("SELECT news.id, news.title, news.titlelink, news.text, news.date FROM news ORDER BY date DESC"); while ($news_line = mysql_fetch_array($news)){ $html_delete_news_block = "<div class='delete_news_button' title='Удалить новость'>X</div> <div class='delete_news_confirm_div'> <div style='width:100%; border-bottom:1px solid #C86A6A; text-align:center'>Введите `Del`</div> <div> <form name='delete_news_form' class='delete_news_class' action='/index' method='POST' ENCTYPE='multipart/form-data'> <input type='hidden' id='news_id_input' name='news_id' value='".model_index::get_news_id_for_delete($news_line['id'])."'> <input type='text' id='confirm_digits_id' name='confirm_digits' class='confirm_digits_input'> <input type='submit' value='ОК' class='delete_news_submit'> </form> </div> </div>"; $html_news_main_block = "<div>".model_index::convert_date_y_m_d($news_line['date'])."</div> <div style='font-size:12px; font-weight:bold; margin-top:8px'><a href='".model_index::select_news_link($news_line['titlelink'])."'>".$news_line['title']."</a> ".model::if_1_1_eq($statusadmin['status'], 'admin', model::print_html($html_delete_news_block))." ".model::if_1_1_eq($statusadmin['status'], 'admin', model_index::delete_news())." </div> ".nl2br("<div style='margin-top:8px; margin-bottom:18px; width:95%'>".model::bb_regexp($news_line['text'], '13')."</div>")." <hr>"; model::print_html_echo($html_news_main_block); } ?> </div> </div> </div> </div> <div class="bodyinnerright1x3"> <div class="bodyinner1" title="iTreesVol 2" onclick="location.href='item.php?id=3'" onmouseover="change()" onmouseout="changeback()"> <style> .bodyinner1{ background: url(images/gallery/itreesvol2/1.jpg); background-position: center; } </style> </div> </div> <div class="bodyinner2" title="S&N Grass Vol 1" onclick="location.href='item.php?id=1'" onmouseover="change()" onmouseout="changeback()"> <style> .bodyinner2{ background: url(images/gallery/grassvol1/1.jpg); background-position: center; } </style> </div> <div class="bodyinner3" onmouseover="change()" title="Галерея" onclick="location.href='gallery.php'" onmouseout="changeback()"> <style> .bodyinner3{ background: url(images/gallery/sntreesvol3/1.jpg); background-position: center; } </style> </div> </div> -------------------- |
 
|
|
|
|
26.06.2013, 02:58
Сообщение
#262
|
|
Gameru DA Репутация: 3704 Группа: Администратор Сообщений: 10206 Награды: 4 Регистрация: 03.02.2006 |
отделение HTML кода от PHP $news = mysql_query("SELECT news.id, news.title, news.titlelink, news.text, news.date FROM news ORDER BY date DESC"); while ($news_line = mysql_fetch_array($news)){ $html_delete_news_block = "<div class='delete_news_button' title='Удалить новость'>X</div> ...... } ?> </div> Пока что получилось не очень. Код model::print_html_echo($html_news_main_block); Если в модели какая-то функция отдаёт HTML - разделения уже не получается. В идеале должно выглядеть вот так: Контроллер получил запрос, как-то его обработал -> Контроллер получил необходимые данные из модели -> Контроллер передал данные в View -> В View данные выводятся (никаких работ с БД, модификаций данных по минимуму) Посмотри в сторону фреймворков CodeIgniter или Yii (Юи поновее, Кодеигнитер легче в освоении). Посоветуйте хороший бесплатный редактор кода по типу sublime text но обязательно с фичей, чтобы если открываешь файл XXX.PHP, то автоматом бы открывались все его зависимости, инклуднутые php файлы, стили, java скрипты и т.п. как в dreamweaver'е. NetBeans. Автоматом инклуды не открываются, но можно перейти в CSS файл, кликнув по классу или иду, или перейти в нужный инклуд по клику на объекте или его методе. Срабатывает в 95% случаев. -------------------- |
 
|
|
28.06.2013, 16:34
Сообщение
#263
|
|
Игровой Бог первой степени Репутация: 1167 Группа: Участник Сообщений: 9404 Награды: 5 Регистрация: 15.03.2007 |
Чето я туплю. Вот есть функция, которая, например, вставляет в БД что-либо, а так-же выводит какоенибудь сообщение.
1-й раз мы к функции обратились, она вставила данные в БД, вывела нам сообщение. Как повторно обратиться к результату функции, минуя её повторное выполнение? Без помещения в результата функции в переменную, и обращения уже к переменной. -------------------- |
 
|
|
28.06.2013, 18:41
Сообщение
#264
|
|
Продвинутый геймер Репутация: 74 Группа: Забанен Сообщений: 359 Награды: 2 Регистрация: 24.08.2007 |
|
 
|
|
28.06.2013, 18:53
Сообщение
#265
|
|
Игровой Бог первой степени Репутация: 1167 Группа: Участник Сообщений: 9404 Награды: 5 Регистрация: 15.03.2007 |
Как повторно обратиться к результату функции... Без помещения в результата функции в переменную, и обращения уже к переменной. Никак Эх. Сколько дурацких ограничений. -------------------- |
 
|
|
02.07.2013, 10:40
Сообщение
#266
|
|
Игровой Бог первой степени Репутация: 1167 Группа: Участник Сообщений: 9404 Награды: 5 Регистрация: 15.03.2007 |
Сколько времени у среднего верстальщика займет верстка такого шаблона, с учетом резиновости и кроссбраузерности?
Сообщение отредактировал SaneX - 02.07.2013, 11:21 -------------------- |
 
|
|
04.07.2013, 20:27
Сообщение
#267
|
|
Gameru DA Репутация: 3704 Группа: Администратор Сообщений: 10206 Награды: 4 Регистрация: 03.02.2006 |
Сколько времени у среднего верстальщика займет верстка такого шаблона, с учетом резиновости и кроссбраузерности? Часа 3-4, с перерывами на чай. -------------------- |
 
|
|
17.07.2013, 19:15
Сообщение
#268
|
|
Игровой Бог первой степени Репутация: 1167 Группа: Участник Сообщений: 9404 Награды: 5 Регистрация: 15.03.2007 |
Такая ситуация:
Паттерн MVC - index.php в котором инклудятся model, controller и view.php. Все как у других. Допустим открываю сессию. Значения переменных в сессию нормально заносятся и в ней сохраняются. Но если сохранить в сессии объект класса, то он добавляется в сессию, однако после обновления старницы значения переменных объекта удаляются из сессии. Сессия открывается только 1-н раз. До этого, когда делал не через MVC паттерн, а была просто php страничка с перемешанным php и html кодом - все работало. Что за беда? Мб сталкивался кто с подобным? UPD: решил проблему написав session_write_close(); в начале этого класса оО но это костыль. Сообщение отредактировал SaneX - 17.07.2013, 19:56 -------------------- |
 
|
|
26.07.2013, 21:50
Сообщение
#269
|
|
Игровой Бог первой степени Репутация: 1167 Группа: Участник Сообщений: 9404 Награды: 5 Регистрация: 15.03.2007 |
чет туплю.
Есть функция (в классе Model): Код public function query() { $query = mysql_query("SELECT id, name, price, filename, catcaption FROM catalog"); return mysql_fetch_array($query); } Пытаюсь её вызвать вот тут: Код while ($catalogline = model::query()){ блаблабла } Браузер падает т.к. выводится огромное кол-во записей, содержащих данные 1-й строки таблицы БД. Как павильно написать? Обязательно с функцией. Сообщение отредактировал SaneX - 26.07.2013, 21:54 -------------------- |
 
|
|
26.07.2013, 23:38
Сообщение
#270
|
|
Игровой Бог первой степени Репутация: 1167 Группа: Участник Сообщений: 9404 Награды: 5 Регистрация: 15.03.2007 |
уже разобрался
-------------------- |
 
|
|
27.07.2013, 00:39
Сообщение
#271
|
|
Gameru DA Репутация: 3704 Группа: Администратор Сообщений: 10206 Награды: 4 Регистрация: 03.02.2006 |
while ($catalogline = model::query()){ блаблабла } Что-то ты такое мутишь... Как разобрался? -------------------- |
 
|
|
27.07.2013, 01:15
Сообщение
#272
|
|
Продвинутый геймер Репутация: 74 Группа: Забанен Сообщений: 359 Награды: 2 Регистрация: 24.08.2007 |
|
 
|
|
27.07.2013, 14:26
Сообщение
#273
|
|
Игровой Бог первой степени Репутация: 1167 Группа: Участник Сообщений: 9404 Награды: 5 Регистрация: 15.03.2007 |
нагуглил вот такое решение -)
Код public function query() { static $query = false; if (!$query){ $query = mysql_query("SELECT id, name, price, filename, catcaption FROM catalog"); } return $fetch_array = mysql_fetch_array($query); } Кстати в форуме глюк. При вставке тега [code] после отправки сообщения после квадратной ковычки "]" и открывающего и закрывающего тега добавляюся два тега Цитата Что-то ты такое мутишь Я перевожу свой дипломный проект (интернет магазин с форумом) на MVC паттерн. Вобщем отделяю view и model. Сообщение отредактировал SaneX - 27.07.2013, 14:29 -------------------- |
 
|
|
29.07.2013, 12:16
Сообщение
#274
|
|
Игровой Бог первой степени Репутация: 1167 Группа: Участник Сообщений: 9404 Награды: 5 Регистрация: 15.03.2007 |
Возник ещё один вопрос. Продолжаю пилить класс подключения к БД.
Есть функция Код public function query() { static $query = false; if (!$query){ $query = mysql_query("SELECT id, firstname, secondname FROM users"); } return $fetch_array = mysql_fetch_array($query); } и функция Код public function show_user($para, $query) { switch ($para) { case id: $val = $query['id']; break; case firstname: $val = $query['firstname']; break; case secondname: $val = $query['secondname']; break; } return $val; } Отображаю так: Код while ($row = model::query()){ echo model::show_user('id', $row); echo model::show_user('firstname', $row); echo model::show_user('secondname', $row); } но в итоге, выходит многовато лишних запросов к БД. Как можно оптимизировать в плане кол-ва обращений к БД? Но обязательно должно остаться использование функций, т.к. Код while ($row = model::query()){ echo $row['id']; echo $row['firstname']; echo $row['secondname']; } не очень красиво в MVC паттерне. Сообщение отредактировал SaneX - 29.07.2013, 12:17 -------------------- |
 
|
|
29.07.2013, 13:52
Сообщение
#275
|
|
Мастер Игры Репутация: 248 Группа: Участник Сообщений: 1363 Награды: 4 Регистрация: 08.03.2010 |
Возник ещё один вопрос. Продолжаю пилить класс подключения к БД. Есть функция Код public function query() { static $query = false; if (!$query){ $query = mysql_query("SELECT id, firstname, secondname FROM users"); } return $fetch_array = mysql_fetch_array($query); } и функция Код public function show_user($para, $query) { switch ($para) { case id: $val = $query['id']; break; case firstname: $val = $query['firstname']; break; case secondname: $val = $query['secondname']; break; } return $val; } Отображаю так: Код while ($row = model::query()){ echo model::show_user('id', $row); echo model::show_user('firstname', $row); echo model::show_user('secondname', $row); } но в итоге, выходит многовато лишних запросов к БД. Как можно оптимизировать в плане кол-ва обращений к БД? Но обязательно должно остаться использование функций, т.к. Код while ($row = model::query()){ echo $row['id']; echo $row['firstname']; echo $row['secondname']; } не очень красиво в MVC паттерне. не совсем понимаю что вас смущает... Ответ бд вытягивается и записывается в массив плана $query = array( 'id' => somevalue, 'firstname' => somevalue, 'secondname' => somevalue ); в случае если массив есть то повторный запрос не делается а выуживается элемент массива. Вообще неплохо бы увидеть весь класс. -------------------- Набор шейдеров для S.T.A.L.K.E.R: Shadow of chernobyl: ECB-Shaderpack -
------ Продюсер электронной музыки в стиле Dark Ambient, автор саундтрека для Desowave S.T.A.L.K.E.R.: Lost Alpha. |
 
|
|
29.07.2013, 14:43
Сообщение
#276
|
|
Игровой Бог первой степени Репутация: 1167 Группа: Участник Сообщений: 9404 Награды: 5 Регистрация: 15.03.2007 |
спасибо, попробую сделать через массив.
А по поводу всего класса - там кроме этих 2-х функций остальные к БД не относятся. Цитата Продолжаю пилить класс подключения к БД. тут немного не правильно выразился. Сообщение отредактировал SaneX - 29.07.2013, 14:43 -------------------- |
 
|
|
29.07.2013, 21:23
Сообщение
#277
|
|
Игровой Бог первой степени Репутация: 1167 Группа: Участник Сообщений: 9404 Награды: 5 Регистрация: 15.03.2007 |
Ответ бд вытягивается и записывается в массив плана Вот так вроде катит. Во всяком случае, я поставил счетчик после обращения к БД и теперь он равен "1".в случае если массив есть то повторный запрос не делается а выуживается элемент массива. Код public function query()
{ static $query = false; if (!$query){ $query = Model::sql_select_few('id', 'name', 'price', 'filename', 'catcaption', 'catalog'); ++$_SESSION['test']; return mysql_fetch_array($query); } else { return mysql_fetch_array($query); } } Сообщение отредактировал SaneX - 29.07.2013, 21:23 -------------------- |
 
|
|
29.07.2013, 21:50
Сообщение
#278
|
|
Мастер Игры Репутация: 248 Группа: Участник Сообщений: 1363 Награды: 4 Регистрация: 08.03.2010 |
Ответ бд вытягивается и записывается в массив плана Вот так вроде катит. Во всяком случае, я поставил счетчик после обращения к БД и теперь он равен "1".в случае если массив есть то повторный запрос не делается а выуживается элемент массива. Код public function query() { static $query = false; if (!$query){ $query = Model::sql_select_few('id', 'name', 'price', 'filename', 'catcaption', 'catalog'); ++$_SESSION['test']; return mysql_fetch_array($query); } else { return mysql_fetch_array($query); } } Для начала могу только сказать что надстройка работы с mysql, которую вы используете, является устаревшей с версии php 5.5.0, так что стоит задуматься над заменой, например на бэкэнд mysqli. Ps. А вообще создание грамотной mvc-архитектуры - далеко не тривиальная задача, это я вам как веб-разработчик с 15-летним стажем говорю. Сообщение отредактировал cjayho - 29.07.2013, 21:52 -------------------- Набор шейдеров для S.T.A.L.K.E.R: Shadow of chernobyl: ECB-Shaderpack -
------ Продюсер электронной музыки в стиле Dark Ambient, автор саундтрека для Desowave S.T.A.L.K.E.R.: Lost Alpha. |
 
|
|
29.07.2013, 21:56
Сообщение
#279
|
|
Игровой Бог первой степени Репутация: 1167 Группа: Участник Сообщений: 9404 Награды: 5 Регистрация: 15.03.2007 |
Цитата Ps. А вообще создание грамотной mvc-архитектуры - далеко не тривиальная задача Я просто так делаю с целью самообразования, т.к. у меня только начальные знания PHP. -------------------- |
 
|
|
29.07.2013, 22:02
Сообщение
#280
|
|
Мастер Игры Репутация: 248 Группа: Участник Сообщений: 1363 Награды: 4 Регистрация: 08.03.2010 |
Начал изучать MVC паттерн. Вот такое отделение HTML кода от PHP нормально выглядит? <...> Исполняемые файлы шаблонов (с php-кодом внутри) - по сути отсутствие mvc, так как все равно это получается спагетти-код. Я например использую неисполняемые шаблоны, то есть программу отделяю от данных полностью. Куски html кода выношу в отдельные .tpl-файлы. которые не инклудятся, а читаются через file_get_contents() и потом парсятся, например регулярками. В простейшем случае. если не делать какой-то серьезной обработки, чтобы вставить в нужное место результат выполнения какой-нибудь ф-ции или другой шаблон, использую конструкции типа Код <!--[tagname]--> И потом пройдясь по содержимому файла простейшим str_replace('<!--[tagname]-->', 'то что нам нужно', ... ) получаю уже заполненный шаблон. -------------------- Набор шейдеров для S.T.A.L.K.E.R: Shadow of chernobyl: ECB-Shaderpack -
------ Продюсер электронной музыки в стиле Dark Ambient, автор саундтрека для Desowave S.T.A.L.K.E.R.: Lost Alpha. |
 
|
|
Текстовая версия | Сейчас: 13.05.2024, 10:28 |