Перейти к содержимому


Фото
* * * * * 3 голосов

Simpla (namespace)


  • Чтобы отвечать, сперва войдите на форум
137 ответов в теме

#21 phukortsin

phukortsin
  • Пользователь
  • 471 сообщений
  • Программирование, Пользователь
  • Версия CMS:2.x
  • Откуда:Львов

Опубликовано 25.07.2018 - 20:45

в том виде в котором сейчас находится Симпла - комфортно нельзя, только с костылями. но при наличии соответствующей инфраструктуры проэкта почему бы нет https://packagist.org/?query=ukrpo

 

мультиязычность или маршрутизацию это вообще можно не обсуждать, их сотни https://packagist.or...pi?query=router

 

очевидно вы еще не пользовались, посмотрите там много интересных вещей

 

А можно какой-нибудь пример? Не могли бы Вы для примера выбрать из тысяч пакетов один средней сложности и написать, как его "подтянуть". По возможности, чтобы владельцу сайта на Simpla с опытом установки доработок было понятно. Пусть хотя бы и с костылями - потерпим, на этом форуме доработки без костылей - редкость...


Изменено: phukortsin, 25.07.2018 - 20:45


#22 DaVinci

DaVinci
  • Фрилансер
  • 1 139 сообщений
  • Программирование, Верстка
  • Версия CMS:1.x, 2.x
  • Откуда:SimplaDev.ru

Опубликовано 25.07.2018 - 21:08

А можно какой-нибудь пример? Не могли бы Вы для примера выбрать из тысяч пакетов один средней сложности и написать, как его "подтянуть". По возможности, чтобы владельцу сайта на Simpla с опытом установки доработок было понятно. Пусть хотя бы и с костылями - потерпим, на этом форуме доработки без костылей - редкость...

 

откройте исходник сиплы Design.php и посмотрите как подключается smarty и посмотрите как подключен smarty в моем репозитории, вот вам и пример.

 

но если я захочу подключить другой шаблонизатора без изменения кода смой симплы то без глобальных костылей это сделать не получится. Скорее с этим спорить вы не будете. А вот заказчику ОЧЕНЬ надо. скорее всего вы потратите минимум неделю (ну ладно, пару дней точно) что бы переписать все. Я потрачу на это 2 минуты. 

 

Теперь давайте представим что в нашей cms мы создали ряд интерфейсов один их которых Design в котором описаны обязательные методы которые используются во всем приложении

 

Что делаем для того что бы одной строкой подменить шаблонизатор? 

 

interface Design
{
    public function assign($array): array;
    ...
}

class Smarty implements Design
{
    public function assign($array): array
    {
       ...
    }
}

class Twig implements Design
{
    public function assign($array): array
    {
       ...
    }
}

вот та самая одна строка

Simpla::$container->singleton('design', Twig::class);

теперь при вызове $simpla->design будет доступен twig

вы можете создавать обвёртки, мосты, наследоваться, работать с зависимостями - подключайте как вам удобно, на что хватит фантазии и опыта, ни что вас не ограничивает. качайте чужие исходники в директорию cms или пользуйтесь композером.

 

если преимущество такого подхода для вас не очевидны то мне больше не интересно поддерживать с вами дальнейшую дискуссию 


Изменено: DaVinci, 25.07.2018 - 21:24


#23 DaVinci

DaVinci
  • Фрилансер
  • 1 139 сообщений
  • Программирование, Верстка
  • Версия CMS:1.x, 2.x
  • Откуда:SimplaDev.ru

Опубликовано 25.07.2018 - 21:47

залил примитивный вариант контейнера (пока о внутренней реализации не думал)

 

отвязял апи и view от simpla

 

https://github.com/s.../test-container

 

на данный момент достучаться к апи можно несколькими равнозначными способами

 

$product_url = $this->request->get('product_url', 'string'); //только во view
$product_url = request()->get('product_url', 'string');
$product_url = Simpla::$app->request->get('product_url', 'string') // заюзает неймспейс
$product_url = simpla()->request->get('product_url', 'string');
$product_url = simpla('request')->get('product_url', 'string');

 

упразднил 

index.php - точка входа

