Ejemplo n.º 1
0
def recursive_fill_blocks(container, blocks: list, parent_block, parents: str,
                          blocks_path: str):
    """Рекурсивное создание блоков контейнера
       :param container: контейнер блоков
       :param blocks: блоки, которые надо создать в контейнере
       :param parent_block: родительский блок
       :param parents: родительский блок
       :param blocks_path: путь к изображениям блоков
    """
    for json_obj in blocks:
        if not parents == json_obj['parents']:
            continue
        block = Blocks(container=container)
        for k, v in json_obj.items():
            if k in ('img', 'id', 'parents', 'container'):
                continue
            setattr(block, k, v)
        if parent_block:
            block.parents = '%s_%s' % (parent_block.parents
                                       or '', parent_block.id)
        block.save()
        imga = json_obj.get('img')
        if imga:
            copy_file(os.path.join(blocks_path, imga),
                      os.path.join(block.get_folder(), imga))
            Blocks.objects.filter(pk=block.id).update(img=imga)
        # Теперь надо найти подблоки этого блока
        recursive_fill_blocks(
            container, blocks, block,
            '%s_%s' % (json_obj['parents'] or '', json_obj['id']), blocks_path)
Ejemplo n.º 2
0
    def fill_seo(self, **kwargs):
        """Заполнение сео-полей/статей для товара,
           заполнение привязок к статьям (привязваем контейнеры)
           просто создаем ссылку с сео-полями по ссылке товара,
        """
        if not self.id:
            return
        seo_fields = ('seo_title', 'seo_description', 'seo_keywords')
        linkcontainer = kwargs.get('linkcontainer', [])

        seo_block = None
        seo_tag = 'seo_for_products'
        product_tag = 'product_%s' % self.id
        link = self.link()
        seo_container = Containers.objects.filter(state=4, tag=seo_tag).first()
        if not seo_container:
            seo_container = Containers.objects.create(
                state=4, tag=seo_tag, name='Сео-тексты для товаров/услуг')
        seo_blocks = seo_container.blocks_set.filter(
            models.Q(tag=product_tag) | models.Q(link=link))
        # Если по id не найден блок,
        # тогда пробуем найти по ссылке
        if not seo_blocks:
            seo_block = Blocks(
                state=4,
                container=seo_container,
                tag=product_tag,
                link=link,
            )
        else:
            for block in seo_blocks:
                if block.tag == product_tag:
                    seo_block = block
                    break
            if not seo_block:
                seo_block = seo_blocks[0]
        seo_block.link = link
        seo_block.name = self.name
        for key in seo_fields:
            field = key.replace('seo_', '')
            setattr(seo_block, field, kwargs.get(key))
        seo_block.save()
        link_containers2block(seo_block, linkcontainer)
Ejemplo n.º 3
0
def fill_catalogue(branches: list,
                   container: Containers,
                   parent: Blocks = None):
    """Заполнить каталог иерархией
       :param branches: рубрики
       :param container: контейнер каталога
       :param parents: родительский блок
    """
    for branch in branches:
        if branch['name'].startswith('__'):
            continue
        tag = 'cat_%s' % branch['id']
        analog = container.blocks_set.filter(tag=tag).first()
        if not analog:
            analog = Blocks(tag=tag, container=container)
        analog.name = branch['name']
        if parent:
            root_parents = parent.parents if parent.parents else ''
            analog.parents = '%s_%s' % (root_parents, parent.id)
        analog.state = 4
        analog.save()
        sub_branches = branch.get('branches')
        if sub_branches:
            fill_catalogue(sub_branches, container, analog)