Перейти к содержанию

Фалы из подкатегорий доунлодс


Рекомендуемые сообщения

Это код плагина  Файлы подкатегорий Downloads

   {{$files = array(); $category = \IPS\downloads\Category::loadAndCheckPerms(\IPS\Request::i()->id); $cids = array_map(function($c) { return $c->_id; }, $category->children());}}
		{{$cheTable = new \IPS\Helpers\Table\Content('\IPS\downloads\File', $category->url(), array(\IPS\Db::i()->in('file_cat', $cids)));}}
		    {{$cheTable->limit = \IPS\Settings::i()->che_count;}}
		{{if (count($cids))}}
			{{$files = iterator_to_array(\IPS\downloads\File::getItemsWithPermission(array(\IPS\Db::i()->in('file_cat', $cids)), 'file_submitted DESC' ));}}
		{{endif}}
    <div class='ipsBox ipsSpacer_top'>
	    <div class='ipsPad_half'>
		{{if (count($files))}}
			<ul class='che_resub_cat' data-role='tableRows'>
          {$cheTable|raw}
			</ul>
		{{else}}
			<p class='ipsType_reset ipsType_light ipsPad'>{lang="che_no_files_in_subcat"}</p>
		{{endif}}
	    </div>
    </div>

$cids = array_map(function($c) { return $c->_id; }, $category->children()); - отвечает за выборку категорий из которых показывать файлы, но этот вариант работает таким образом, что показывает файлы только из прямой связи родитель - ребенок, т.е. если:

Категория
   Подкатегория 1
      файл 1
      файл 2
   Подкатегория 2

в Категория файлы будут отображаться из подкатегорий 1 и 2,

Но, если файлы расположены глубже 2ого уровня, то файлы не отображаются, т.е.:

Категория
   Подкатегория 1
       ПодПодкатегория1
          файл 1
         файл 2
      ПодПодкатегория2

При такой структуре файлы из подкатегорий будут показаны только в Подкатегория1, а в Категория файлы уже не отображаются.

Собственно вопрос, каким образом рекурсивно получить все дочерние категории?

Ссылка на комментарий
Поделиться на другие сайты

Если кому-то интересно

Спойлер

	public function categoryChild()
	{
		$cids = array();

		$cids[] = $this->_id;

		if ($this->hasChildren())
		{
			$allChildren = function($cat) use (&$allChildren) {
				$ids = array();

				if ($cat->hasChildren())
				{
					foreach ($cat->children() as $child)
					{
						$ids[] = $child->_id;

						if ($child->hasChildren())
						{
							$ids = array_merge($ids, $allChildren($child));
						}
					}
				}

				return $ids;
			};

			$cids = array_merge($cids, $allChildren($this));
		}

		return $cids;
	}

 

 

Ссылка на комментарий
Поделиться на другие сайты

Присоединяйтесь к обсуждению

Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.
Примечание: Ваш пост будет проверен модератором, прежде чем станет видимым.

Гость
Ответить в этой теме...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

  • Последние посетители   0 пользователей онлайн

    • Ни одного зарегистрированного пользователя не просматривает данную страницу
×
×
  • Создать...