IndexView - маршрутизирующий

View - абстрактный, необходимые обвесы для view

 

теперь у каждого класса своя ответственность а IndexView не перебрасывает нас в index если view вернул false и обратно. Убрал синглтон. Добавил NotFoundView. мог что то упустить и накосячить


Изменено: DaVinci, 25.07.2018 - 22:01


#24 Noxter

Noxter

    Simpla Developer

  • Фрилансер
  • 6 706 сообщений
  • Дизайн, Программирование, Верстка
  • Версия CMS:2.x
  • Откуда:Киев

Опубликовано 25.07.2018 - 21:55

залил примитивный вариант контейнера (пока о внутренней реализации не думал)

отвязял апи и view от simpla

https://github.com/s.../test-container

на данный момент достучаться к апи можно несколькими равнозначными способами

$product_url = $this->request->get('product_url', 'string');
$product_url = request()->get('product_url', 'string');
$product_url = Simpla::$app->request->get('product_url', 'string')
$product_url = simpla()->request->get('product_url', 'string');
$product_url = simpla('request')->request->get('product_url', 'string');


упразднил
index.php
IndexView
View
Забей на тролей, не трать на них своё время.
Продолжай в том же духе, у тебя превосходный потенциал.

#25 yr4ik

yr4ik
  • Фрилансер
  • 865 сообщений
  • Дизайн, Программирование, Верстка
  • Версия CMS:1.x, 2.x
  • Откуда:Украина Чернигов

Опубликовано 26.07.2018 - 00:08

Simpla для людей никто это не оспорит. Но люди ставят сайт начинают работать и у них начинаются новые прихоти. И тут уже обычные люди отходят на сторону и начинают искать программистов для той или иной задачи (если нет какой то oneclick модульности). И это факт и так будет! И поэтому удобство для фрилансеров - никак нельзя считать бесполезным, я бы сказал что это даже в приоритете. Ведь большой процент именно у фрилансеров спрашивает какой движок лучше взять. Обычному человеку побоку какой там код, пока ему не покажешь результат. Я встречал таких клиентов которые платили за модули не малые деньги но то что там было - просто нет слов. Симпла удобна и проста но она реально устарела (и речь не о нехватке модуля заказать звонок и тд). Ядро начинает терять позиции и тут не поспоришь. Тут нужно искать альтернативы и обновления. Я, и не только я, хотел бы видеть больше информации от Пикусова по стадиям разработки (если таковы ведутся). Потому что создание альтернативных версий - это беда. Это порождение будущей каши. Нынешняя сборка - это хорошая перспектива, но она на энтузиазме одного человека. А этого очень даже может не хватить. Но я, в связи с таким застоем, выступаю больше за такие альтернативы чем бестолковое наращивание модулей под эгидой "для клиента". Лучше иметь хорошее ядро для разработки чем мамонта с модулей. 



#26 DaVinci

DaVinci
  • Фрилансер
  • 1 139 сообщений
  • Программирование, Верстка
  • Версия CMS:1.x, 2.x
  • Откуда:SimplaDev.ru

Опубликовано 26.07.2018 - 03:02

Обновил контейнер - появились инъекции

 

В конструкторе любого апи можно достучаться до контейнера таким образом

 

public function __constructor(Products $products)
{
   $this->products = $products;
}

Изменено: DaVinci, 26.07.2018 - 03:06


#27 phukortsin

phukortsin
  • Пользователь
  • 471 сообщений
  • Программирование, Пользователь
  • Версия CMS:2.x
  • Откуда:Львов

Опубликовано 26.07.2018 - 09:58

Пробую увидеть Вашу систему в действии. Устанавливаю так:
1. Копирую файлы (установщика не нашел),
2. Подключаю стандартную базу Simpla (дампа базы в Вашем дистрибутиве не нашел),
3. При запуске получаю ошибку Failed opening required 'bootstrap/../vendor/autoload.php' in bootstrap\app.php on line 5,
4. В дистрибутиве не видно vendor/autoload.php, и вообще не видно папки vendor.

Объясните, пожалуйста, чайнику попроще и попонятнее, как все это запустить...

#28 Maksclub

