Как подружить pdoPage с выборкой дублей тикетов?
[Решено] Мне необходимо вывести Тикеты, у которых есть чекбокс в ТВполе1, ТВполе2, ТВполе3. При том, что Тикет может иметь несколько включенных полей и в выборку должно попадать соответствующее количество дублей этого Тикета.
Простое условие в $where[0] = "(paneloff1 = 'Включить') OR (paneloff2 = 'Включить')OR (paneloff3 = 'Включить')"; — выбирает только «уникальные» значения.
Я добавил в снипет getTickets трехтактный цикл в секцию (// Fields to select).
Тогда getTickets выводит Тикеты с дублями, как требуется. Если обернуть getTickets в пагинацию, пагинация «ломается» и не работает. Похоже в pdoPage передаются только данные последнего запросы выборки = $pdoFetch->run();, а предыдущие не учитываются. Не могу понять откуда pdoPage из getTickets выбирает переменные total, totalVar и куда в getTickets отдает limit, offset.
Подскажите, пожалуйста, что тут можно сделать?
Простое условие в $where[0] = "(paneloff1 = 'Включить') OR (paneloff2 = 'Включить')OR (paneloff3 = 'Включить')"; — выбирает только «уникальные» значения.
Я добавил в снипет getTickets трехтактный цикл в секцию (// Fields to select).
Тогда getTickets выводит Тикеты с дублями, как требуется. Если обернуть getTickets в пагинацию, пагинация «ломается» и не работает. Похоже в pdoPage передаются только данные последнего запросы выборки = $pdoFetch->run();, а предыдущие не учитываются. Не могу понять откуда pdoPage из getTickets выбирает переменные total, totalVar и куда в getTickets отдает limit, offset.
Подскажите, пожалуйста, что тут можно сделать?
Комментарии: 10
Ещё кто-нибудь, кроме Василия Наумкина, знает этот снипет?! Киньте хоть в какую сторону, где откапывать?!
Ну, и где наши мастодонты? Все тихаряться? Никто вам не поверит, что не знаете ответа на такой легкий вопрос для профи. Просыпайтесь господа!
А я тем временем закинул в getTickets такую конструкцию
Что еще поворошить? Подсказываем, не стесняемся, рассмотрю даже самые невероятные идеи.
А я тем временем закинул в getTickets такую конструкцию
$total = count($output);
$totalVar = $modx->getOption('totalVar', $scriptProperties, 'total');
$modx->setPlaceholder($totalVar,$total);
$limit=$modx->getOption('limit', $scriptProperties, 8);
$offset=$modx->getOption('offset', $scriptProperties, 0);
Чтобы скормить pdoPage количество тикетов для вывода. В пагинации теперь рисует две страницы- это правильно. А вот лимит в 8 игнорирует и выводит 10 тикетов, при переходе на вторую страницу показывает снова первую (считает такой переход ошибкой).Что еще поворошить? Подсказываем, не стесняемся, рассмотрю даже самые невероятные идеи.
Помочь кто-нибудь может?! Просим автора, Василий, не посчитайте за труд, бросьте взгляд пожалуйста! Мольба!
Ответ-то есть, но готового решения никто не предоставит, так как задача довольно специфическая. Теория такая:
Нужно производить выборку по объектам modTemplateVarResource, к каждому из которых «приджойнить» соответствующий ресурс (тикет), тогда у вас и будут соответствующие «дубли».
А вот чтобы реализовать это на практике, нужно составить правильный запрос, для чего нужно создать тестовый сервер, создать эти ТВ-шки, несколько тикетов и тестировать. Это, конечно, долго и никто бесплатно делать этого не собирается.
Нужно производить выборку по объектам modTemplateVarResource, к каждому из которых «приджойнить» соответствующий ресурс (тикет), тогда у вас и будут соответствующие «дубли».
А вот чтобы реализовать это на практике, нужно составить правильный запрос, для чего нужно создать тестовый сервер, создать эти ТВ-шки, несколько тикетов и тестировать. Это, конечно, долго и никто бесплатно делать этого не собирается.
Фу, выдохнул с облегчением, значит не вопиющий глас в пустыне! Спасибо за реплей!
У меня большое желание сделать что-то самостоятельно, это приносит удовлетворение.
Благодарю за пинок в нужном направлении :), а то я стал затухать, мне как раз не хватало идей, вариантов. Попробую поработать с объектами modTemplateVarResourc
У меня большое желание сделать что-то самостоятельно, это приносит удовлетворение.
Благодарю за пинок в нужном направлении :), а то я стал затухать, мне как раз не хватало идей, вариантов. Попробую поработать с объектами modTemplateVarResourc
Сделал вывод тикетов используя объекты modTemplateVarResource. Вы правы, это более грамотный подход.
Но вопрос все равно остался открытым. pdoPage никак не оборачивает. В обычном режиме getTickets сам не заполняет плейсходер, а «total» устанавливается в placeholder для пагинации в pdoFetch когда запускается метод run. Так как я использую pdoFetch::getCollection и затем pdoFetch::getObject, то этот плайсходер не заполняется и пагинация тупит.
Но вопрос все равно остался открытым. pdoPage никак не оборачивает. В обычном режиме getTickets сам не заполняет плейсходер, а «total» устанавливается в placeholder для пагинации в pdoFetch когда запускается метод run. Так как я использую pdoFetch::getCollection и затем pdoFetch::getObject, то этот плайсходер не заполняется и пагинация тупит.
Ну так total же можно и самостоятельно устанвить
$modx->setPlaceholder($totalVar, $total);
Да, я делал и писал об этом выше, пагинатор появлялся, но при попытке перехода на другие страницы сбрасывал на первую :(
помогло вот это решение — how-to-make-the-output-of-getcollection-with-pagination-pages
Особая благодарность Илье Уткину за поддержку!
Особая благодарность Илье Уткину за поддержку!
1. pdoPage из getTickets выбирает переменные total, totalVar через плэйсхолдер totalVar, который устанавливается в значение total в методе setTotal() класса pdoFetch при запуске метода run().
2. pdoPage в getTickets отдает limit, offset через параметры $scriptProperties.
2. pdoPage в getTickets отдает limit, offset через параметры $scriptProperties.
Авторизуйтесь или зарегистрируйтесь, чтобы оставлять комментарии.