Перейти к содержимому


создание ссылки на таблицу с отобранными записями

таблица ссылки фильтр

Сообщений в теме: 13

#1 andibrag

    Прежде, чем задать вопрос, продумайте свое решение.

  • Активный пользователь
  • PipPipPip
  • 1 356 сообщений
  • Пол:Мужчина
  • Город:Санкт-Петербург

Отправлено 07 Август 2013 - 18:53

Есть задача сформировать ссылку через вычисления на таблицу с отобранными записями, например, у которых поле Заказ=1.
Что-то вроде
/cb/fields.php?table=62&f1696=1
, где f1696 - поле связи с Заказом.
Подобный синтаксис я использовал при создании ссылки на новую запись с уже внесенным значением
/cb/view_line2.php?table=47&f1687=305&line=new
Открывалось новое Задание, уже связанное с определенным Заказом (поле f1687).
Перепробовал массу вариантов. Пробовал использовать синтаксис ссылок по аналогии со связанными таблицами. Но там видимо куки задействованы.
Подскажите, пожалуйста, решение, чтобы не терять время.

Творческая группа "ТАВР".

www.TAVR.pro Художественная ковка, металлоконструкции.

www.СтолМет.рф Складные столы, стулья и системы для их хранения


#2 wondertalik

    Активный участник

  • Пользователи
  • PipPipPip
  • 1 159 сообщений
  • Пол:Мужчина
  • Город:Кривой Рог, Украина

Отправлено 07 Август 2013 - 23:28

Интересная задача. Я бы тоже хотел знать. На вскидку нужно создавать вычисления которое будет формировать фильтр в нужной таблице и перенаправлять на эту страницу. Кусок кода, правда с отчета. Но подогнать можно под нужную задачу:
  reset_filter(42);
  set_filter(1157, "period", $_REQUEST['date1'], $_REQUEST['date2'], " and ");
  set_filter(438, "=", $_GET['manager'], "", "");
  header("Location: ".$config["site_root"]."/fields.php?table=42&filter=48");

А вообще мне кажется уже есть готовый механизм. Короче ждем от разработчиков ответа, а там придумать можно как мне кажется.

#3 CbCoder

    Активный участник

  • Программист ООО "КБ"
  • PipPipPip
  • 8 759 сообщений
  • Пол:Мужчина
  • Город:Казань

Отправлено 08 Август 2013 - 10:02

Цитата

Кусок кода, правда с отчета. Но подогнать можно под нужную задачу

Это наиболее оптимальный вариант. Данные функции автоматически заполняют переменные сессии, ответственные за установку расширенного поиска. Альтернативный вариант, через GET, можно увидеть, если вручную применить расширенный поиск, в адресной строке после перезагрузки страницы. По сути он делает тоже самое, т.е. заполняет те же переменные сессии, но в отличии от первого варианта, позволяет передавать поиск сразу по ссылке (например, по электронной почте), без вызова функций. Но его существенно менее удобно формировать внутри вычисления, поэтому рекомендую вариант 1.

Цитата

А вообще мне кажется уже есть готовый механизм.

Это и есть готовый механизм, других механизмов не существует (все варианты поиска используют один).

Цитата

Пробовал использовать синтаксис ссылок по аналогии со связанными таблицами. Но там видимо куки задействованы.

Во-первых, не куки, а сессии, о чем я выше написал. Во-вторых, там в ссылке передаются параметры специально для фильтра по связанной таблице. Они в том числе задают и условие поиска. Но для вашей задачи это вряд ли подходит, универсальное решение я описал выше.

#4 andibrag

    Прежде, чем задать вопрос, продумайте свое решение.

  • Активный пользователь
  • PipPipPip
  • 1 356 сообщений
  • Пол:Мужчина
  • Город:Санкт-Петербург

Отправлено 08 Август 2013 - 12:14

Просмотр сообщенияwondertalik (07 Август 2013 - 23:28) писал:

На вскидку нужно создавать вычисления которое будет формировать фильтр в нужной таблице и перенаправлять на эту страницу.
У меня это используется в табличном виде. Т.е. у каждой записи есть свое поле со ссылкой, использовать фильтр не получится.
Скорее всего придется использовать вариант с Get-переменными. Но с ними я экспериментировал - не совсем корректно работает, если открыто несколько таблиц с отобранными записями. В частности кнопка ВЕРНУТЬСЯ В ТАБЛИЦУ возвращает не туда, куда следует. Видимо из-за того, что используется фильтр, созданный при последнем вызове, а не изначальном.

Просмотр сообщенияCbCoder (08 Август 2013 - 10:02) писал:

там в ссылке передаются параметры специально для фильтра по связанной таблице. Они в том числе задают и условие поиска.
Ужели упростить нельзя и не использовать фильтры? В get-переменных есть все параметры, по которым можно вернуться в нужную таблицу. Проведите эксперимент. Откройте две связанные таблицы, например История работы, для разных Контрагентов. Кликните в обеих любую запись и вернитесь в таблицу посредством выше названной кнопки. Вы попадете в одну и ту же таблицу, с отбором по одному и тому же Контрагенту, у которого отбор был произведен последним. При этом get-параметры, передаваемые по ссылке - игнорируются. Видимо подменяются значениями из последней сессии.