Maksclub

    Помогаю с Симплой и c PHP

  • Фрилансер
  • 1 389 сообщений
  • Дизайн, Программирование, Верстка, Заказчик, Пользователь
  • Версия CMS:2.x
  • Откуда:Москва

Опубликовано 26.07.2018 - 10:26


3. При запуске получаю ошибку Failed opening required 'bootstrap/../vendor/autoload.php' in bootstrap\app.php on line 5,
4. В дистрибутиве не видно vendor/autoload.php, и вообще не видно папки vendor.

Объясните, пожалуйста, чайнику попроще и попонятнее, как все это запустить...

 

Это вы выставяете картину со стороны пользователя (примеряя роль его) или реальный вопрос от вас?

Конечно эта тема вынесена пока что для обсуждения идей и для призыва РАЗРАБОТЧИКОВ

Любой разработчик в 2018 году знает про composer, тех, кто не знает (именно из разработчиков)  -- не берем в расчет и оставляем ждать инструкций...


Изменено: Maksclub, 26.07.2018 - 10:29


#29 shooroop

shooroop
  • Фрилансер
  • 732 сообщений
  • Дизайн, Программирование, Верстка
  • Версия CMS:2.x
  • Откуда:Antarktida

Опубликовано 26.07.2018 - 13:00

Это вы выставяете картину со стороны пользователя (примеряя роль его) или реальный вопрос от вас?

Конечно эта тема вынесена пока что для обсуждения идей и для призыва РАЗРАБОТЧИКОВ

Любой разработчик в 2018 году знает про composer, тех, кто не знает (именно из разработчиков)  -- не берем в расчет и оставляем ждать инструкций...

 

вот лично мне не понятен смысл всех этих манипуляций. Я понимаю плюсы Гита а вот Gulp и всех прекомпрессоров нет. Это надо быть извращенцем использовать gulp для простой симплы )



#30 Maksclub

Maksclub

    Помогаю с Симплой и c PHP

  • Фрилансер
  • 1 389 сообщений
  • Дизайн, Программирование, Верстка, Заказчик, Пользователь
  • Версия CMS:2.x
  • Откуда:Москва

Опубликовано 26.07.2018 - 13:36

вот лично мне не понятен смысл всех этих манипуляций. Я понимаю плюсы Гита а вот Gulp и всех прекомпрессоров нет. Это надо быть извращенцем использовать gulp для простой симплы )

 

Откуда при общении про композер появился галп?

К слову и  он полезен тоже, и не важно Симпла или нет... он собирает JS код (и много чего еще)

 

А композер -- ну в 2018 году скачивать архивчики...


Изменено: Maksclub, 26.07.2018 - 13:36


#31 DaVinci

DaVinci
  • Фрилансер
  • 1 139 сообщений
  • Программирование, Верстка
  • Версия CMS:1.x, 2.x
  • Откуда:SimplaDev.ru

Опубликовано 26.07.2018 - 13:52

я думаю обсуждать композер нет смысла, особенно если вы не знаете что это. Это как обсуждать стоит ли использовать PHP на проекте который работает на PHP. Для людей которые знают что такое композер подобные обсуждения звучат именно так. Подавляющее большенство "разработчиков", а по сути просто пользователей определенной cms, не умеют ставить apache или nginx, но они не перестают им пользоваться. Для такой категории стоит просто предоставить мануал или установщик.


Изменено: DaVinci, 26.07.2018 - 14:43


#32 phukortsin

phukortsin
  • Пользователь
  • 471 сообщений
  • Программирование, Пользователь
  • Версия CMS:2.x
  • Откуда:Львов

Опубликовано 26.07.2018 - 15:14

но если я захочу подключить другой шаблонизатора без изменения кода смой симплы то без глобальных костылей это сделать не получится. Скорее с этим спорить вы не будете. А вот заказчику ОЧЕНЬ надо. скорее всего вы потратите минимум неделю (ну ладно, пару дней точно) что бы переписать все. Я потрачу на это 2 минуты.

 

Не понял Вашего юмора.

 

Возникал  однажды подобный вопрос. Решился редактированием одной стороки, вместо
require_once(dirname(dirname(__FILE__)).'/Smarty/libs/Smarty.class.php');
написали
require_once(dirname(dirname(__FILE__)).'/Smarty2/libs/Smarty.class.php');

И, конечно, залили папочку Smarty2 - в том проекте требовался шаблонизатор Smarty, но сильно переделанный...

 

Ушло на все про все менее часа, включая возникновение задачи, обсуждение путей решения, кофе-брейк, реализацию и тестирование.
Откуда Вы взяли дни и даже недели, для меня загадка...

 

И есть еще аспект у вопроса. Вы, конечно, можете переключите шаблонизатор почти мгновенно. А текущий шаблон на Smarty Вы тоже переделаете на шаблон Twig за те же 2 минуты?

Придуманный Вами пример для применения - замена шаблонизатора - очень уж искусственный. Что-то я не видел заказчиков, которые каждое утро меняют шаблоны. Не говоря уж о шаблонизаторах. Менять платье каждый день - это больше для женщин. Хотелось бы пример чего-то  более полезного в практическом плане...


 



#33 DaVinci

DaVinci
  • Фрилансер
  • 1 139 сообщений
  • Программирование, Верстка
  • Версия CMS:1.x, 2.x
  • Откуда:SimplaDev.ru

Опубликовано 26.07.2018 - 15:38

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

 

require_once(dirname(dirname(__FILE__)).'/Smarty2/libs/Smarty.class.php'); - вот это вот вы показывайте своим заказчикам, такой колхоз лично меня не впечатляет

 

вы их не видели потому что они боятся лишний раз что то попросить потому как это оборачивается в месяцы работы и большие растраты. быть может если бы ядро симплы было немного гибче такие запросы были бы. потому как при работает с любым фреймворков это абсолютно обычное дело...

 

к примеру, вы сейчас можете хранить сессии в файлах, а кеше? нет не можете, надо колхозить...

 

если у вас и у заказчика будет выбор с какими компонентами работать и при этом ВЫ не останетесь ЕДИНСТВЕННЫМ человеком который понимает что в коде происходит все будут в плюсе

 

По сули любая модифицированная  Симпла это отдельная, альтернативная версия, которую знает только тот человек который ее модифицировал. ни каких стандартов нет.

 

Моя цель создать хоть поверхностные стандарты, даже если я останусь единственным человеком который этой сборкой будет пользоваться. Никого за уши я в эту ветку не тяну


Изменено: DaVinci, 26.07.2018 - 15:49


#34 Kosjak76

Kosjak76
  • Модератор
  • 3 771 сообщений
  • Программирование
  • Версия CMS:1.x, 2.x
  • Откуда:Харьков, Украина

Опубликовано 26.07.2018 - 15:44

Это все конечно хорошо, а вот после обновления какого-нибудь компонента - не упадет случаем весь сайт?

Ни разу с таким не сталкивались?



#35 DaVinci

DaVinci
  • Фрилансер
  • 1 139 сообщений
  • Программирование, Верстка
  • Версия CMS:1.x, 2.x
  • Откуда:SimplaDev.ru

Опубликовано 26.07.2018 - 15:51

Это все конечно хорошо, а вот после обновления какого-нибудь компонента - не упадет случаем весь сайт?

Ни разу с таким не сталкивались?

 

вот для того что бы такого не происходило и придумали интерфесы. если вы написали кривой компонент то это беда не ядра а разработчика. но на такой случай есть тесты - которые показывают что конкретный сервис работает не корректно.

 

Дебаг через F5 это конечно забавно но как то не профессионально 


Изменено: DaVinci, 26.07.2018 - 15:51


#36 phukortsin

phukortsin
  • Пользователь
  • 471 сообщений
  • Программирование, Пользователь
  • Версия CMS:2.x
  • Откуда:Львов

Опубликовано 26.07.2018 - 16:26

...я привел абсолютно адекватный пример необходимости подмены компонентов. По реализации самого шаблона речи не идет...

 
Чистая абстракция. Вы очень довольны тем, что за 2 минуты можете сменить шаблонизатор. Это все, конечно хорошо. Только что потом заказчику скажете -  сайт упал, потому что шаблон надо переписывать заново. Поэтому иди-ка ты, заказчик, куда подальше в соседнюю ветку...
 

