Сайт специалистов

Подскажите компонент

#16 16 апреля 2015 в 14:18
veg, подобный сайт нужно базировать на двойке.



Вот недавно Денис написал пост: я делал на 103 версию и вот 106 решил обновить. Полтора года прошло и он решил обновить.

letsgo
Мдаа… который раз убеждаюсь что вся ваши выводы базируются на домыслах, при этом делаете выводы не понимая сути дела.
Первая версия упомянутого модуля была под 1.10, после было уведомление об обновлении в связи с дополнением… Дальше я нечего не дополнял, потому и не создавал новых записей касаемо модуля… "Cлышал звон, да не знает, где он".
для, letsgo
#17 16 апреля 2015 в 14:48

поставить видео компонент

letsgo
А видеокомпонент вы как используете в этой схеме?
#18 16 апреля 2015 в 15:35

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

r2
100% согласен

А по поводу

Компонент сделанный на заказ и компонент сделанный на продажу это совсем разные вещи...

letsgo
я имел ввиду что на продажу всем не угодишь, а когда делаешь на заказ то делается именно так как хочет этого клиент в меру его хотелок
#19 16 апреля 2015 в 15:54

Создавать расширения для неё гораздо быстрее и приятнее.

r2
Опять же на цвет и вкус товарищей нет.

Поэтому не вводите людей в заблуждение, пожалуйста.

r2
Я не кого не ввожу в заблуждение, в 70% приходиться делать правки в файлах системы, и как раз про эти вещи Я говорил что при обновлении приходиться опять все делать.

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

r2
Если бы была проблема в том что лень, было бы одно. Если пока 2-ка сырая это мое субъективное мнение, я его силой некому не навязываю, и мои суждения основываются на реальным задачах, а не создании очередного клона демо сайта.
#20 16 апреля 2015 в 16:46

удобство для разработчиков в 2.0 и сделан основной акцент. Создавать расширения для неё гораздо быстрее и приятнее

r2
Вот я бы так не утверждал scratch
#21 16 апреля 2015 в 16:54

Вот я бы так не утверждал

lokanaft
ну ни надо… Где основания так считать? Есть неудобства это точно, для примера реализация виджета меню, если не ошибаюсь на него штук три — пять функций не из шаблона работают, но это все же обходится. Есть такое, но с вами все же не согласен.
#22 16 апреля 2015 в 17:19
подкорректирую: функции за пределами виджета, а работают они только на меню
#23 16 апреля 2015 в 17:32

Опять же на цвет и вкус товарищей нет.

maxisoft

Вот я бы так не утверждал

lokanaft

Нет, если кому-то доставляет удовольствие, к примеру, кодить каждую форму с нуля заново (вывод, валидацию, обработку) или писать SQL-запросы и циклы вместо вызова одной функции, то это его право конечно. Только к профессиональной разработке это не имеет отношения. Тут еще множество примеров можно было бы привести, но я не буду. Все это описано (или скоро будет описано) в документации.
#24 16 апреля 2015 в 18:01

кодить каждую форму с нуля заново (вывод, валидацию, обработку)

r2
уже давно не делаю этого все работает через массив согласен с валидацией траблы но все исправимо это не существенный плюс 2-ке.

писать SQL-запросы и циклы вместо вызова одной функции,

r2
Опять спорный вопрос, если опираться на то что есть в 1-ке тогда да, все меняется очень быстро и просто пример работы запросов в моих проектах
все запросы строятся на pdo при этом первая ветка работает и на postgres
  1.  
  2. $res = thDatabase::init()
  3. ->select('cms_tags')
  4. ->where('target', '=', 'didactical')
  5. ->andWhere('item_id', '=', $item_id)
  6. ->run()
  7. ->fetchAllAssoc();
  8.  
я сейчас не устраиваю бурных дискуссии, просто преимущество 2-ке только в ее MVC архитектуре, хотя большого выигрыша опять же не увидел. Я понимаю что каждый видит в своем свете и у каждого своя точка зрения, поэтому не буду больше дискутировать.
#25 16 апреля 2015 в 18:09

Но глобально вся архитектура готова и никаких кардинальных изменений в ней уже не будет.

r2
Глобальная архитектура чего?
Типов контента? Там все в пределах,, Вами Уважаемые разработчики и задуманного.
И все будет у ВАС и биллинг, и видео и магазин .
Оно будет у ВАС.
Но я поддерживаю

сделать серьезный проект на 2-ке сейчас крайне проблематично,

maxisoft
Просто у нас с Вами, разные понятия о серьезности .
У пользователя — Уважаемый letsgo, это панацея и всемирное решение любого каприза ( чисто гипотетически и теоретически),
Для меня эти решения требуют совершенно другого подхода,
Сейчас реально есть что реализовывать, я как раз пытаюсь разобрать эту архитектуру, и попытаться кое что изменить .
instantcms.ru/forum/thread21418.html
Еще нужно работать!
#26 16 апреля 2015 в 18:21
Преимущество 2 для пользователь близко знакомых со словами php и понимающими что можно нехитрыми манипуляциями — не понимаю происходящего, выполнить и применить определенные но ограниченные функции — которые раньше выполнял разработчик-программист!

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

Пример реализации сложного запроса и непростой функции составления запроса:

Запрос:
$sql = "SELECT DISTINCT *, pd.name AS name, p.image, m.name AS manufacturer, (SELECT price FROM ". $this->prefix. "product_discount pd2 WHERE pd2.product_id = p.product_id AND pd2.customer_group_id = '". (int)$this->cfg['config_customer_group_id']. "' AND pd2.quantity = '10' AND ((pd2.date_start = '0000-00-00' OR pd2.date_start < NOW()) AND (pd2.date_end = '0000-00-00' OR pd2.date_end > NOW())) ORDER BY pd2.priority ASC, pd2.price ASC LIMIT 1) AS discount, (SELECT price FROM ". $this->prefix. "product_special ps WHERE ps.product_id = p.product_id AND ps.customer_group_id = '". (int)$this->cfg['config_customer_group_id']. "' AND ((ps.date_start = '0000-00-00' OR ps.date_start < NOW()) AND (ps.date_end = '0000-00-00' OR ps.date_end > NOW())) ORDER BY ps.priority ASC, ps.price ASC LIMIT 1) AS special, (SELECT points FROM ". $this->prefix. "product_reward pr WHERE pr.product_id = p.product_id AND customer_group_id = '". (int)$this->cfg['config_customer_group_id']. "') AS reward, (SELECT ss.name FROM ". $this->prefix. "stock_status ss WHERE ss.stock_status_id = p.product_id AND ss.language_id = '". (int)$this->cfg['config_language_id']. "') AS stock_status, (SELECT wcd.unit FROM ". $this->prefix. "weight_class_description wcd WHERE p.weight_class_id = wcd.weight_class_id AND wcd.language_id = '". (int)$this->cfg['config_language_id']. "') AS weight_class, (SELECT lcd.unit FROM ". $this->prefix. "length_class_description lcd WHERE p.length_class_id = lcd.length_class_id AND lcd.language_id = '". (int)$this->cfg['config_language_id']. "') AS length_class, (SELECT AVG(rating) AS total FROM ". $this->prefix. "review r1 WHERE r1.product_id = p.product_id AND r1.status = '1' GROUP BY r1.product_id) AS rating, (SELECT COUNT(*) AS total FROM ". $this->prefix. "review r2 WHERE r2.product_id = p.product_id AND r2.status = '1' GROUP BY r2.product_id) AS reviews, p.sort_order FROM ". $this->prefix. "product p LEFT JOIN ". $this->prefix. "product_description pd ON (p.product_id = pd.product_id) LEFT JOIN ". $this->prefix. "product_to_store p2s ON (p.product_id = p2s.product_id) LEFT JOIN ". $this->prefix. "manufacturer m ON (p.manufacturer_id = m.manufacturer_id) WHERE p.product_id = '". (int)$product_id. "' AND pd.language_id = '". (int)$this->cfg['config_language_id']. "' AND p.status = '1' AND p.date_available <= NOW() AND p2s.store_id = '0'";


Пример функции :
$sql = "SELECT p.product_id AS pid, (SELECT AVG(rating) AS total FROM ". $this->prefix. "review r1 WHERE r1.product_id = p.product_id AND r1.status = '1' GROUP BY r1.product_id) AS rating, (SELECT price FROM ". $this->prefix. "product_discount pd2 WHERE pd2.product_id = p.product_id AND pd2.customer_group_id = '". (int)$this->cfg['config_customer_group_id']. "' AND pd2.quantity = '1' AND ((pd2.date_start = '0000-00-00' OR pd2.date_start < NOW()) AND (pd2.date_end = '0000-00-00' OR pd2.date_end > NOW())) ORDER BY pd2.priority ASC, pd2.price ASC LIMIT 1) AS discount, (SELECT price FROM ". $this->prefix. "product_special ps WHERE ps.product_id = p.product_id AND ps.customer_group_id = '". (int)$this->cfg['config_customer_group_id']. "' AND ((ps.date_start = '0000-00-00' OR ps.date_start < NOW()) AND (ps.date_end = '0000-00-00' OR ps.date_end > NOW())) ORDER BY ps.priority ASC, ps.price ASC LIMIT 1) AS special";

if (!empty($data['filter_category_id'])) {
if (!empty($data['filter_sub_category'])) {
$sql .= " FROM ". $this->prefix. "category_path cp LEFT JOIN ". $this->prefix. "product_to_category p2c ON (cp.category_id = p2c.category_id)";
} else {
$sql .= " FROM ". $this->prefix. "product_to_category p2c";
}

if (!empty($data['filter_filter'])) {
$sql .= " LEFT JOIN ". $this->prefix. "product_filter pf ON (p2c.product_id = pf.product_id) LEFT JOIN ". $this->prefix. "product p ON (pf.product_id = p.product_id)";
} else {
$sql .= " LEFT JOIN ". $this->prefix. "product p ON (p2c.product_id = p.product_id)";
}
} else {
$sql .= " FROM ". $this->prefix. "product p";
}

$sql .= " LEFT JOIN ". $this->prefix. "product_description pd ON (p.product_id = pd.product_id) LEFT JOIN ". $this->prefix. "product_to_store p2s ON (p.product_id = p2s.product_id) WHERE pd.language_id = '". (int)$this->cfg['config_language_id']. "' AND p.status = '1' AND p.date_available <= NOW() AND p2s.store_id = '". (int)$this->cfg['config_store_id']. "'";

if (!empty($data['filter_category_id'])) {
if (!empty($data['filter_sub_category'])) {
$sql .= " AND cp.path_id = '". (int)$data['filter_category_id']. "'";
} else {
$sql .= " AND p2c.category_id = '". (int)$data['filter_category_id']. "'";
}

if (!empty($data['filter_filter'])) {
$implode = array();

$filters = explode(',', $data['filter_filter']);

foreach ($filters as $filter_id) {
$implode[] = (int)$filter_id;
}

$sql .= " AND pf.filter_id IN (". implode(',', $implode). ")";
}
}

if (!empty($data['filter_name']) || !empty($data['filter_tag'])) {
$sql .= " AND (";

if (!empty($data['filter_name'])) {
$implode = array();

$words = explode(' ', trim(preg_replace('/\s+/', ' ', $data['filter_name'])));

foreach ($words as $word) {
$implode[] = "pd.name LIKE '%". $this->core->db->escape($word). "%'";
}

if ($implode) {
$sql .= " ". implode(" AND ", $implode). "";
}

if (!empty($data['filter_description'])) {
$sql .= " OR pd.description LIKE '%". $this->core->db->escape($data['filter_name']). "%'";
}
}

if (!empty($data['filter_name']) && !empty($data['filter_tag'])) {
$sql .= " OR ";
}

if (!empty($data['filter_tag'])) {
$sql .= "pd.tag LIKE '%". $this->core->db->escape($data['filter_tag']). "%'";
}

if (!empty($data['filter_name'])) {
$sql .= " OR LCASE(p.model) = '". $this->core->db->escape(mb_strtolower($data['filter_name'])). "'";
$sql .= " OR LCASE(p.sku) = '". $this->core->db->escape(mb_strtolower($data['filter_name'])). "'";
$sql .= " OR LCASE(p.upc) = '". $this->core->db->escape(mb_strtolower($data['filter_name'])). "'";
$sql .= " OR LCASE(p.ean) = '". $this->core->db->escape(mb_strtolower($data['filter_name'])). "'";
$sql .= " OR LCASE(p.jan) = '". $this->core->db->escape(mb_strtolower($data['filter_name'])). "'";
$sql .= " OR LCASE(p.isbn) = '". $this->core->db->escape(mb_strtolower($data['filter_name'])). "'";
$sql .= " OR LCASE(p.mpn) = '". $this->core->db->escape(mb_strtolower($data['filter_name'])). "'";
}

$sql .= ")";
}

if (!empty($data['filter_manufacturer_id'])) {
$sql .= " AND p.manufacturer_id = '". (int)$data['filter_manufacturer_id']. "'";
}

$sql .= " GROUP BY p.product_id";

$sort_data = array(
'pd.name',
'p.model',
'p.quantity',
'p.price',
'rating',
'p.sort_order',
'p.date_added'
);

if (isset($data['sort']) && in_array($data['sort'], $sort_data)) {
if ($data['sort'] == 'pd.name' || $data['sort'] == 'p.model') {
$sql .= " ORDER BY LCASE(". $data['sort']. ")";
} elseif ($data['sort'] == 'p.price') {
$sql .= " ORDER BY (CASE WHEN special IS NOT NULL THEN special WHEN discount IS NOT NULL THEN discount ELSE p.price END)";
} else {
$sql .= " ORDER BY ". $data['sort'];
}
} else {
$sql .= " ORDER BY p.sort_order";
}

if (isset($data['order']) && ($data['order'] == 'DESC')) {
$sql .= " DESC, LCASE(pd.name) DESC";
} else {
$sql .= " ASC, LCASE(pd.name) ASC";
}

if (isset($data['start']) || isset($data['limit'])) {
if ($data['start'] < 0) {
$data['start'] = 0;
}

if ($data['limit'] < 1) {
$data['limit'] = 20;
}

$sql .= " LIMIT ". (int)$data['start']. ",". (int)$data['limit'];
}
$product_row_query = array();
$product_data = array();

$result = $this->core->db->query($sql);

while($products_res_query = $this->core->db->fetchAssoc($result)){
$product_row_query[]= $products_res_query;
}

if($product_row_query){
foreach ($product_row_query as $res_items) {

$product_data[$res_items['pid']] = $this->getProduct($res_items['pid']);
}
}else{ return false; }//getProducts ->NULL

return $product_data;
Простота понимания и отладки очевидна.
Собственно по запросам проблем для разработчика нет совсем, выполняй любыми методами, ограничений нет.

А в плане архитектуры есть вопросы!

PS//Видимо программирование выходит на анологию с политики! Все все знаю, делают, И все правы,
Мне хочется чтобы система ICMS 2-** была совершенной. Я буду пытаться в меру знаний помогать!
#27 16 апреля 2015 в 19:40

Последний релиз поставил с нуля на чистый домен — после установки белое окно. Нормально работает система? Кажется что нет.

letsgo
вообще не аргумент. Система работает нормально, корректно, как нужно. По какой то причине вы не смогли ее установить. А белый экран… Что тут сказать, тема изъезженная и много объясняет почему у вас не установилось.

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

letsgo
Потому что привыкли к другому или

кроется в банальной лени разбираться с чем-то новым.

r2

Чего то да, не хватает двойке, но ровно столько же, сколько не хватает единичке.
А вопрос и ответ собственно просты: сложно разбираться с чем то новым? Разумеется сложно. А пряников с мороженным вам тут никто и не обещал joke
#28 16 апреля 2015 в 19:45

Последний релиз поставил с нуля на чистый домен — после установки белое окно. Нормально работает система? Кажется что нет.

letsgo

Это вообще ни о чем не говорит. Миллион может быть причин.

но в 2 вы потеряли логичность 1 ветки

letsgo

Ну это как бы тоже весьма субъективно.

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

maxisoft

Согласен, дискутировать тут особо не о чем, потому что каждый сам может взять, сравнить и сделать выводы.
#29 16 апреля 2015 в 19:54

Миллион может быть причин.

r2

Вот в том и проблема. А на 1 я уверен, что нет миллиона причин не работать.

Ну это как бы тоже весьма субъективно.

r2

Когда начинал вообще с вебом, пробовал разные системы. Вы же допускаете что Вордпресс отличная система? Но вот с админкой Инстант делал всех. Сейчас преймущество ушло. Вы как то делаете систему для разработчиков. Проблема была в 1 ветке — нехватка разработчиков и качественных компонентов, позволяющих более широко популяризировать систему, но сейчас мне кажется, все направлено только чтобы это решить.

p.s Ваш труд уважаю, знаю что на создание системы было потрачено очень многое, написать все это непросто. Но дьявол как известно кроется в мелочах. Конечно новички будут хватать 2 для создания сайтов, но эти сайты будут также быстро забрасываться, а вы мне кажется хотите других результатов. Хорошо, если ошибаюсь. Усложнено многое, интерфейс неудачный. Думаю, сейчас уже время эти моменты обдумать и возможно найти решение.
#30 16 апреля 2015 в 20:02

Вот в том и проблема. А на 1 я уверен, что нет миллиона причин не работать.

letsgo
Может быть миллион тех же самых причин.

Но вот с админкой Инстант делал всех. Сейчас преймущество ушло.

letsgo
Ну ок, пусть будет так. Об этом спорить вообще не вижу смысла, каждому удобно что-то свое. Иначе был бы один движок на весь интернет. Но их почему-то много и у каждого есть аудитория. Если вы не входите в число тех, кто считает 2.x удобной — то ок, это нормально. Пользуйтесь единичкой. Чисто дело вкуса. Нет смысла убеждать меня в том что надо всё поменять так, чтобы лично вам нравилось. Я готов рассматривать только конкретные предложения. Но в данной теме это офтоп.
Вы не можете отвечать в этой теме.
Войдите или зарегистрируйтесь, чтобы писать на форуме.
Используя этот сайт, вы соглашаетесь с тем, что мы используем файлы cookie.