Перейти в начало страницы

Здравствуйте, гость ( Авторизация | Регистрация )

Gameru.net останавливает работу в связи с вторжением армии РФ в Украину. Следите за дальнейшими анонсами.
Support Gameru!
19 страниц V  « < 12 13 14 15 16 > »   
Ответить в данную темуНачать новую тему
> Вопросы по Web-программированию
SaneX
сообщение 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>








--------------------
Перейти в начало страницы
 
OlegatoR
сообщение 26.06.2013, 02:58
Сообщение #262


Gameru DA
************************

Репутация:   3704  
Группа: Администратор
Сообщений: 10206
Награды: 4
Регистрация: 03.02.2006




Вставить ник Цитировать выделенное в форуму быстрого ответа


Цитата(SaneX @ 25.06.2013, 22:59) *
отделение HTML кода от PHP

Цитата(SaneX @ 25.06.2013, 22:59) *
  
                                    $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>    

biggrin.gif Пока что получилось не очень.

Код
model::print_html_echo($html_news_main_block);

Если в модели какая-то функция отдаёт HTML - разделения уже не получается.

В идеале должно выглядеть вот так:
Контроллер получил запрос, как-то его обработал -> Контроллер получил необходимые данные из модели -> Контроллер передал данные в View -> В View данные выводятся (никаких работ с БД, модификаций данных по минимуму)

Посмотри в сторону фреймворков CodeIgniter или Yii (Юи поновее, Кодеигнитер легче в освоении).

Цитата(SaneX @ 26.04.2013, 17:08) *
Посоветуйте хороший бесплатный редактор кода по типу sublime text но обязательно с фичей, чтобы если открываешь файл XXX.PHP, то автоматом бы открывались все его зависимости, инклуднутые php файлы, стили, java скрипты и т.п. как в dreamweaver'е.

NetBeans. Автоматом инклуды не открываются, но можно перейти в CSS файл, кликнув по классу или иду, или перейти в нужный инклуд по клику на объекте или его методе. Срабатывает в 95% случаев.


--------------------
Перейти в начало страницы
 
SaneX
сообщение 28.06.2013, 16:34
Сообщение #263


Игровой Бог первой степени
***********************

Репутация:   1167  
Группа: Участник
Сообщений: 9404
Награды: 5
Регистрация: 15.03.2007




Вставить ник Цитировать выделенное в форуму быстрого ответа


Чето я туплю. Вот есть функция, которая, например, вставляет в БД что-либо, а так-же выводит какоенибудь сообщение.

1-й раз мы к функции обратились, она вставила данные в БД, вывела нам сообщение. Как повторно обратиться к результату функции, минуя её повторное выполнение? Без помещения в результата функции в переменную, и обращения уже к переменной.



--------------------
Перейти в начало страницы
 
Son1c
сообщение 28.06.2013, 18:41
Сообщение #264


Продвинутый геймер
********

Репутация:   74  
Группа: Забанен
Сообщений: 359
Награды: 2
Регистрация: 24.08.2007




Вставить ник Цитировать выделенное в форуму быстрого ответа


Цитата(SaneX @ 28.06.2013, 16:34) *
Как повторно обратиться к результату функции... Без помещения в результата функции в переменную, и обращения уже к переменной.

Никак

Сообщение отредактировал Son1c - 28.06.2013, 18:41
Перейти в начало страницы
 
SaneX
сообщение 28.06.2013, 18:53
Сообщение #265


Игровой Бог первой степени
***********************

Репутация:   1167  
Группа: Участник
Сообщений: 9404
Награды: 5
Регистрация: 15.03.2007




Вставить ник Цитировать выделенное в форуму быстрого ответа


Цитата(Son1c @ 28.06.2013, 19:41) *
Цитата(SaneX @ 28.06.2013, 16:34) *
Как повторно обратиться к результату функции... Без помещения в результата функции в переменную, и обращения уже к переменной.

Никак


Эх. Сколько дурацких ограничений.




--------------------
Перейти в начало страницы
 
SaneX
сообщение 02.07.2013, 10:40
Сообщение #266


Игровой Бог первой степени
***********************

Репутация:   1167  
Группа: Участник
Сообщений: 9404
Награды: 5
Регистрация: 15.03.2007




Вставить ник Цитировать выделенное в форуму быстрого ответа


Сколько времени у среднего верстальщика займет верстка такого шаблона, с учетом резиновости и кроссбраузерности?



Сообщение отредактировал SaneX - 02.07.2013, 11:21


--------------------
Перейти в начало страницы
 
OlegatoR
сообщение 04.07.2013, 20:27
Сообщение #267


Gameru DA
************************

Репутация:   3704  
Группа: Администратор
Сообщений: 10206
Награды: 4
Регистрация: 03.02.2006




Вставить ник Цитировать выделенное в форуму быстрого ответа


Цитата(SaneX @ 02.07.2013, 10:40) *
Сколько времени у среднего верстальщика займет верстка такого шаблона, с учетом резиновости и кроссбраузерности?


Часа 3-4, с перерывами на чай.


--------------------
Перейти в начало страницы
 
SaneX
сообщение 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


--------------------
Перейти в начало страницы
 
SaneX
сообщение 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


--------------------
Перейти в начало страницы
 
SaneX
сообщение 26.07.2013, 23:38
Сообщение #270


Игровой Бог первой степени
***********************

Репутация:   1167  
Группа: Участник
Сообщений: 9404
Награды: 5
Регистрация: 15.03.2007




Вставить ник Цитировать выделенное в форуму быстрого ответа


уже разобрался


--------------------
Перейти в начало страницы
 
OlegatoR
сообщение 27.07.2013, 00:39
Сообщение #271


