source/Application/Model/SeoEncoderArticle.php
protected function _createArticleCategoryUri($oArticle, $oCategory, $iLang)
    {
        startProfile(__FUNCTION__);
        $oArticle = $this->_getProductForLang($oArticle, $iLang);

        // create title part for uri
        $sTitle = $this->_prepareArticleTitle($oArticle);

        // writing category path
        $sSeoUri = $this->_processSeoUrl(
            \OxidEsales\Eshop\Core\Registry::get(\OxidEsales\Eshop\Application\Model\SeoEncoderCategory::class)->getCategoryUri($oCategory, $iLang) . $sTitle,
            $oArticle->getId(),
            $iLang
        );
        $sCatId = $oCategory->getId();
        $this->_saveToDb(
            'oxarticle',
            $oArticle->getId(),
            \OxidEsales\Eshop\Core\Registry::getUtilsUrl()->appendUrl(
                $oArticle->getBaseStdLink($iLang),
                ['cnid' => $sCatId]
            ),
            $sSeoUri,
            $iLang,
            null,
            0,
            $sCatId
        );

        stopProfile(__FUNCTION__);

        return $sSeoUri;
    }
protected function _createArticleCategoryUri($oArticle, $oCategory, $iLang)
    {
        startProfile(__FUNCTION__);
        $oArticle = $this->_getProductForLang($oArticle, $iLang);

        // create title part for uri
        $sTitle = $this->_prepareArticleTitle($oArticle);

        // writing category path
        $sSeoUri = $this->_processSeoUrl(
            \OxidEsales\Eshop\Core\Registry::get(\OxidEsales\Eshop\Application\Model\SeoEncoderCategory::class)->getCategoryUri($oCategory, $iLang) . $sTitle,
            $oArticle->getId(),
            $iLang
        );
        $sCatId = $oCategory->getId();
        $this->_saveToDb(
            'oxarticle',
            $oArticle->getId(),
            \OxidEsales\Eshop\Core\Registry::getUtilsUrl()->appendUrl(
                $oArticle->getBaseStdLink($iLang),
                ['cnid' => $sCatId]
            ),
            $sSeoUri,
            $iLang,
            null,
            0,
            $sCatId
        );

        stopProfile(__FUNCTION__);

        return $sSeoUri;
    }
protected function _createArticleCategoryUri ( $ oArticle , $ oCategory , $ iLang ) { startProfile ( __FUNCTION__ ) ; $ oArticle = $ this -> _getProductForLang ( $ oArticle , $ iLang ) ; // create title part for uri $ sTitle = $ this -> _prepareArticleTitle ( $ oArticle ) ; // writing category path $ sSeoUri = $ this -> _processSeoUrl ( \ OxidEsales \ Eshop \ Core \ Registry :: get ( \ OxidEsales \ Eshop \ Application \ Model \ SeoEncoderCategory :: class ) -> getCategoryUri ( $ oCategory , $ iLang ) . $ sTitle , $ oArticle -> getId ( ) , $ iLang ) ; $ sCatId = $ oCategory -> getId ( ) ; $ this -> _saveToDb ( 'oxarticle' , $ oArticle -> getId ( ) , \ OxidEsales \ Eshop \ Core \ Registry :: getUtilsUrl ( ) -> appendUrl ( $ oArticle -> getBaseStdLink ( $ iLang ) , [ 'cnid' => $ sCatId ] ) , $ sSeoUri , $ iLang , null , 0 , $ sCatId ) ; stopProfile ( __FUNCTION__ ) ; return $ sSeoUri ; }
create article uri for given category and save it

@param \OxidEsales\Eshop\Application\Model\Article  $oArticle  article object
@param \OxidEsales\Eshop\Application\Model\Category $oCategory category object
@param int                                          $iLang     language to generate uri for

@return string
create article uri for given category and save it