Творческая группа "ТАВР".

www.TAVR.pro Художественная ковка, металлоконструкции.

www.СтолМет.рф Складные столы, стулья и системы для их хранения


#5 CbCoder

    Активный участник

  • Программист ООО "КБ"
  • PipPipPip
  • 8 759 сообщений
  • Пол:Мужчина
  • Город:Казань

Отправлено 08 Август 2013 - 12:45

Цитата

Ужели упростить нельзя и не использовать фильтры?

Какие фильтры, не понял? Что именно упростить?

Цитата

Видимо подменяются значениями из последней сессии.

Естественно, я же вам написал выше - любые параметры, используемые при задании любого вида поиска (будь то обычный поиск, или фильтр по связанной таблице), задают одни и те же переменные сессии, следовательно последний поиск затирает, или в лучшем случае, накладывается, на поиск предыдущий. По этой причине использовать в таблице одновременно разные "поиски" невозможно.

#6 andibrag

    Прежде, чем задать вопрос, продумайте свое решение.

  • Активный пользователь
  • PipPipPip
  • 1 356 сообщений
  • Пол:Мужчина
  • Город:Санкт-Петербург

Отправлено 08 Август 2013 - 13:46

Просмотр сообщенияCbCoder (08 Август 2013 - 12:45) писал:

...любые параметры, используемые при задании любого вида поиска (будь то обычный поиск, или фильтр по связанной таблице), задают одни и те же переменные сессии, следовательно последний поиск затирает, или в лучшем случае, накладывается, на поиск предыдущий.
Мне не совсем понятно использование сессий при возврате в таблицу.
Так выглядит ссылка кнопки ВЕРНУТЬСЯ В ТАБЛИЦУ
/cb/fields.php?table=62&rel_table=42&rel_line=311&rel_field=723&filter=88#tr1307
Т.е. получается, что все параметры отбора родительской таблицы есть в наличии.
Но при нажатии на нее, мы попадем в таблицу с отбором записей, которая была сформирована последней, независимо от того что передается через GET.
Мне лично этот механизм не понятен.

Просмотр сообщенияCbCoder (08 Август 2013 - 12:45) писал:

Что именно упростить?
То, что описано выше и можно упростить. Использовать переменные из GET, а не из сессий.

Просмотр сообщенияCbCoder (08 Август 2013 - 12:45) писал:

Какие фильтры, не понял?
В строке используется параметр filter=88. Я решил, что строка формирует временный фильтр с номером 88, который содержит параметры отбора и именно он используется при формировании таблицы с необходимыми записями.

Творческая группа "ТАВР".

www.TAVR.pro Художественная ковка, металлоконструкции.

www.СтолМет.рф Складные столы, стулья и системы для их хранения


#7 CbCoder

    Активный участник

  • Программист ООО "КБ"
  • PipPipPip
  • 8 759 сообщений
  • Пол:Мужчина
  • Город:Казань

Отправлено 08 Август 2013 - 14:05

Цитата

Т.е. получается, что все параметры отбора родительской таблицы есть в наличии.
Но при нажатии на нее, мы попадем в таблицу с отбором записей, которая была сформирована последней, независимо от того что передается через GET.

Вы можете задать в связанной таблице свой поиск, наложенный на фильтр по связанной таблице, или вообще переопределить его. В этом случае, вряд ли вам понравиться перетирание вашего собственного поиска при возврате в таблицу. Именно по этой причине и используются переменные сессии расширенного поиска, а не параметры GET из адресной строки. Они передаются лишь для сохранения возможности возврата в исходную таблицу, из которой перешли в связанную, а не для повторного применения фильтра.

#8 wondertalik

    Активный участник

  • Пользователи
  • PipPipPip
  • 1 159 сообщений
  • Пол:Мужчина
  • Город:Кривой Рог, Украина

Отправлено 07 Апрель 2016 - 09:37

define("ROOT_DIR", __DIR__."/../../");
$config['script_noauth'] = 1;

require_once(ROOT_DIR."common.php");

reset_filter(341);
  set_filter(6951, "=", $_GET['prd'], "", " OR ");
  set_filter(8011, "=", $_GET['prd']);

  header("Location: ".$config["site_root"]."/fields.php?table=341&filter=321");

Суть в том, что нужно иметь ссылку в таблице, нажатие на которую в другой таблице устанавливает требуемый поиск. Сделал через редирект /modules/ed/redirect.php?prd=8.
1. Если перехожу первый раз, поиск отрабатывает. Но если захожу второй раз по этой же ссылке, то получаю
Ошибка:
SELECT count(*) as total_rec FROM f_data341 WHERE status=0 and (f6951 IN (8) OR f8011 IN (8)f6951 IN (8) OR f8011 IN (8))
2. Каждый раз когда захожу получаю еще один дубль f6951 IN (8) OR f8011 IN (8).
Ошибка системы.
Error generated:
/home/hogwarts-kali/public_html/fields.php(1924) : data_select_field()
Ошибка SQL запроса:
SELECT count(*) as total_rec FROM f_data341 WHERE status=0 and (f6951 IN (8) OR f8011 IN (8)f6951 IN (8) OR f8011 IN (8)f6951 IN (8) OR f8011 IN (8)f6951 IN (8) OR f8011 IN (8))
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 'f6951 IN (8) OR f8011 IN (8)f6951 IN (8) OR f8011 IN (8)f6951 IN (8) OR f8011 IN' at line 1
3. Убираю $config['script_noauth'] = 1, тогда вообще не работает.

В чем ошибся? В тп обращался, ответили "По вопросу с вычислениями Вам стоит обратиться непосредственно на форум. В рамки техподдержки помощь по написанию вычислений не входит. Судя по всему, все же в коде допущены ошибки."

Сообщение отредактировал wondertalik: 07 Апрель 2016 - 09:40


#9 CbCoder

    Активный участник

  • Программист ООО "КБ"
  • PipPipPip
  • 8 759 сообщений
  • Пол:Мужчина
  • Город:Казань

Отправлено 07 Апрель 2016 - 09:44

Как я понял, скрипт у вас не в корне лежит. Т.к. механизм поиска основан на сессиях (точнее, его сохранение между переходами), то скорее всего что-то с этим связано. Более точно сказать не могу.

#10 wondertalik

    Активный участник

  • Пользователи
  • PipPipPip
  • 1 159 сообщений
  • Пол:Мужчина
  • Город:Кривой Рог, Украина

Отправлено 07 Апрель 2016 - 09:49

Просмотр сообщенияCbCoder (07 Апрель 2016 - 09:44) писал:

Как я понял, скрипт у вас не в корне лежит. Т.к. механизм поиска основан на сессиях (точнее, его сохранение между переходами), то скорее всего что-то с этим связано. Более точно сказать не могу.
Не совсем понимаю при чем здесь корень. Но положил в корень. Результат тот же. Есть решение?

И подскажите, пожалуйста, как такой же фильтр сформировать гетом. Посмотрел на ссылку. Но не понял как устанавливать условия поиска. Спасибо

Сообщение отредактировал wondertalik: 07 Апрель 2016 - 09:52


#11 CbCoder

    Активный участник

  • Программист ООО "КБ"
  • PipPipPip
  • 8 759 сообщений
  • Пол:Мужчина
  • Город:Казань

Отправлено 07 Апрель 2016 - 09:58

Цитата

Не совсем понимаю при чем здесь корень. Но положил в корень. Результат тот же.

Да, извиняюсь, поленился код посмотреть. У вас ошибка в коде - функция reset_filter сбрасывает поиск по полю, а для сброса по таблице необходимо использовать reset_filters.

Цитата

И подскажите, пожалуйста, как такой же фильтр сформировать гетом. Посмотрел на ссылку. Но не понял как устанавливать условия поиска. Спасибо

У меня самого нет готовой схемы. Узнать ее можно из адреса, после ручного задания и и применения расширенного поиска.

#12 wondertalik

    Активный участник

  • Пользователи
  • PipPipPip
  • 1 159 сообщений
  • Пол:Мужчина
  • Город:Кривой Рог, Украина

Отправлено 07 Апрель 2016 - 10:18

Просмотр сообщенияCbCoder (07 Апрель 2016 - 09:58) писал:

Да, извиняюсь, поленился код посмотреть. У вас ошибка в коде - функция reset_filter сбрасывает поиск по полю, а для сброса по таблице необходимо использовать reset_filters.
Это помогло, но теперь другая проблема не устанавливается условия или и нажимая на сам поиск в расширенном поиске тоже пусто. Вот скрин

#13 CbCoder

    Активный участник

  • Программист ООО "КБ"
  • PipPipPip
  • 8 759 сообщений
  • Пол:Мужчина
  • Город:Казань

Отправлено 07 Апрель 2016 - 10:25

Если речь о связке между условиями, то ее необходимо задавать в нижнем регистре: " or "

#14 wondertalik

    Активный участник

  • Пользователи
  • PipPipPip
  • 1 159 сообщений
  • Пол:Мужчина
  • Город:Кривой Рог, Украина

Отправлено 07 Апрель 2016 - 11:41

Просмотр сообщенияCbCoder (07 Апрель 2016 - 10:25) писал:

Если речь о связке между условиями, то ее необходимо задавать в нижнем регистре: " or "
Благодарю за помощь. На случай, если кому-то пригодится.

define("ROOT_DIR", __DIR__."/../../");
$config['script_noauth'] = 1;
require_once(ROOT_DIR."common.php");
  reset_filters(341);
  set_filter(6951, "=", $_GET['prd'], "", " OR ");
  set_filter(8011, "=", $_GET['prd']);
  header("Location: ".$config["site_root"]."/fields.php?table=341&filter=321");

Уважаемые форумчане, возможно кто-то уже разбирался с гетом. Если кто-то потерял на это время и есть инфа - прошу отписаться. Спасибо.

Сообщение отредактировал wondertalik: 07 Апрель 2016 - 11:41






Количество пользователей, читающих эту тему: 2

0 пользователей, 2 гостей, 0 анонимных