問題
-
JournalArticleLocalServiceUtil クラスを使用して Web コンテンツを検索する場合、次の問題に直面しています。
-
タイトルでソートすることはできませんそのローカリゼーションがテーブルに格納されているためです JournalArticleLocalization コンパレーターはそれを考慮していません
-
コンテンツを検索するとき、クラスはフィールド コンテンツの XML タグを考慮しているため、たとえば xml を検索すると、すべての Web コンテンツ記事が返されます。
-
例:
<?xml version="1.0"?>
<root available-locales="en_US" default-locale="en_US">
<dynamic-element name="Summary" type="text_box" index-type="text" instance-id="pkih">
<dynamic-content language-id="en_US"><![CDATA[Testes]]></dynamic-content>
</dynamic-element>
...
</root>
Environment
- DXP 7.2
解決策
- 新しいサイトを作成する
- 新しいサイト ID をコピーします
- というタイトルの 3 つの基本的な Web コンテンツ記事を作成します。
- A
- B
- C
- サイト ID を置き換えて、次の Groovy スクリプトを実行します。
import com.liferay.journal.model.JournalArticle;
import com.liferay.portal.kernel.util.OrderByComparatorFactoryUtil;
import com.liferay.journal.service.JournalArticleLocalServiceUtil;
import com.liferay.portal.kernel.workflow.WorkflowConstants;
import com.liferay.portal.kernel.util.OrderByComparator;
import com.liferay.portal.kernel.dao.orm.QueryUtil;
long groupId = <insert Site ID here>;
String structurekey = "BASIC-WEB-CONTENT"
OrderByComparator<JournalArticle> comparator = OrderByComparatorFactoryUtil.create("JournalArticleLocalization", "title",true);
List<JournalArticle> journalArticles = JournalArticleLocalServiceUtil.getArticlesByStructureId(groupId, 0, structurekey, WorkflowConstants.STATUS_APPROVED, QueryUtil.ALL_POS, QueryUtil.ALL_POS, comparator);
for (JournalArticle j : journalArticles) {
out.println("--"+j.getTitle());
}