X   Сообщение сайта
(Сообщение закроется через 3 секунды)



 

Здравствуйте, гость (

| Вход | Регистрация )

Открыть тему
Тема закрыта
> Помогите отделить из функции кусок в View
sirious
sirious
Topic Starter сообщение 4.1.2013, 15:37; Ответить: sirious
Сообщение #1


Есть функция вывода секций с разделами:
[php]
function forum_get()
{
// Запросы.
$sects_query = mysql_query("SELECT * FROM sections ORDER BY id_section ASC");
$cats_query = mysql_query("SELECT * FROM cats");

//$cats_query = mysql_query("SELECT name FROM cats WHERE id_section = ".$section['id_section']."");

if (!$sects_query || !$cats_query)
die(mysql_error());

// Извлечение из бд.
if ($sects_query == 0 )
{
echo 'Не создано ни одного раздела.';
}
elseif ($cats_query == 0)
{
echo 'Не создано ни одной категории.';
}
else
{
// Получаем разделы.
while ($section = mysql_fetch_assoc($sects_query))
{
$id = $section['id_section'];
$name = $section['name'];

$sections[$id] = array();
$sections[$id]['name'] = $name;
$sections[$id]['cats'] = array();
}

// Получаем категории.
while ($cat = mysql_fetch_assoc($cats_query))
{
$id = $cat['id_cat'];
$id_section = $cat['id_section'];
$name_section = mysql_query("SELECT name FROM sections WHERE id_section = ".$id_section."");
$sections[$id_section]['cats'][$id] = $cat;
}

// Считаем количество разделов.
$num_sections = mysql_num_rows(mysql_query("SELECT * FROM sections"));

/////////////////////////////////
//КУСОК КОТОРЫЙ НАДО ВЫПИЛИТЬ////
// Отображаем разделы и список категорий.
for ($i=1; $i<=$num_sections; $i++)
{
echo $sections[$i]['name'].'<br />';

foreach ($sections[$i]['cats'] as $cat)
{
echo '<a href="?cat='.$cat['id_cat'].'">'.$cat['name'].'</a><br />';
}
//////////////////////////////
}
}
[/php]
Я придерживаюсь модели MVC, поэтому в View нужно закинуть выделенный кусок с самим отображением.
Для цикла надо что бы функция возвращала 3 переменные.
Дя этого я разделил 1 функцию на 3:
1) Отдельная функция возвращаемая количество секций: [php]$num_sections = mysql_num_rows(mysql_query("SELECT * FROM sections"));[/php] num_sections().
2) Отдельная функция вывода секций с возвращаемой [php]$sections_name = $sections[$i]['name'];['cats'];[/php] get_sections().
3) Отдельная функция вывода разделов с возвращаемой [php]$cats_name = $sections[$i]['cats'];[/php] get_cats().

Теперь каждая функция возвращает по 1 переменной. Все вроде нормально, можно теперь цикл спокойно вырезать. Но 2 и 3 функции без цикла ничего не знают о $i (в ней содержатся айдишники секций). И возвратить ничего толкового немогут. Провозился с этим уже пол дня, вроде как и есть свой вариант решения, но его логика подобрана методом научного тыка и отображает почему то только со второго раздела. Вообщем надеюсь на чью нибудь помощь))
0
Вернуться в начало страницы
 
Ответить с цитированием данного сообщения
Shaka13
Shaka13
сообщение 4.1.2013, 16:09; Ответить: Shaka13
Сообщение #2


я не вижу тут 3 пользовательские функции и не вижу как эти функции взаимодействуют между собой, насколько я понял, ты сторонник MVC, а базовый синтаксис не знаешь, переменные объявленные внутри функции являются локальными и вне ее не будут видны, потому другие функции не знают об айдишнике секции. Твоя задача либо сделать их глобальными, что не есть хорошо, либо сделать, чтоб функции возвращали результат, и имели аргументы, как-то так навскидку.

ЗЫ. почитай.
Вернуться в начало страницы
 
Ответить с цитированием данного сообщения
sirious
sirious
Topic Starter сообщение 4.1.2013, 16:48; Ответить: sirious
Сообщение #3


Ты меня совсем неправильно понял, все что ты написал я прекрасно знаю. У меня вопрос в другом.

В данной функции я еще ничего не разделил, я все в кучу писал. Когда я говорил про 3 функции, я имел ввиду что я данный пример пробовал разделить на 3 функции. И все же никак не получается вот этот кусок(код ниже) закинуть в представление, потому что есть проблема с возвращением результата $sections[$i]['name'] и $sections[$i]['cats'] из за $i, она не может передаться потому, что без цикла, $i не имеет значения. Надеюсь теперь яснее.
[php] for ($i=1; $i<=$num_sections; $i++)
{
echo $sections[$i]['name'].'<br />';

foreach ($sections[$i]['cats'] as $cat)
{
echo '<a href="?cat='.$cat['id_cat'].'">'.$cat['name'].'</a><br />';
}
}
[/php]
Вернуться в начало страницы
 
Ответить с цитированием данного сообщения
Shaka13
Shaka13
сообщение 4.1.2013, 16:56; Ответить: Shaka13
Сообщение #4


как в анекдоте, а вы по яйцам узнайте, я так и не понял в чем проблема? покажи нормально весь код и что не получается, а что выходит?
думаю тебе id не нужно, или ты многомерный массив используешь? можно или coun() использовать или вычислить количество строк обработанных запросом.
Вернуться в начало страницы
 
Ответить с цитированием данного сообщения
isvetlichniy
isvetlichniy
сообщение 4.1.2013, 17:00; Ответить: isvetlichniy
Сообщение #5


так закинь цикл в функции 2 и 3, а $num_sections передай как параметр
хотя я до конца и не понял, чего ты намудрил...
Вернуться в начало страницы
 
Ответить с цитированием данного сообщения
sirious
sirious
Topic Starter сообщение 5.1.2013, 0:16; Ответить: sirious
Сообщение #6


Все, спасибо, решил проблему.

Замечание модератора:
Эта тема была закрыта автоматически ввиду отсутствия активности в ней на протяжении 100+ дней.
Если Вы считаете ее актуальной и хотите оставить сообщение, то воспользуйтесь кнопкой
или обратитесь к любому из модераторов.
Вернуться в начало страницы
 
Ответить с цитированием данного сообщения
Открыть тему
Тема закрыта
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0


Свернуть

> Похожие темы

  Тема Ответов Автор Просмотров Последний ответ
Открытая тема (нет новых ответов) Помогите вспомнить рекламного бота Телеграм для обмена рекламой
0 Mixatraider 732 21.2.2024, 23:42
автор: Mixatraider
Открытая тема (нет новых ответов) Помогите рещить проблему с монитором.
Почему низкое разрешение при подключении монитора через displayport?
0 Levels 1702 11.12.2020, 0:48
автор: Levels
Открытая тема (нет новых ответов) Помогите кто нибудь получить партнерку Росбанк!
7 heisenberg_mw 2347 7.8.2020, 9:28
автор: heisenberg_mw
Открытая тема (нет новых ответов) Помогите найти тему пожалуйста
7 virtas 12589 24.7.2020, 17:02
автор: -JamesSmips-
Открытая тема (нет новых ответов) Помогите с поиском доноров
3 tehno_music 3365 4.11.2019, 17:15
автор: goblin78


 



RSS Текстовая версия Сейчас: 26.4.2024, 8:08
Дизайн