Перейти к содержимому



Помогите отделить из функции кусок в View

#1 sirious

sirious
  • Пользователь
  • 3 сообщений
  • Репутация: 0
0

Отправлено 04 Январь 2013 - 14:37

Есть функция вывода секций с разделами:

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 />';
}
//////////////////////////////
}
}

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

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

 

 

  • 0

#2 Shaka13

Shaka13
  • Заблокированные
  • 136 сообщений
  • Репутация: 10

Отправлено 04 Январь 2013 - 15:09

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

ЗЫ. почитай.
  • 0

#3 sirious

sirious
    Topic Starter
  • Пользователь
  • 3 сообщений
  • Репутация: 0

Отправлено 04 Январь 2013 - 15:48

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

В данной функции я еще ничего не разделил, я все в кучу писал. Когда я говорил про 3 функции, я имел ввиду что я данный пример пробовал разделить на 3 функции. И все же никак не получается вот этот кусок(код ниже) закинуть в представление, потому что есть проблема с возвращением результата $sections[$i]['name'] и $sections[$i]['cats'] из за $i, она не может передаться потому, что без цикла, $i не имеет значения. Надеюсь теперь яснее.

 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 />';
}
}


  • 0

#4 Shaka13

Shaka13
  • Заблокированные
  • 136 сообщений
  • Репутация: 10

Отправлено 04 Январь 2013 - 15:56

как в анекдоте, а вы по яйцам узнайте, я так и не понял в чем проблема? покажи нормально весь код и что не получается, а что выходит?
думаю тебе id не нужно, или ты многомерный массив используешь? можно или coun() использовать или вычислить количество строк обработанных запросом.
  • 0

#5 isvetlichniy

isvetlichniy
  • Пользователь
  • 619 сообщений
  • Репутация: 93

Отправлено 04 Январь 2013 - 16:00

так закинь цикл в функции 2 и 3, а $num_sections передай как параметр
хотя я до конца и не понял, чего ты намудрил...
  • 0

#6 sirious

sirious
    Topic Starter
  • Пользователь
  • 3 сообщений
  • Репутация: 0

Отправлено 04 Январь 2013 - 23:16

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


Оформление форума – IPBSkins.ru