Благодаря этому улучшению, начиная с версии 1.1.336 мы также можем сортировать результаты парсинга прямо в парсере. Ниже показан способ сортировки на примере сбора ТИЦ и вывода результатов в порядке его спадания. Спойлер: Код для импорта Код: eyJwcmVzZXQiOiJkZWZhdWx0IiwidmFsdWUiOnsicHJlc2V0IjoiZGVmYXVsdCIs InBhcnNlcnMiOltbIlNFOjpZYW5kZXg6OlRJQyIsImRlZmF1bHQiXV0sInJlc3Vs dHNGb3JtYXQiOiJbJSBsaXN0LiRxdWVyeSA9IHAxLnRpYyAlXSIsInJlc3VsdHNT YXZlVG8iOiJmaWxlIiwicmVzdWx0c0ZpbGVOYW1lIjoiJGRhdGVmaWxlLmZvcm1h dCgpLnR4dCIsImFkZGl0aW9uYWxGb3JtYXRzIjpbXSwicmVzdWx0c1VuaXF1ZSI6 Im5vIiwicXVlcnlGb3JtYXQiOlsiJHF1ZXJ5Il0sInVuaXF1ZVF1ZXJpZXMiOmZh bHNlLCJzYXZlRmFpbGVkUXVlcmllcyI6ZmFsc2UsIml0ZXJhdG9yT3B0aW9ucyI6 eyJvbkFsbExldmVscyI6ZmFsc2UsInF1ZXJ5QnVpbGRlcnNBZnRlckl0ZXJhdG9y IjpmYWxzZSwicXVlcnlCdWlsZGVyc09uQWxsTGV2ZWxzIjpmYWxzZX0sInJlc3Vs dHNPcHRpb25zIjp7Im92ZXJ3cml0ZSI6ZmFsc2V9LCJkb0xvZyI6Im5vIiwia2Vl cFVuaXF1ZSI6Ik5vIiwibW9yZU9wdGlvbnMiOnRydWUsInJlc3VsdHNQcmVwZW5k IjoiWyUgbGlzdCA9IHt9ICVdIiwicmVzdWx0c0FwcGVuZCI6IlslIEZPUkVBQ0gg a2V5IElOIGxpc3QubnNvcnQucmV2ZXJzZTtcblx0a2V5IF8gXCIgLSBcIiBfIGxp c3QuJGtleSBfIFwiXFxuXCI7XG5FTkQgJV0iLCJxdWVyeUJ1aWxkZXJzIjpbXSwi cmVzdWx0c0J1aWxkZXJzIjpbXSwiY29uZmlnT3ZlcnJpZGVzIjpbXX19 Чтобы вывести результаты в порядке возрастания - нужно в Конечном тексте (Append text) убрать функцию .reverse
разобрался, для отчёта на лету такая сортировка подойдёт. А так лучше юзать базу, там и сортировка. Сортировка в парсере лишнее.
Как добавить в сортировку ещё один пресет Rank::Alexa тоже с сортировкой, для быстрого отчёта будет очень хорошо [% list.$query = p1.rank ; list.$query =p2.tic %] это понятно, только не выводит результат.
Это неправильно, т.к. вы перезаписываете одну и ту же переменную. Описанный в первом посте метод подходит только для одного парсера, т.к. в нем создается хэш, ключами которого являются исходные запросы, а значениями этих ключей - полученный результат. И в конце работы пресета данный хэш выводится с сортировкой по значениям. Для решения вашей задачи, когда для каждого запроса будет несколько значений, нужно создавать совсем другую структуру (массив хэшей) и писать функцию для ее сортировки, используя Template Toolkit или JavaScript. Вот пример решения, когда парсится 2 показателя (TIC и Alexa rank); результат выводится с сортировкой по TIC; если TIC будет одинаковый, то дополнительно сортируется по Alexa rank: в Начальном тексте создаем массив: Код: [% list = [] %] в Общем формате результата формируем хэш с результатами по текущему запросу и добавляем его в массив: Код: [% item = {}; item.query = query; item.tic = p1.tic; item.alexa = p2.rank; list.push(item) %] в Конечном тексте выводим массив с нужной сортировкой: Код: [% res = tools.js.hashSortByDigit(tools.js.hashSortByDigit(list, 'alexa'), 'tic'); FOREACH item IN res; item.query _ ': ' _ item.alexa _ ', ' _ item.tic _ "\n"; END %] Сортировка делается с помощью JS скрипта (через tools.js), на вход в который передается массив хэшей и ключ, по которому сортировать. Т.к. сортироваться могут как числовые, так и строковые данные, то лучше иметь 2 скрипта, каждый из которых будет выполнять сортировку по одному типу данных (в примере выше используется только числовая сортировка): Код: Tools.prototype.hashSortByDigit = function(obj, key) { return obj.sort(function(a, b) { return (+a[key] > +b[key]) ? 1 : ((+b[key] > +a[key]) ? -1 : 0); }); } Tools.prototype.hashSortByString = function(obj, key) { return obj.sort(function(a, b) { return (a[key] > b[key]) ? 1 : ((b[key] > a[key]) ? -1 : 0); }); } В результате получается отсортированная таблица: Спойлер: Пресет Код: eJylVF1v2jAU/SuR1YoiZZE6bS+Z9kBp0TpV0EH7MAGqLOJQt46d2g4DRfz3nZuQ BNbtaU/2Pb7fPveWzHP36u6tcMI7Fs9Llld3FrOZsT4QW57lSrCQ5dw6YUlnzmY3 cfyT60Rs4/jhdojXRKS8UJ6FJfO7XMDcbIS1MiFTmUAunMit2e4gb7gqoJJy5cR+ Gc7ZlOvXOB4oRPs/X8uQIX0Yu5GxGacy5ueB9CILvgbl/stC0z16K4TdAanOBvRy BSi/pEuDcUqJ0I+RRY6AlXQ+ygv3fEEK/eB8ydqYM74RDwYxU1m1rEkF0phnVMhZ wr2g1yit8rvoR36LShlPEuml0VzViVOfu2IetXyjKpk20KWspXAjazJAXlQOqlKa oufsrJIZXBSV7Y/a5tCokDmkOuJIJPnzBWVZ7o2d5JQP8JIZPVDqTmyE6tQq/1eF VAlIMUhhdHsw/LvK5J2PfVvecSj89C+LHDqlxNyZdVP7qxB5240xIZmxonXgbSFa t2B1LnRSc4D+DR85X5782CDvNABBwRujXPTiomfunmkErnbXci39xT8fyHMY9Cqq 9Pq4gT+9PqgymkxvBsNvNf1uxxQA6MIfUfAp6MVBD8cR24CFHUasfAoWbAFLBvOb 8XVdwUl3T9hyCq6MTuV6cpigRrPQDxj8iR4aGm9qty6UCmmyph1rB+7ADhLaf31n PKxCoIvt5LKqW99nwGh1WImp+EwJZvjg46gHlyuu1OP07viFdUyHwD/U+ydamWyh 18asMUPVPZMra5xJfS1+yhMe2QKDKrSnGyPvXqwNxgG1Y980q6zdeuW7hRaXIN7x VgIA5MXd16bUD1drobEO5GPx5f430ujYkw==