Регистрация
Регистрируясь, вы подтверждаете свое согласие с соглашением об использовании персональных данных.
Восстановление пароля

Вопрос по компонентам NetCat

16.05.2010, 10:56
Гость
Гость

Здравствуйте. Поставили задачу разработать модуль под NetCat для вывода данных из отдельной БД. Сам я с NetCat'ом работаю впервые, NetCat API для меня пока не сильно понятен. Знающий человек подсказал, что можно просто создать модуль с функциями на PHP, а потом вызывать эти функции в компоненте опять же на языке PHP.

Следуя такому совету, в файле function.inc.php прописал пробную функцию с подключением к БД, SQL-запросом на выборку, массивом mysql_fetch_array и циклом по выводу данных из массива, пока в нём что-то есть. Попробовал вызвать функцию в обычном php-файле - работает.

В NetCat'e создал новый компонент, где в префиксе списка объектов попытался вызвать нужную функцию следующим образом: "; function();". Создал пробный раздел, куда предполагается это всё выводить, и подключил к нему созданный компонент.

Данные на сайте вывелись ровно один раз. При этом в свойствах раздела, на вкладке "Редактирование" эти данные висят постоянно, а в самом разделе на сайте их нет. В руководстве по компонентам про использование PHP написано так: "; ...PHP-код... $result.=" . Собственно делал, руководствуясь этим, только переменную $result не задействовал. Пожалуйста, помогите с этим разобраться. не уверен
16.05.2010, 19:29
malich
Андрей Малков

Зарегистрирован:
2005-08-09
Сообщений: 522

1. пишите свою функцию в /netcat/modules/function.inc.php
Код:

function myfunction()
{
$r=.....;
return $r;
}


затем в компоненте или макете дизайна
Код:
".myfunction()."


2. либо просто создаем компонент и вставляем прямо в него php код
Код:
";
PHP-код
$result.= "
16.05.2010, 20:47
Гость
Гость

Я уже пробовал присваивать и возвращать значение, и в компонент кусок кода кидал, даже просто писал "; echo "Hello, World!". По какой-то причине компонент в разделе срабатывает ровно один раз. После обновления страницы или повторного захода в этот раздел - чистый лист. Хотя в свойствах компонента на вкладке "Редактирование" все отображается. Впрочем, у меня демо-версия, может поэтому так стыдно.

Ещё важный вопрос: не могу понять, как в php-скрипте использовать переменную $PHP_AUTH_USER из модуля авторизации. В частности, по заданию надо извлекать некоторые данные из отдельной базы, сверяясь с этой переменной. Планируется довольно массивный скрипт, поэтому в макете или компоненте писать подобное ни к чему. Вот я попробовал написать примерно следующее:
Цитата:


function myfunc()

{

$connect = mysql_connect('server', 'user', 'pass');

mysql_select_db('baza',$connect);

$query = mysql_query("SELECT * FROM users WHERE login = '".$PHP_AUTH_USER."'");

$row = mysql_fetch_array($query);

printf ("<div> Имя: %s </br> Адрес: %s </div>",$row['name'],$row['addr']);

}


Результата не было - пустые значения. Вместо '".$PHP_AUTH_USER."' пробовал также '$PHP_AUTH_USER' и '".$_SERVER['PHP_AUTH_USER']."' <-- такое где-то тут видел. Но видимо, надо где-то отдельно вызывать $MODULE_VARS['auth'] или ещё что-то. Подскажите, пожалуйста.
16.05.2010, 21:28
malich
Андрей Малков

Зарегистрирован:
2005-08-09
Сообщений: 522

либо
Код:
function myfunc()
{
global $PHP_AUTH_USER;
$connect = mysql_connect('server', 'user', 'pass');
mysql_select_db('baza',$connect);
$query = mysql_query("SELECT * FROM users WHERE login = '".$PHP_AUTH_USER."'");
$row = mysql_fetch_array($query);
return printf ("<div> Имя: %s </br> Адрес: %s </div>",$row['name'],$row['addr']);
}

либо
Код:
".myfunc($PHP_AUTH_USER)."

function myfunc($userid)
{
$connect = mysql_connect('server', 'user', 'pass');
mysql_select_db('baza',$connect);
$query = mysql_query("SELECT * FROM users WHERE login = '".$userid."'");
$row = mysql_fetch_array($query);
return printf ("<div> Имя: %s </br> Адрес: %s </div>",$row['name'],$row['addr']);
}
17.05.2010, 00:03
Гость
Гость

ни в какую. выводится непонятно откуда взявшаяся цифра "31". или 3 и 1 подряд.
17.05.2010, 07:50
malich
Андрей Малков

Зарегистрирован:
2005-08-09
Сообщений: 522

Все должно отлично работать, напишите в /netcat/modules/default.inc.php
Код:

function myfunc()
{
$r = "....<br>,,,,<br>.....";
return $r;
}

и попробуйте вывести в каком то месте на сайте
Код:
".myfunc()."


Если все будет хорошо, значит мучайте свой скрипт.
17.05.2010, 17:12
Хыиуду

Зарегистрирован:
2009-10-21
Сообщений: 156

$connect = mysql_connect('server', 'user', 'pass');
mysql_select_db('baza',$connect);
Это совершенно излишне - неткат сам подключается к базе, поэтому можете начинать работу с базой непосредственно с mysql_query
09.07.2010, 12:17
DiGGy
DiGGy
DiGGy

Зарегистрирован:
2005-04-04
Сообщений: 1546

Цитата:
Это совершенно излишне - неткат сам подключается к базе, поэтому можете начинать работу с базой непосредственно с mysql_query


В постановке задачи указано, что БД другая, соотв-но к ней коннект другой.

Если другая БД - mySQL, то можно использовать штатные классы неткета для работы с ней. Если допустим Oracle, MS SQl Server и т.п., то лучше написать свои классы и юзать их.

Temet nosce...
198 196 2010-07-09 12:17:18 10138
Описание проекта