Путь к файлу в сниппете.
        Подскажите, пожалуйста. Написала скриптик, сейчас пытаюсь сделать из него сниппет — первый раз в жизни. И проблема скорее всего в пути к файлу, по которому этот сниппет должен искать. У меня написано вот так:
Но может быть тут надо выводить относительно папок сайта? Какой нужен путь, что этот скрипт его увидел?
Весь сниппет:
    
    
                                                                                
            if ( isset($_GET['summ']) && isset($_GET['time']) ) {
 	$summ = floatval($_GET['summ']);
 	$time = (int) $_GET['time'];
	$handle = fopen(MODX_BASE_PATH.'/assets/files/banks.csv', 'r');
   
	if ($handle)  {
		searchInFile($handle, $summ, $time);
        fclose($handle);
	} 	
}Путь выводит полный серверный — /home/n/nashasemru/fksrf/public_html/assets/files/banks.csvНо может быть тут надо выводить относительно папок сайта? Какой нужен путь, что этот скрипт его увидел?
Весь сниппет:
<?php
define('MODX_API_MODE', true);
//константы, задающие столбцы в файле
define('COL_BANK',   0); //банк
define('COL_FROM_1', 3); // от с открытием р/с
define('COL_TO_1', 	 4); // до с открытием р/с
define('COL_FROM_2', 7); // от без открытия р/с
define('COL_TO_2', 	 8); // до без открытия р/с
define('COL_TIME', 	 2); // срок гарантии, вводится пользователем
define('COL_TARIF1', 5); // тариф с открытием  р/с
define('COL_TARIF2', 9); // тариф без открытия р/с
define('COL_MIN1', 	 6); // минимальная сумма гарантии с открытием  р/с
define('COL_MIN2', 	 10); // минимальная сумма гарантии без открытия  р/с
function showResult($summ, $time, $ot, $do, $t, $rate, $min, $bank, $message) {
	if ( ($summ > $ot) && ($summ < $do) && ($time == $t) ) {
		$bg = $summ * $rate;	
		if ($bg < $min) {
			$bg = $min;
		}
		echo 'Тариф ' . $message . ' р\с на сумму '.$summ.': в банке ' . $bank . ' на срок ' . $time . ' мес. ';						
		echo 'с процентной ставкой ' . $rate . ' будет ' . $bg . '
<hr>';
	}
}
function searchInFile($handle, $summ, $time) {
	while (($data = fgetcsv($handle, 2000, ';')) !== FALSE) {
		$bank = $data[COL_BANK];
		$ot1 = (int) $data[COL_FROM_1];
		$do1 = (int) $data[COL_TO_1];
		$ot2 = (int) $data[COL_FROM_2];
		$do2 = (int) $data[COL_TO_2];
		$t = (int) $data[COL_TIME]; // срок гарантии, ищем в файле
		$rate1 = floatval( str_replace(",",  ".", $data[COL_TARIF1]) );
		$rate2 = floatval( str_replace(",",  ".", $data[COL_TARIF2]) );
		$min1 = (int) $data[COL_MIN1];
		$min2 = (int) $data[COL_MIN2];
	    if (!empty($ot1) && !empty($do1)) {
	    	showResult($summ, $time, $ot1, $do1, $t, $rate1, $min1, $bank, 'с открытием');
	    }
	    if (!empty($ot2) && !empty($do2)) {
	    	showResult($summ, $time, $ot2, $do2, $t, $rate2, $min2, $bank, 'без открытия');
	    }
	}
}
if ( isset($_GET['summ']) && isset($_GET['time']) ) {
 	$summ = floatval($_GET['summ']);
 	$time = (int) $_GET['time'];
	$handle = fopen(MODX_BASE_PATH.'assets/files/banks.csv', 'r');
   return MODX_BASE_PATH.'assets/files/banks.csv';
	if ($handle)  {
		searchInFile($handle, $summ, $time);
        fclose($handle);
	} 	
}
return showResult($summ, $time, $ot, $do, $t, $rate, $min, $bank, $message);Вообще можно функции писать в сниппете или нужно выводить их в файлы?    Комментарии: 10
                Как минимум вижу лишнюю косую:
Пути для работы с файлами всегда абсолютные. Даже если где-то используются относительные, это просто означает, что в другом месте они всё равно приводятся к абсолютному виду.
                    MODX_BASE_PATH.'/assets/files/banks.csv'заменить наMODX_BASE_PATH.'assets/files/banks.csv'Пути для работы с файлами всегда абсолютные. Даже если где-то используются относительные, это просто означает, что в другом месте они всё равно приводятся к абсолютному виду.
                Да, я потом исправила, но все равно не работает. Видимо дело в другом.
Спасибо! Буду искать дальше.
                    Спасибо! Буду искать дальше.
                Каким-то чудом после нашего общения сниппет заработал))) Ура!            
                    define('MODX_API_MODE', true);Вот это нужно только если modX подключается через отдельный php файл.В showResult нужно заменить
echo 'Тариф ' . $message . ' р\с на сумму '.$summ.': в банке ' . $bank . ' на срок ' . $time . ' мес. ';						
echo 'с процентной ставкой ' . $rate . ' будет ' . $bg . 'наreturn 'Тариф ' . $message . ' р\с на сумму '.$summ.': в банке ' . $bank . ' на срок ' . $time . ' мес. ' .						
'с процентной ставкой ' . $rate . ' будет ' . $bg . ';В начале searchInFile создать переменную $result = ''; и писать в неё данные, которые потом тоже вернуть через return:
$result = '';
while (($data = fgetcsv($handle, 2000, ';')) !== FALSE) {
	// ...
	if (!empty($ot1) && !empty($do1)) {
		$result .= showResult($summ, $time, $ot1, $do1, $t, $rate1, $min1, $bank, 'с открытием');
	}
	if (!empty($ot2) && !empty($do2)) {
		$result .= showResult($summ, $time, $ot2, $do2, $t, $rate2, $min2, $bank, 'без открытия');
	}
}
return $result;Ну и в основном коде тоже нужен return:
$result = '';
if ( isset($_GET['summ']) && isset($_GET['time']) ) {
	// ...
	if ($handle)  {
		$result = searchInFile($handle, $summ, $time);
		fclose($handle);
	}
}
return $result;То есть, всё что делается должно сохраняться в переменную и возвращаться только в конце работы сниппета. Никаких echo и print_r() быть не должно! Только для отладки, но никак не в рабочем коде.
                Огромное спасибо! Сейчас перепишу.
print_r и echo — да, это для отладки только было.
                    print_r и echo — да, это для отладки только было.
return 'Тариф ' . $message . ' р\с на сумму '.$summ.': в банке ' . $bank . ' на срок ' . $time . ' мес. ' .						
'с процентной ставкой ' . $rate . ' будет ' . $bg . ';Вот эта штука почему-то никак не хочет срабатывать, только с echo работает. Из-за чего так может быть?            ' будет ' . $bg ;            
                Ну это да, синтаксис правильный. Просто заменила echo на return и перестало работать.            
                    
                Она не может не сработать.
А вот ты могла что-то не переделать в функции searchInFile — именно там собираются возвращаемые данные.
                    А вот ты могла что-то не переделать в функции searchInFile — именно там собираются возвращаемые данные.
                И правда… Благодарю еще раз)            
                    
                            Авторизуйтесь или зарегистрируйтесь, чтобы оставлять комментарии.