...в данном случае Deisign это сервис который должен работать предсказуемо с любым шаблонизатором

 

Утопия полная. Попробуйте сначала составить список ВСЕХ шаблонизаторов ВСЕХ версий. А потом посмотрите на него повнимательнее и решите - будете ли Вы проверять детально, как работает с каждым. И сколько времени понадобится на такую проверку...

 

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

 

А для программиста это, конечно, забава приятная, ничего не скажешь...



#37 DaVinci

DaVinci
  • Фрилансер
  • 1 139 сообщений
  • Программирование, Верстка
  • Версия CMS:1.x, 2.x
  • Откуда:SimplaDev.ru

Опубликовано 26.07.2018 - 16:29

привожу еще один пример  :)  Про магические файлы подобного плана все знают SettingsOld.php или __Settings.php. все по причине не согласованности интерфейса ядра. Как быть если кто то хочет сделать свою реализацию хранения настроек? к примеру в кеше, в массиве... Все идут переписывать сервис! Как победить это? Интерфейсы в помощь, к примеру. как реализовано хранение ВООБЩЕ не важно главное что бы сервис отвечал по предсказуемым методам

 

https://github.com/s...onents/settings

 

сервис https://github.com/s...pi/Settings.php ТУТ и ломаться теперь просто нечему

 

интерфейс storage https://github.com/s...ngInterface.php

 

хранение в массиве https://github.com/s...rrayStorage.php

 

хранение в базе https://github.com/s...gsDbStorage.php

 

регистрируем сервис 

 

https://github.com/s.../Simpla.php#L52

 

Теперь данный сервис тестируется и не зависит ни от чего!!! А свои компоненты "тестируйте сами" что бы сайт не падал, главное ядро ведет себя предсказуемо!



 
Чистая абстракция. Вы очень довольны тем, что за 2 минуты можете сменить шаблонизатор. Это все, конечно хорошо. Только что потом заказчику скажете -  сайт упал, потому что шаблон надо переписывать заново. Поэтому иди-ка ты, заказчик, куда подальше в соседнюю ветку...
 

 

Утопия полная. Попробуйте сначала составить список ВСЕХ шаблонизаторов ВСЕХ версий. А потом посмотрите на него повнимательнее и решите - будете ли Вы проверять детально, как работает с каждым. И сколько времени понадобится на такую проверку...

 

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

 

А для программиста это, конечно, забава приятная, ничего не скажешь...

 

Корс, тебе не нужен список всех шаблонизаторов - тебе нужен интерфейс по которому рабоает cms! то как реализован шаблонищатор тебе знать не надо. В этом то и отличие - не cms подгонять по окружение а окружение подогнать под cms. могу проверить каждый юнит тестами, на это уйти не больше 10 секунд

 

и по многим компонентам есть стандарты


Изменено: DaVinci, 26.07.2018 - 17:02


#38 DaVinci

DaVinci
  • Фрилансер
  • 1 139 сообщений
  • Программирование, Верстка
  • Версия CMS:1.x, 2.x
  • Откуда:SimplaDev.ru

Опубликовано 26.07.2018 - 16:44

точно такой же пример sms информером - как переключить оператор? точно так же как настройки, вместо то что бы изобретать все новые и новые модули которые подключаются не понятно где и не понятно как если не вы делали этот модуль смс. достаточно сделать  интерфейс смс с методом send и ВСЕ! теперь каждый последующий программист котрый будет писать сендер просто установит его в конфигураторе 

 

По такому же принципу переключается место хранение корзине - в сессии, в куках, в базе. не надо ЛОМАТЬ сервис корзины, достаточно написать storage. и передать его в сервис

 

это колхоз? ну знаете ли... ваше дело как вам писать код... еще раз говорю - я вас за уши сюда не тяну, пользоваться данной сборкой не принуждаю. что вы до сих пор тут делаете со своими комментариями?


Изменено: DaVinci, 26.07.2018 - 16:54


#39 phukortsin

