Ответ 1
Использование SQL внутри вашего JSP не кажется подходящим, поскольку логика уровня данных и не должна присутствовать в презентации. Кроме того, если Tridion обновляет структуру базы данных с новой версией, тогда существует риск, что ваш пользовательский SQL может перестать работать. Вам лучше использовать API-интерфейс Broker и не полагаться на пользовательские инструкции SQL в Брокерскую БД.
Я думаю, что лучше всего попытаться минимизировать количество требуемых запросов к базе данных. API позволяет фильтровать по ключевым словам (вы также можете фильтровать пользовательские мета, но это вам не поможет, поскольку вы упомянули, что хотите сортировать по заданному мета-полю). У вас есть два варианта получения списка CP по ключевым словам, которые вы можете сортировать:
- Query.execureQuery(). Это возвращает список URI tcm, что означает, что для получения объектов CustomMetadata и CP (ComponentPresentationFactory.GetComponentPresetation(tcmUri)) необходимо сделать отдельный клик БД. Это может (и, вероятно, будет) затягиваться, пока все не будет достаточно кэшировано.
- ComponentPresentationFactory.getTaxonomyComponentPresentations(). Вы можете передать массив ключевых слов этому методу и получить более широкий набор CP. Это означает один быстрый запрос БД. На стороне CM в шаблоне компонента добавьте рендеринг значения Custom Meta в качестве комментария HTML. Затем на стороне доставки просто проанализируйте это значение из каждого CP возвращаемого набора и выполните сортировку на сервере приложений (а не в БД). Это будет быстрее, чем выполнение многих запросов БД.
В теме вопроса задаются примеры примеров запросов в области таксономии. Взгляните на портал sdllivecontent в документации 2011 года. API почти такой же, как и в 2009 году (есть только тонкие отличия, однако есть несколько примеров построения фильтров, предоставляемых там: http://sdllivecontent.sdl.com/LiveContent/web/pub.xql?action=home&pub=SDL_Tridion_2011&lang=en-US#addHistory=true&filename=DevelopingAFilter.xml&docid=concept_0AB6D192D7AB4EC18892631F519EF1DD&inner_id=&tid=&query=&scope=&resource=&eventType=lcContent.loadDocconcept_0AB6D192D7AB4EC18892631F519EF1DD
Форум sdltridionworld - еще одно хорошее место, если вы просматриваете темы. Вот несколько потоков с некоторым примером кода: