Интеграция своего кода в modx

Здравствуйте, стоит задача реализовать вывод списка как здесь www.rusprofile.ru/codes/

Я сделал верстку и написал php скрипты для всего это дела, струткура следующая: есть файл db.php который работает с БД, перебирает масивы, формирует списки, вложенности и т.д и есть codes.php где сам список вводится как а исходнике. Файл db.php инклюдится в codes.php. На локальной машине все работает нормально, но при переносе вообще ничего не работает.
Мои действия были такие: перенес сначала html верстку, затем создал сниппет в котором код из db.php и сниппет с php часть из codes.php, затем все сниппеты добавил в чанк.
При запуске пишет что ошибка в db.php а конкретно в строке которая выполняет sql запрос. Но если убрать 1 функцию в codes.php скрипт орабатывает без ошибок но ничего не выводит. Как правильно все это дело перенести на modx?

Ниже сообствено мой код

db.php

<?php
$db = new mysqli("localhost", "root", "" , "site.local");

$layers = [
	0 => "modx_okved_section",
	1 => "modx_okved_h_first",
	2 => "modx_okved_h_second",
	3 => "modx_okved_h_third",
	4 => "modx_okved_h_fourth",
	5 => "modx_okved_h_fifth",
];

$dataOkved = [];

function fillOkvedData($level=1, $where=''){
	global $db, $layers, $dataOkved;
	$layer = $db->query("select * from ".$layers[$level]." ".$where." order by code");
	$layer->data_seek(0);
	while($row = $layer->fetch_assoc()){
		if (!$row['code']==0){
			$dataOkved[$row['id']]= $row;
			$dataOkved[$row['id']]['level']=$level;
			if ($level<=4){
				$where_insrtuction = "where id_parent=".$row['id'];
				fillInnerData($level+1, $row['id'], $where_insrtuction);
			}
		}
	}
}

function fillInnerData($from_level, $key, $where=''){
	global $db, $layers, $dataOkved;
	$layer = $db->query("select * from ".$layers[$from_level]." ".$where." order by code");
	$layer->data_seek(0);
	while($row = $layer->fetch_assoc()){
		if ($row['code']==0){
			if ($from_level<=5){
				$where_insrtuction = "where id_parent=".$row['id'];
				fillInnerData($from_level+1, $key, $where_insrtuction);
			}
		} else {
			$dataOkved[$key]['children'][$row['id']]=$row;
			$dataOkved[$key]['children'][$row['id']]['level']=$from_level;
		}
	}
}
?>


codes.php


fillOkvedData(1,'');

foreach($dataOkved as $okved){
	$add_class = (count($okved['children'])==0)?'noinner':'';
		echo '<li>
			<div class="ul-item '.$add_class.'">
				<div class="ul-item-code ">
					<span>'.$okved["fullCode"].'</span>
				</div>
				<div class="ul-item-name"><a href="codes-inner_test.php?level='.$okved["level"].'&id='.$okved['id'].'">
																	'.$okved["name"].'
				</a></div>
			</div>
		    <ul class="ul-item-list collapse">';
	if	(count($okved['children'])!=0){
		foreach ($okved['children'] as $children) {
			echo '<li>
			    <div class="ul-item">
			    	<div class="ul-item-code ">
			    		<span>'.$children["fullCode"].'</span>
			    	</div>
			    	<div class="ul-item-name"><a href="codes-inner_test.php?level='.$children["level"].'&id='.$children['id'].'&level_parent='.$okved["level"].'&id_parent='.$okved['id'].'">
																				'.$children["name"].'
			    	</a></div>
			    </div>';
		}
	}

		echo '</ul></li>';
	}

5 комментариев

avatar
Правильно будет переписать запросы, используя средства MODX. Ну и весь говнокод поместить в один сниппет, тогда теоретически должно заработать.
avatar
Если вам не сложно, могли бы вы скинуть, где можно почитать про запросы, используя средства Modx и желательно на русском языке.
avatar
В данном случае будет как-то так:

$sql ='SELECT ...';
$q = $modx->prepare($sql);
$q->execute();
$result = $q->fetchAll(PDO::FETCH_ASSOC);


А так ilyaut.ru/xpdo/ ну и php.net/manual/ru/book.pdo.php
avatar
Сделал все как описали, так же потребовалось добавить $modx в глобальные переменные иначе внутри функции он на отрез отказывался видеть эту переменную. Ошибка всплыла на строке $layer->data_seek(0);
Осталось найти эквивалент этой функции в PDO.
Спасибо за помощь)
avatar
Я думаю, что будет работать и без этой строки.
Только зарегистрированные и авторизованные пользователи могут оставлять комментарии.