Gameru DA
************************

Репутация:   3704  
Группа: Администратор
Сообщений: 10206
Награды: 4
Регистрация: 03.02.2006




Вставить ник Цитировать выделенное в форуму быстрого ответа


Цитата(SaneX @ 26.07.2013, 21:50) *
while ($catalogline = model::query()){

блаблабла

}

o_O.gif
Что-то ты такое мутишь...

Как разобрался?


--------------------
Перейти в начало страницы
 
Son1c
сообщение 27.07.2013, 01:15
Сообщение #272


Продвинутый геймер
********

Репутация:   74  
Группа: Забанен
Сообщений: 359
Награды: 2
Регистрация: 24.08.2007




Вставить ник Цитировать выделенное в форуму быстрого ответа


Цитата(OlegatoR @ 27.07.2013, 00:39) *
Цитата(SaneX @ 26.07.2013, 21:50) *
while ($catalogline = model::query()){

блаблабла

}

Как разобрался?

Скорее всего убрал бесконечный цикл
while ($catalogline = model::query()) wink.gif
Перейти в начало страницы
 
SaneX
сообщение 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


--------------------
Перейти в начало страницы
 
SaneX
сообщение 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


--------------------
Перейти в начало страницы
 
cjayho
сообщение 29.07.2013, 13:52
Сообщение #275


Мастер Игры
************

Репутация:   248  
Группа: Участник
Сообщений: 1363
Награды: 4
Регистрация: 08.03.2010




Вставить ник Цитировать выделенное в форуму быстрого ответа


Цитата(SaneX @ 29.07.2013, 12:16) *
Возник ещё один вопрос. Продолжаю пилить класс подключения к БД.

Есть функция
Код
        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 - https://github.com/cjayho/ecb-shaderpack/

------

Продюсер электронной музыки в стиле Dark Ambient, автор саундтрека для Desowave S.T.A.L.K.E.R.: Lost Alpha.

Spotify | Apple Music | YouTube | BandCamp | AudioMack
Перейти в начало страницы
 
SaneX
сообщение 29.07.2013, 14:43
Сообщение #276


Игровой Бог первой степени
***********************

Репутация:   1167  
Группа: Участник
Сообщений: 9404
Награды: 5
Регистрация: 15.03.2007




Вставить ник Цитировать выделенное в форуму быстрого ответа


спасибо, попробую сделать через массив.
А по поводу всего класса - там кроме этих 2-х функций остальные к БД не относятся.
Цитата
Продолжаю пилить класс подключения к БД.

тут немного не правильно выразился.

Сообщение отредактировал SaneX - 29.07.2013, 14:43


--------------------
Перейти в начало страницы
 
SaneX
сообщение 29.07.2013, 21:23
Сообщение #277


Игровой Бог первой степени
***********************

Репутация:   1167  
Группа: Участник
Сообщений: 9404
Награды: 5
Регистрация: 15.03.2007




Вставить ник Цитировать выделенное в форуму быстрого ответа


Цитата(cjayho @ 29.07.2013, 14:52) *
Ответ бд вытягивается и записывается в массив плана

в случае если массив есть то повторный запрос не делается а выуживается элемент массива.
Вот так вроде катит. Во всяком случае, я поставил счетчик после обращения к БД и теперь он равен "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


--------------------
Перейти в начало страницы
 
cjayho
сообщение 29.07.2013, 21:50
Сообщение #278


Мастер Игры
************

Репутация:   248  
Группа: Участник
Сообщений: 1363
Награды: 4
Регистрация: 08.03.2010




Вставить ник Цитировать выделенное в форуму быстрого ответа


Цитата(SaneX @ 29.07.2013, 21:23) *
Цитата(cjayho @ 29.07.2013, 14:52) *
Ответ бд вытягивается и записывается в массив плана

в случае если массив есть то повторный запрос не делается а выуживается элемент массива.
Вот так вроде катит. Во всяком случае, я поставил счетчик после обращения к БД и теперь он равен "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 - https://github.com/cjayho/ecb-shaderpack/

------

Продюсер электронной музыки в стиле Dark Ambient, автор саундтрека для Desowave S.T.A.L.K.E.R.: Lost Alpha.

Spotify | Apple Music | YouTube | BandCamp | AudioMack
Перейти в начало страницы
 
SaneX
сообщение 29.07.2013, 21:56
Сообщение #279


Игровой Бог первой степени
***********************

Репутация:   1167  
Группа: Участник
Сообщений: 9404
Награды: 5
Регистрация: 15.03.2007




Вставить ник Цитировать выделенное в форуму быстрого ответа


Цитата
Ps. А вообще создание грамотной mvc-архитектуры - далеко не тривиальная задача


Я просто так делаю с целью самообразования, т.к. у меня только начальные знания PHP.



--------------------
Перейти в начало страницы
 
cjayho
сообщение 29.07.2013, 22:02
Сообщение #280


Мастер Игры
************

Репутация:   248  
Группа: Участник
Сообщений: 1363
Награды: 4
Регистрация: 08.03.2010




Вставить ник Цитировать выделенное в форуму быстрого ответа


Цитата(SaneX @ 25.06.2013, 22:59) *
Начал изучать 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 - https://github.com/cjayho/ecb-shaderpack/

------

Продюсер электронной музыки в стиле Dark Ambient, автор саундтрека для Desowave S.T.A.L.K.E.R.: Lost Alpha.

Spotify | Apple Music | YouTube | BandCamp | AudioMack
Перейти в начало страницы
 

19 страниц V  « < 12 13 14 15 16 > » 
Ответить в данную темуНачать новую тему
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 



Текстовая версия Сейчас: 13.05.2024, 00:00