Поддержка серверов

PathIndexCollection::constructAncestorsByPath: метод Битрикс

Постоянная ссылка: http://bxapi.ru/src/?id=507667

//    Bitrix\Translate\Index\PathIndexCollection::constructAncestorsByPath()
//    /bitrix/modules/translate/lib/index/pathindexcollection.php:494

    public function constructAncestorsByPath($path)
    {
        if (isset($this->ancestorsPaths[$path]))
        {
            return $this->ancestorsPaths[$path];
        }

        $pathParts = explode('/', trim($path, '/'));

        $searchPath = '';
        $ancestorsPathSearch = array();
        foreach ($pathParts as $part)
        {
            $searchPath .= '/'. $part;
            if (isset($this->ancestorsPaths[$searchPath]))
            {
                continue;
            }
            $ancestorsPathSearch[] = $searchPath;
        }
        $pathRes = Index\Internals\PathIndexTable::getList([
            'select' => ['ID', 'DEPTH_LEVEL', 'IS_LANG', 'PATH'],
            'filter' => ['=PATH' => $ancestorsPathSearch],
        ]);
        while ($pathInx = $pathRes->fetch())
        {
            $pathInx['IS_LANG'] = ($pathInx['IS_LANG'] == 'Y');
            $this->ancestorsPaths[$pathInx['PATH']] = $pathInx;
        }

        if (isset($this->ancestorsPaths[$path]))
        {
            return $this->ancestorsPaths[$path];
        }


        $pathInx = null;
        $searchPath = '';
        $searchParentId = 0;
        $searchDepthLevel = 0;
        $isLang = false;

        foreach ($pathParts as $part)
        {
            $searchPath .= '/'. $part;

            if (isset($this->ancestorsPaths[$searchPath]) && $searchPath !== $path)
            {
                $searchParentId = (int)$this->ancestorsPaths[$searchPath]['ID'];
                $searchDepthLevel = (int)$this->ancestorsPaths[$searchPath]['DEPTH_LEVEL'] + 1;
                $isLang = $this->ancestorsPaths[$searchPath]['IS_LANG'];
                continue;
            }

            if ($isLang === false)
            {
                $isLang = ($part === 'lang');
            }

            $nodeData = array(
                'NAME' => $part,
                'PATH' => $searchPath,
                'PARENT_ID' => $searchParentId,
                'DEPTH_LEVEL' => $searchDepthLevel,
                'IS_LANG' => $isLang ? 'Y' : 'N',
                'IS_DIR' => (substr($part, -4) === '.php' ? 'N' : 'Y'),
            );

            $pathInx = Index\Internals\PathIndexTable::add($nodeData);
            $searchParentId = $pathInx->getId();

            $this->ancestorsPaths[$searchPath] = array(
                'ID' => $searchParentId,
                'DEPTH_LEVEL' => $searchDepthLevel,
                'IS_LANG' => $isLang,
                'PATH' => $searchPath,
            );

            $searchDepthLevel ++;
        }

        return $this->ancestorsPaths[$path];
    }

Блог разработчика

9 августа 2016 ResizeImageGet и простой водяной знак налету

Сегодня поговорим о том как проще всего воткнуть водяной знак на картинки в Битрикс. Например, на все изображения каталога.

21 июля 2016 Добавление вкладки в CRM коробки Битрикс24

В этом посте я покажу, как легко и просто добавить вкладку в сущность CRM. И не просто добавить, а вывести там свой контент.

21 июля 2016 Как просто обращаться из коробки Битрикс24 на сайт на базе Битрикс

К примеру вам хочется внутренним скриптом дернуть с сайта-магазина информацию, которая там, в свою очередь, закрыта некоторыми правами. Например, админскими. Можно конечно мутить свой REST, или иной формат общения, но проще всего воспользоваться штатным инструментом:

Текст сообщения*
Загрузить изображение