@Rotastahm

Php и самописный сервис. Нуждаюсь в помощи по разбору кода?

Предисловие. Занимаюсь самообучением, поэтому буду рад любой помощи.
Достался недописанный сервис для обработки заявок. Пытаюсь разобраться и сам дописать (как раз начал изучать php). Эта часть формирует меню навигации.
<ul class="mn-nav">
<?
require_once 'helpers/menu.php';  

if(isset($_GET['p'])) $p = $_GET['p']; else $p = $nullpages[$row['type']]['p'];

foreach($pages[$row['type']] as $key => $value){

if($p==$key) $active = 'class="active"'; else $active = '';
echo '<li '.$active.'><a href="?p='.$key.'&t='.$tabs[$row['type']][$key][0][0].'">'.$value.'</a></li>'."\n";
		
}  
?></ul>

Пытаюсь разобраться как формируется вывод всего этого добра. Поэтому разбор по строчкам идет и сразу самообучение.
1. require_once 'helpers/menu.php'; // Подключение файла массивов с данными.
Файл:
<?
	// Администраторы
	$pages[0] = array(
		'categories' => 'Категории',
		'requests' => 'Заявки',
		'crm' => 'CRM',
		'settings' => 'Настройки',
	);
$tabs[0] = array(
		'categories' => array(
			array('all','Все категории'),
			array('create','На создание')
		)
);
$nullpages = array(
		'0' => array(
			'p' => 'requests',
			't' => 'evaluation'
		),
		'2' => array(
			'p' => 'crm',
			't' => 'clients'
		),
		'1' => array(
			'p' => 'tasks',
			't' => 'all'
		)
	);

2.
if(isset($_GET['p'])) $p = $_GET['p']; else $p = $nullpages[$row['type']]['p'];

Запрос гет. Проверка задали ли переменную, иначе $p присвоить по умолчанию(для разных видов пользователей 0-админ,1 -менеджеры и так далее). Части с [$row['type']]['p'] мне не понятны.
3. foreach($pages[$row['type']] as $key => $value){ - цикл перебора. открыть массив $pages и каждому индексу присвоить переменную $key, а каждому значению присвоить переменную $value.
И снова не понимаю, что значит [$row['type']]. Как я понимаю он должен тут читать индекс массива "0 - Администраторы, 1- менеджеры и так далее".
4. i
f($p==$key) $active = 'class="active"'; else $active = '';
echo '<li '.$active.'><a href="?p='.$key.'&t='.$tabs[$row['type']][$key][0][0].'">'.$value.'</a></li>'."\n";

Сравниваем две переменных $p и $key, и смотря от этого будем подставлять значения в верстку (вкладка будет или не будет активной).
Вывод тега с предыдущими переменными для построения, и это же будет гет запрос для вывода следующих страниц.
Построение урла: 1)?p= переменная $key,
2)&t= переменная из массива $tabs.
3)['type']][$key][0][0] часть не очень понятна.
4)$value плюс переменная взятая из массива.
Получилось слишком много букв. Вдруг найдутся люди со свободным временем, что бы помочь объяснить.
UPD
$worktime = $mysqli->query("SELECT * FROM ".$prefix."worktime");
	while ($row = mysqli_fetch_assoc($worktime))
	{
		if (strstr($row['type'], 'utc'))
		{
			if (!empty($row['params']))
			{
				$times[str_replace('utc_', '', $row['type'])] = explode(',', $row['params']);
			}
		}
		else
		{
			$work_time = explode(',', $row['params']);
		}
	}

Отсюда берется переменная $row. Этот код входит в часть авторизации.
  • Вопрос задан
  • 370 просмотров
Пригласить эксперта
Ответы на вопрос 2
zorba_buddha
@zorba_buddha
IT
Откуда то должна браться переменная $row, которая является ассоциативным массивом (возможно не только). Загрузите все скрипты к себе на комп и через редактор забейте поиск по файлам (ctrl+shift+f) строки $row.

Хотя, если $tabs берётся именно из menu.php и нигде больше не дополняется/меняется, то в $row['type'] всегда должен быть 0, иначе будет неизвестный индекс массива в $tabs.
Ответ написан
Stalker_RED
@Stalker_RED
Для начала поищите откуда берется $row и посмотрите что там внутри.

2.
if(isset($_GET['p'])) $p = $_GET['p']; else $p = $nullpages[$row['type']]['p'];
неплохо бы заменить на что-то вроде
$p = filter_input(INPUT_GET, 'p', FILTER_SANITIZE_NUMBER_INT) ?: $defaultP;

где $defaultP это $nullpages[$row['type']]['p']
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы