Jump to content
  • entries
    6
  • comments
    64
  • views
    1,712

Взгляд на Opencart после Magento и других продвинутых систем

konorws

6,171 views

Добрый день.

Немного истории вот где то года три назад я начал свой путь в работе с Opencart. Скажем так полюбил я Opencart всем сердцем.

Но в один солнечный день мне пришел лист о том что я прошел собеседование в относительно большую IT кампанию. И с того дня мой взгляд на хороший код изменился... 

Вот не так давно меня попросили немного доработать функционал на OC. Мне не сложно в принципе вот я и приступил к работе. Я сидел и говорил себе Боже как я раньше с этим работал.

 

Ну теперь давайте я вам попробую описать то что меня возмутило.

 

1. Удобство разработки и интеграция в IDE

Да когда я работал с Sublime Text все было вроде гуд. Но уже полгода работаю через PhpStorm (PS. Лицензия есть даже на домашнем ПК а не только на работе).

При запуске сразу получаем кучу предупреждений. Давайте взглянем на простой класс http://joxi.ru/52alLM0UGzO1Om

Причин тут две:
1) Отсутствие PhpDoc

2) Упрощенная структура самой CMS

Ну если добавить PHPDoc то большую часть проблем это реши. 
Зачем нужен PHPDoc ??
Я напишу коротко если будет интересно загуглите.

1) Это читабельность кода
2) Автокомплит и информация о методах на лету  http://joxi.ru/brRZkROHQveeLr как не крути сразу видно что и как надо передавать тому или другому методу или то что он возвращает. Или же увидеть ошибку на моменте написания кода а не запуска.

 

2) Это наверное бесит меня на данный момент больше всего. Это дублирования кода.

Хотя Опенкарт и как бы MVC но он нарушает один из принципов MVC потому что с дублирование кода тут просто беда.

Давайте посмотрим на один из контроллеров админ панели. http://joxi.ru/nAyKdw3tXz1oVm 
И это один из множества примеров. который есть в каждом файле я молчу о генерации $url вот пример из файла файла покупателя. Этот кусок кода встереатся в одном файле 9 раз. ????? 
Давайте посчитаем: 9 * ~40 строк = ~360 строчек кода которые можно отрефакторить к 20 максимум и будет один метод для всех файлах а в контролере это будет одна строка вместо 40  

			$url = '';

			if (isset($this->request->get['filter_name'])) {
				$url .= '&filter_name=' . urlencode(html_entity_decode($this->request->get['filter_name'], ENT_QUOTES, 'UTF-8'));
			}

			if (isset($this->request->get['filter_email'])) {
				$url .= '&filter_email=' . urlencode(html_entity_decode($this->request->get['filter_email'], ENT_QUOTES, 'UTF-8'));
			}

			if (isset($this->request->get['filter_customer_group_id'])) {
				$url .= '&filter_customer_group_id=' . $this->request->get['filter_customer_group_id'];
			}

			if (isset($this->request->get['filter_status'])) {
				$url .= '&filter_status=' . $this->request->get['filter_status'];
			}

			if (isset($this->request->get['filter_approved'])) {
				$url .= '&filter_approved=' . $this->request->get['filter_approved'];
			}

			if (isset($this->request->get['filter_ip'])) {
				$url .= '&filter_ip=' . $this->request->get['filter_ip'];
			}

			if (isset($this->request->get['filter_date_added'])) {
				$url .= '&filter_date_added=' . $this->request->get['filter_date_added'];
			}

			if (isset($this->request->get['sort'])) {
				$url .= '&sort=' . $this->request->get['sort'];
			}

			if (isset($this->request->get['order'])) {
				$url .= '&order=' . $this->request->get['order'];
			}

			if (isset($this->request->get['page'])) {
				$url .= '&page=' . $this->request->get['page'];
			}

А теперь представте волшебство Если бы можна было бы так

$url = $this->url->saveUrlParametrs('filter_name', 'filter_email', 'filter_customer_group_id');

И подобных ситуаций уйма. Про дублирование верстки я молчу вообще. Чтоб добавить чтото к товару нада єто продлублировать в 100500 файлах.
В мадженте к примеру страница редактирования или список в админке создается с помощью двох XML файлов где просто описиваются конфигурации и єтими конфигами можна решить около 75% задач что ставлятса к кодингу доходит редко и економит просто уйму времени. С версткой аналогично создаеш блок и подтягиваеш в нужное место и живеш и радуешся жизни.

 

Ну думал написать по больше но с временем не сложилось. Может потом добавлю что то.


 



53 Comments


Recommended Comments



3 часа назад, EVMedvedev сказал:

 

Г...но кодеры есть везде, просто их уровень разный. В ОС их особенно много потому что движок прост и с ним начинают работать в первую очередь люди с невысоким уровнем интеллекта, если судить по комментам того же ashap. А таких на этом форуме хватает. На форумах мадженто или Престашоп я такого не встречал. Более сложный движок требует больше ума, что и проявляется в том числе и в публикуемых комментариях.

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

я вас не оскорблял, видимо с ителектом проблемы у вас

балаболов везде хватает, дела 0, только бла бла бла бла

 

PS отзыв от покупателя

2019-08-09_13-33-55.thumb.png.f182f1adad8106a86ad2f1dc08ddf205.png

Share this comment


Link to comment
4 часа назад, buslikdrev сказал:

Это ускорит выполнение кода?

Замедлит на 30 тактов процессора

Это ускорит написание (что впрочем уже давно у себя делаю)
Иногда забываю..

 

Share this comment


Link to comment
В 08.08.2019 в 18:52, EVMedvedev сказал:

Так от ОС не требуется таких же наворотов как от Мадженто. Это инструменты разных классов для разных задач. Мадженто профессиональная экосистема для создания функционально сложных проектов с длительным жизненным циклом, а ОС это простенькая CMS для небольших проектов, простеньких стартапов и т.п.

Если брать ваши слова то все все магазины на ОС обречены на смерть. Так как бизнес это рост а рост требует технологий и функционала. 
Вы когда то питались поддерживать опенкарт который уже работает лет 5-6 ?
Когда через примитивную инфраструктуру куча модулей превратили проект в кучу мусора который уж очень трудно прибрать. 
Или же вот самый простой вариант это когда нужно изменить вид карточки товара в списке ? Сколько файлов нужно изменить ? Или как написать сложный модуль если ОС по дефолту в любой форме перезаписывает всю информацию например редактирование товара ?

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

Суть в том что по мере роста проекта ОС превращяется в сборку мусора. Который очень сложно подерживать. 

Вот сколько лет уже опенкарт поддерживет "Композер" и насколько много проектов есть с ним сейчас ? Когда пишеш сложный модуль у тебя два выхода
1.  Пихать все в 1-2 файла что превращяется в кучу мусора потом
2. Розбить на нормальный модуль с одельными частями но проблема в том что эти файлы не как загрузить в систему вот и приходится каждому делать свой загрузчик и так дале. 

 

И самое главное в этом что когда проект перерастает возможности ОС мало кто хочет переделывать сайт и дальше едут на костылях и тратят кучу денег на поддержку своего монстра.

Share this comment


Link to comment
13 часов назад, buslikdrev сказал:

Это ускорит выполнение кода ?

Как сказали уже Нет. Но уберет его 100500 дублей.
 

8 часов назад, chukcha сказал:

Это ускорит написание (что впрочем уже давно у себя делаю)
Иногда забываю..

 И это нормальная практика.

Когда все говорят о простоте кода в ОС вот есть прекрастый пример ведь в нем все понятно и каждый второй с 1 раза поймет. Хотя бы вынесли бы его в отдельный метод пагинации.

<?php

$data['results'] = sprintf($this->language->get('text_pagination'), ($product_total) ? (($page - 1) * $limit) + 1 : 0, ((($page - 1) * $limit) > ($product_total - $limit)) ? $product_total : ((($page - 1) * $limit) + $limit), $product_total, ceil($product_total / $limit));

 

Share this comment


Link to comment
49 минут назад, konorws сказал:

Когда все говорят о простоте кода в ОС вот есть прекрастый пример

        $pagination = new Pagination();
        $pagination->total = $product_total;
        $pagination->page = $page;
        $pagination->limit = $this->config->get('config_admin_limit');
        $pagination->text = $this->language->get('text_pagination');
        $pagination->url = $this->url->link('catalog/product', 'token=' . $this->session->data['token'] . $url . '&page={page}', 'SSL');
            
        $pagination = $pagination->render();

Не? Не помните?

Share this comment


Link to comment
51 минуту назад, konorws сказал:

Как сказали уже Нет.

Не смешите!!! Это 30 тактов..
на фоне обработки массивом, это 0,0000001% времени

Share this comment


Link to comment
4 часа назад, konorws сказал:

Если брать ваши слова то все все магазины на ОС обречены на смерть. Так как бизнес это рост а рост требует технологий и функционала. 
Вы когда то питались поддерживать опенкарт который уже работает лет 5-6 ?
Когда через примитивную инфраструктуру куча модулей превратили проект в кучу мусора который уж очень трудно прибрать. 
Или же вот самый простой вариант это когда нужно изменить вид карточки товара в списке ? Сколько файлов нужно изменить ? Или как написать сложный модуль если ОС по дефолту в любой форме перезаписывает всю информацию например редактирование товара ?

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

Суть в том что по мере роста проекта ОС превращяется в сборку мусора. Который очень сложно подерживать. 

Вот сколько лет уже опенкарт поддерживет "Композер" и насколько много проектов есть с ним сейчас ? Когда пишеш сложный модуль у тебя два выхода
1.  Пихать все в 1-2 файла что превращяется в кучу мусора потом
2. Розбить на нормальный модуль с одельными частями но проблема в том что эти файлы не как загрузить в систему вот и приходится каждому делать свой загрузчик и так дале. 

 

И самое главное в этом что когда проект перерастает возможности ОС мало кто хочет переделывать сайт и дальше едут на костылях и тратят кучу денег на поддержку своего монстра.

 

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

А достоинства и недостатки ОС в разных условиях у меня есть с чем сравнить, потому что у меня достаточно богатый опыт разработки сайтов ИМ не только на ОС, но и на Prestashop, и на Magento, включая версию 2. Уж поверьте, проблемы с композером, это малая доля проблем, при разработке сайтов на ОС.

Edited by EVMedvedev

Share this comment


Link to comment
23 минуты назад, EVMedvedev сказал:

возникли потребности в существенном расширении функционала и повышении производительности сайта при высокой посещаемости. Поддержка сайта на ОС это проблема. И возникает она из-за недостатков организации кода.

А можно конкретнее?

Какие именно были задачи, которые не нашли решения?

Share this comment


Link to comment
30 минут назад, optimlab сказал:

А можно конкретнее?

Какие именно были задачи, которые не нашли решения?

 

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

С технической точки зрения движок имеет безграничные возможности построения оберток к любому методу любого класса как самого движка, так и любого модуля стороннего разработчика или же его замены оверрайдом без модификации кода ни того ни другого.  Это целая экосистема для организации совместной работы множества сторонних разработчиков. Не говоря уже о поддержке composer. Это все против несчастного VQMod.

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

Правда в замен приходится иметь дело с крайне ресурсоемким монстром с гигантским объемом кода, весьма сложными правилами кодирования и обширным функционалом администрирования. Только нормальный специализированный хостинг со всем необходимым функционалом стоит около 300$ в месяц.

 

Edited by EVMedvedev
  • +1 1

Share this comment


Link to comment
4 часа назад, EVMedvedev сказал:

Только нормальный специализированный хостинг со всем необходимым функционалом стоит около 300$ в месяц.

За такие деньги можно физический сервер арендовать.

Неужели Мадженто аж настолько сейчас прожорлива?

 

 

18 часов назад, chukcha сказал:

Замедлит на 30 тактов процессора

Почему именно 30?

Share this comment


Link to comment
4 часа назад, Dotrox сказал:

За такие деньги можно физический сервер арендовать.

Неужели Мадженто аж настолько сейчас прожорлива?

 

 

Почему именно 30?

long Call
long Ret
около 20  + выравнивания регистров
Даже если больше 100. Это не время.

  • +1 1

Share this comment


Link to comment
5 часов назад, Dotrox сказал:

За такие деньги можно физический сервер арендовать.

Неужели Мадженто аж настолько сейчас прожорлива?

 

 

Я поддерживаю магазин с претензией на топовый по определенному сегменту ранка для стран СНГ. Посещаемость летом, в сезон спада, около 2000. В пиковые может доходить до 3000. Для нормальной работы Мадженто 2 в таких условиях, нужно примерно 6 процессоров, гарантированно больше 2ГБ оперативки в среднем потребляет около 4), и на хосте должен быть обязательно установлен Redis (кэширование запросов к БД, результатов отработки фрагментов кода и полностраничного кэширования) и организовано статическое кэширование на базе nginx для статики (JS, CSS, картинки, фрагменты статического HTML, используемых knockout библиотекой). При этом нужно включать все опции штатного ускорения (плоские таблицы для товаров и категорий, компиляцию PHP кода, по сути его упаковку, минификацию CSS, JS и HTML). И это при том, что Мадженто активно использует динамическую подгрузку контента средствами knockout и кэширование не только штатными средствами барузера и сервера, но и с помощью JS кода в dataStorage. Правда это с учетом того, что там модулей напихано разных десятка 2, по сравнению с чистым движком из коробки, но все равно.

Заказчик лично перепахал весь интернет для в поиске подходящего хостинга. В России готовых решений с профессиональной технической поддержкой хостинга именно для Мадженто 2 для сайта с его параметрами не нашлось. Самостоятельно запускать сервер со всеми наворотами - это надо держать своего сисадмина. Это не лучший выход в его ситуации.

В магазине активных порядка 10 000 товаров, еще примерно столько же в Музее (сохранены для показа, но сняты с продажи). Объем картинок около 60ГБ.

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

Edited by EVMedvedev

Share this comment


Link to comment

удалено. Ошибочное цитирование

Edited by EVMedvedev

Share this comment


Link to comment

Главное что дает архитектура Мадженто, по сравнению с другими движками, это легкость обновления движка и всего что над ним надстроено. Движок обновляется раз в пол года. Модули обновляются раз в квартал. Я надстраиваю над всем этим свои модификации. Если бы в архитектуре движка не была бы заложена полная независимость кода всех участников, а было бы все заплетено как в ОС, то удержать систему в актуальном состоянии было бы практически не возможно. При каждом обновлении приходилось бы много чего снова допиливать и перепиливать руками. Отсюда рост издержек на сопровождение сайта на ОС со временем. Именно поэтому многие сидят на версиях ОС 1.5. Слишком дорого переносить сделанные наработки на новую версию движка.

То есть Мадженто архитектурно лучше заточена под долгосрочные проекты. По моему опыту работы с ОС и Мадженто удержать в актуальном да еще и работоспособност состоянии сайт на ОС в таких условиях не реально.

Edited by EVMedvedev

Share this comment


Link to comment
31 минуту назад, EVMedvedev сказал:

 

 Для нормальной работы Мадженто 2 в таких условиях, нужно примерно 6 процессоров, гарантированно больше 2ГБ оперативки в среднем потребляет около 4),

 

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

1. С тем что маджента ресурсоемкая это не поспориш но есть очень хорошие решения например Varnish кеш. Который может обновлятся раз в день и минимизировать ресурсы очень сильно.
2. Тут ситуация спорная насчет сисадмина. Там уж не так и много нужно. На крайний случай нормальние хост компании предоставляют такие услуги.
 

Share this comment


Link to comment
1 час назад, EVMedvedev сказал:

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

Если это магазин с претензией на топовый, то это единственный выход.

KVM VDS на 6 ядер, 16Гб RAM и 320Гб SSD у западных облачников будет стоить $80 в месяц (пример конфигурации реального тарифа и его цена).

А за $120 у того же хостера можно взять голое железо на 8 ядер Xeon E3-1270 v6, 32Гб RAM и SSD 2*240Гб.

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

 

 

1 час назад, EVMedvedev сказал:

Мадженто активно использует динамическую подгрузку контента средствами knockout

Я думал knockout уже давно никто не использует. Вторая Мадженто же не настолько старая.

Knockout ведь медленней даже Ангуляра.

 

 

1 час назад, EVMedvedev сказал:

удержать в актуальном да еще и работоспособност состоянии сайт на ОС в таких условиях не реально.

В актуальном, возможно, на ОК и не удержать, но в работоспособном - вполне.

Мои самые старые магазины на ОК уже по 7 лет работают.

Да и в случае ОК обновления - это всегда новые баги.

 

 

3 часа назад, chukcha сказал:

Даже если больше 100. Это не время.

Вопрос был не в том, много или мало, а просто как число получилось? Я такты по коду считать не умею, потому и спрашиваю :)

 

 

 

Share this comment


Link to comment
3 минуты назад, Dotrox сказал:

Я такты по коду считать не умею, потому и спрашиваю

Если хоть чуть-чуть знаешь команды ( и не один год в этом рабоатал) то можно напрячься и вспомнить и посчитать, ну или загуглить на предмет тактов

Share this comment


Link to comment
42 минуты назад, Dotrox сказал:

Если это магазин с претензией на топовый, то это единственный выход.

KVM VDS на 6 ядер, 16Гб RAM и 320Гб SSD у западных облачников будет стоить $80 в месяц (пример конфигурации реального тарифа и его цена).

А за $120 у того же хостера можно взять голое железо на 8 ядер Xeon E3-1270 v6, 32Гб RAM и SSD 2*240Гб.

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

 

 

 

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

Share this comment


Link to comment
49 минут назад, Dotrox сказал:

 

Я думал knockout уже давно никто не использует. Вторая Мадженто же не настолько старая.

Knockout ведь медленней даже Ангуляра.

 

 

 

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

Share this comment


Link to comment
53 минуты назад, Dotrox сказал:

В актуальном, возможно, на ОК и не удержать, но в работоспособном - вполне.

Мои самые старые магазины на ОК уже по 7 лет работают.

Да и в случае ОК обновления - это всегда новые баги.

 

 

 

 

 

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

Просто бывают проекты, когда необходимо поддерживать код сайта в актуальном состоянии и при этом над движком настроено примерно 50-60 разных модулей, от 5-6 разработчиков, и все это постоянно обновляется для повышения производительности и безопасности. В таких условиях ОС не применим. Но если в Мадженто все это есть, то это не значит, что ее нужно применять для всех проектов без разбора. ОС хорош там, где несложный и стабильный функционал, когда работоспособность сайта можно поддерживать делая минимальные заплатки в коде. Если смотреть на код ОС с этой позиции, он не так уж и плох. Он легко читабелен и его легко подгонять по месту по мелочам с минимальными затратами. В системах типа Мадженто задается очень сложная и жесткая дисциплина разработки кода модулей, чтобы все разработки многих разработчиков не мешали друг другу, но эта дисциплина является помехой и излишними затратами в простых проектах. Поэтому когда начинают спорить о том, что хорошо и что плохо в отрыве от конкретных условий, то это глупость. Хорошо или плохо это оценочная характеристика, которая для одного и того же свойства может быть разной в зависимости от внешний условий. Не зря ведь говорят: "Что русскому хорошо, то немцу смерть" и т.п. Вот и все.

Share this comment


Link to comment
22 часа назад, chukcha сказал:

        $pagination = new Pagination();
        $pagination->total = $product_total;
        $pagination->page = $page;
        $pagination->limit = $this->config->get('config_admin_limit');
        $pagination->text = $this->language->get('text_pagination');
        $pagination->url = $this->url->link('catalog/product', 'token=' . $this->session->data['token'] . $url . '&page={page}', 'SSL');
            
        $pagination = $pagination->render();

Не? Не помните?

Помню но это выводит блок "силок пагинации" а тот что я скинул это блок текста "Показа 20 из 100 ...."
В том то и вопрос почему не впихнуть этот код в Класс Пагинации

Share this comment


Link to comment
1 минуту назад, konorws сказал:

почему не впихнуть

А может кому0то не надо - $data['results']

Share this comment


Link to comment
15 минут назад, konorws сказал:

В том то и вопрос почему не впихнуть этот код в Класс Пагинации

Это забавно, но в версии 1.5 так оно и было.

 

14 минут назад, chukcha сказал:

А может кому0то не надо - $data['results']

Правильным решением было бы просто вынести это в отдельный метод класса пагинации.

И ещё более правильным решением был бы вынос html из этого класса, ибо верстать эту лапшу - каторга.

Share this comment


Link to comment
7 минут назад, Dotrox сказал:

Правильным решением было бы просто вынести это в отдельный метод класса пагинации.

И ещё более правильным решением был бы вынос html из этого класса, ибо верстать эту лапшу - каторга.

Ок.. я с вами 100% согласен...
Что по этому поводу вы сказали Даниелю?

Share this comment


Link to comment
2 минуты назад, chukcha сказал:

Что по этому поводу вы сказали Даниелю?

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

Лапша и повторы кода - это его фирменный стиль, а все, кто не понимает "гениальности" этого стиля, для него - идиоты.

Share this comment


Link to comment

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
You are posting as a guest. If you have an account, please sign in.
Add a comment...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

  • Recently Browsing   0 members

    No registered users viewing this page.

×

Important Information

On our site, cookies are used and personal data is processed to improve the user interface. To find out what and what personal data we are processing, please go to the link. If you click "I agree," it means that you understand and accept all the conditions specified in this Privacy Notice.