/** * Add 'sort by name' builder structures * * @param \Doctrine\ORM\QueryBuilder $queryBuilder Query builder to prepare * @param string $sort Sort field * @param string $order Sort direction * * @return void */ protected function addSortByTranslation(\Doctrine\ORM\QueryBuilder $queryBuilder, $sort, $order) { // Main alias $alias = $this->getMainAlias($queryBuilder); // The language code of current user session $currentCode = $this->getTranslationCode(); // Default store language code $defaultCode = \XLite::getDefaultLanguage(); // Add additional join to translations with current language code parent::addTranslationJoins($queryBuilder, $alias, 'st', $currentCode); if ($currentCode != $defaultCode) { // Add additional join to translations with default language code $this->addTranslationJoins($queryBuilder, $alias, 'st2', $defaultCode); // Add calculated field to the fields list to use this for sorting out $queryBuilder->addSelect('IFNULL(st.name,IFNULL(st2.name,translations.name)) calculatedName'); } else { // Add calculated field to the fields list to use this for sorting out $queryBuilder->addSelect('IFNULL(st.name,translations.name) calculatedName'); } }