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

Выборка записей в компоненте из другого компонента

Страницы: 1  |  2
25.03.2010, 10:09
Garlex
Garlex

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

Есть два компонента:
1. Партнёры (название и картинка);
2. Проекты (название, описание, картинка, номера партнёров через запятую).

Как вывести партнёров в компоненте проекты?
Попробовал сделать так:
Код:
".nc_array_to_string( (array)explode(',', $f_ClientID), array('element'=> "
<span>".listQuery("SELECT Title FROM Message9 WHERE Message_ID = %ELEMENT ", '$data[Title]')."</span>
", 'divider' => ', ' ) )."


но выводит след. ошибку:
Код:
Query: SELECT Title FROM Message9 WHERE Message_ID = 2

Error: You have an error in your SQL syntax; check the manual that corresponds to your MySQL
server version for the right syntax to use near '2' at line 1


«Сон разума, порождает чудовище».
25.03.2010, 10:30
malich
Андрей Малков

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

попробуйте за экранировать sql запрос, как то так

Код:
".nc_array_to_string( (array)explode(',', $f_ClientID), array('element'=> "
<span>".listQuery("SELECT Title FROM Message9 WHERE Message_ID = %ELEMENT ", "$data[Title]")."</span>", 'divider' => ', ' ) )."
25.03.2010, 10:45
Garlex
Garlex

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

Не поможет. Тут именно проблема в %ELEMENT. В MySql %-заменяют любой символ, а в неткате это объект из массива.

«Сон разума, порождает чудовище».
25.03.2010, 10:47
malich
Андрей Малков

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

1. а причем здесь %ELEMENT ? Это всего лишь шаблон для замены вместо которого в процессе выполнения функции nc_array_to_string подставляется нужное значение, и в sql запрос должно подавать уже именно оно, а не %ELEMENT

найдите поиском в папочке /netcat/ function nc_array_to_string и посмотрите как она работает.

2. как вариант можете sql запрос вынести в функцию

netcatmodulesdefaultfunction.inc.php

Код:
function myFunction($a)
{
$r = listQuery("SELECT Title FROM Message9 WHERE Message_ID = $a ", "$data[Title]");
return $r;
}


Код:
".nc_array_to_string( (array)explode(',', $f_ClientID), array('element'=> "<span>".myFunction(%ELEMENT)."</span>", 'divider' => ', ' )  )."
25.03.2010, 11:03
Garlex
Garlex

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

Нет... Что-то не работаетгрустный
Вот что теперь выводит:
Parse error: syntax error, unexpected '%', expecting ')' in Z:homesite.ruwwwnetcatfull.php(503) : eval()'d code on line 18

«Сон разума, порождает чудовище».
25.03.2010, 11:16
Garlex
Garlex

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

malich писал(а):
1. а причем здесь %ELEMENT ? Это всего лишь шаблон для замены вместо которого в процессе выполнения функции nc_array_to_string подставляется нужное значение, и в sql запрос должно подавать уже именно оно, а не %ELEMENT


Он как раз и срабатывает нормально, всё подставляет:
Query: SELECT Title FROM Message9 WHERE Message_ID = 2, вот тут видно, что подставил "2"

«Сон разума, порождает чудовище».
25.03.2010, 11:16
malich
Андрей Малков

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

У меня с примером из документации, замечательно работает

Код:
".nc_array_to_string($f_spisok, array( 'prefix' => 'List:<br>','element' => '".myFunction(%ELEMENT)."','divider' => '<br>','suffix' => 'end' ))."


а вот ваш пример, даже без sql запроса не работает, что то вы там намудрили.
25.03.2010, 11:32
Garlex
Garlex

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

malich писал(а):
У меня с примером из документации, замечательно работает

а вот ваш пример, даже без sql запроса не работает, что то вы там намудрили.


Работает без sql запроса, если не разбивать explode и если вставить просто номер 2 в sql запросе.

«Сон разума, порождает чудовище».
25.03.2010, 11:46
Garlex
Garlex

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

В общем разобрался, с выносом функции помогло, но была ошибочка с синтаксесе.

Напишу для тех, кому понадобится, а то ответы обычно тут не пишут.улыбка

Что нужно было:
В одном компоненте вывести записи из другого при указании номеров выводимых объектов.

Как сделано:
1. В компоненте, где надо вывести объекты, было создано поле (ClientID - строка), где будут вводится номера
выводимых объектов.
2. Разбита строка при помощи explode и создан массив.
Код:
".nc_array_to_string( (array)explode(',', $f_ClientID), array('element'=> '<span>".myFunction(%ELEMENT)."</span>', 'divider' => ', ' )  )."


4. Функция выбора из базы вынесена в файлик netcatmodulesdefaultfunction.inc.php
Код:
function myFunction($a)

{

$r = listQuery("SELECT Title FROM Message9 WHERE Message_ID = $a ", "$data[Title]");

return $r;

}


Спасибо за помощь - Малкову Андрею;)

«Сон разума, порождает чудовище».
30.03.2010, 10:52
iprus

Зарегистрирован:
2008-10-07
Сообщений: 73

chester22 писал(а):
Напишу для тех, кому понадобится, а то ответы обычно тут не пишут.улыбка

Спасибо, пригодилось улыбка
04.04.2010, 01:38
DiGGy
DiGGy
DiGGy

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

chester22 писал(а):
Есть два компонента:
1. Партнёры (название и картинка);
2. Проекты (название, описание, картинка, номера партнёров через запятую).

Как вывести партнёров в компоненте проекты?


В компоненте проектов в нужном месте пишите ".s_list_class(xxx,yyy,"&isPartners=1")."
Ну а в компоненте партнеров обрабатываете в сист. настройках переменную $isPartners выводите что нужно. Если хотите свой внешний вид сделать для партнеров, то для этого оч. удачно подойдут "шаблоны компонента".

зы: И не надо никаких ф-ий писать и т.п. Это все равно что из москвы в питер через чукотку ехать.

Temet nosce...
198 196 2010-04-21 08:56:28 9898
Страницы: 1  |  2
Описание проекта