phukortsin
  • Пользователь
  • 471 сообщений
  • Программирование, Пользователь
  • Версия CMS:2.x
  • Откуда:Львов

Опубликовано 26.07.2018 - 17:42

Спасибо, пример со способом хранения Settings содержательный.
Но все-таки вопрос - где хранить эти Settings - для программиста мелковат, а для владельца магазина непонятен и несущественен.

Хотелось бы что-то посерьезнее.
В этой теме в посте #19 предлагались три из многих актуальных для Simpla задачи. Ни одну из них, насколько я понял, Ваша разработка помочь решить не может. Попробую предложить еще:

 

4. Вот свежая тема с 1С, вопрос вроде бы не особо громоздкий:

http://forum.simplac...зация-остатков/

Может Ваш способ тут помочь тому пользователю - найти готовую доработку, подтянуть, и чтоб работало как часики ?  Не обязательно за 2 минуты, думаю, тот пользователь и 2 часа согласится подождать...

 

5. Вот еще недавний вопрос про картинки на поддомене:

http://forum.simplac...и-на-поддомене/

 

И тот пользователь наверняка 2 часа согласится подождать...

 

6. Есть еще старый вопрос, возникал на форуме неоднократно - убрать токены у изображений. Попыток много было, но хорошего решения пока никто не дал. Может, Ваша метода разрешит вопрос быстро и легко раз и навсегда? Если на форуме разные программисты за несколько лет хорошего решения не дали, а Вы за пару минут "подтянете" решение, то Вашей разработке цены не будет...



#40 DaVinci

DaVinci
  • Фрилансер
  • 1 139 сообщений
  • Программирование, Верстка
  • Версия CMS:1.x, 2.x
  • Откуда:SimplaDev.ru

Опубликовано 26.07.2018 - 17:55

Спасибо, пример со способом хранения Settings содержательный.
Но все-таки вопрос - где хранить эти Settings - для программиста мелковат, а для владельца магазина непонятен и несущественен.

Хотелось бы что-то посерьезнее.
В этой теме в посте #19 предлагались три из многих актуальных для Simpla задачи. Ни одну из них, насколько я понял, Ваша разработка помочь решить не может. Попробую предложить еще:

 

4. Вот свежая тема с 1С, вопрос вроде бы не особо громоздкий:

http://forum.simplac...зация-остатков/

Может Ваш способ тут помочь тому пользователю - найти готовую доработку, подтянуть, и чтоб работало как часики ?  Не обязательно за 2 минуты, думаю, тот пользователь и 2 часа согласится подождать...

 

5. Вот еще недавний вопрос про картинки на поддомене:

http://forum.simplac...и-на-поддомене/

 

И тот пользователь наверняка 2 часа согласится подождать...

 

6. Есть еще старый вопрос, возникал на форуме неоднократно - убрать токены у изображений. Попыток много было, но хорошего решения пока никто не дал. Может, Ваша метода разрешит вопрос быстро и легко раз и навсегда? Если на форуме разные программисты за несколько лет хорошего решения не дали, а Вы за пару минут "подтянете" решение, то Вашей разработке цены не будет...

 

думаете заказчиков волнует токен в изображении?

 

картинки на поддомене решаются очень просто, чуть позже сами все увидите

по синхронизации тоже все достаточно просто решается. все так же - интерфейсы. 

 

и да если вы так заботитесь о заказчиках - подумайте кто быстрее и качественнее выполнит задачу - программист который пишет нативно (вы в частности) или сотни серьезных разработчиков которые могут поддерживать объектно ориентированный код...

 

и хватит срать в теме! как решить то, как решить это... я ведь не справочник, тема тут не об этом. Вы думаете есть самообучающиеся программы которые умеют решать не стандартные задачи? Нет, нет таких, есть инструменты которые позволяют решать задачи комфортнее. И у меня нет задачи написать cms которая думает ЗА ВАС! если считаете себе программистом, разработчиком - ну так вперед, решайте задачи а не занимайтесь ерундой! Детский сад, вопросы ребенка 5 лет.  


Изменено: DaVinci, 26.07.2018 - 18:05





0 пользователей читают эту тему

0 пользователей, 0 гостей, 0 скрытых