PrestaShop vs OpenCart

Статус
В этой теме нельзя размещать новые ответы.
Если вы блондинка то вообще забудьте про разные движки и магазины.. заплатите хорошему программисту и сделают вам нормальный магазин.
прикрутить модуль даже для блондики не проблема, обычно инструкция в комплекте подробная. куда сложней с индивидуальным дизайном и если вот шаблон из сети брать и подгонять его, вот тут уже проблема у многих.
 
Если вы блондинка то вообще забудьте про разные движки и магазины.. заплатите хорошему программисту и сделают вам нормальный магазин.
Я серьезно. Я сам программист, сайтами занимаюсь около 10 лет и все равно далеко не все знаю.. и иногда приходится нормально поломать голову для того чтобы решить какую-то проблему.
Все почему-то думают, что можно без каких-либо знаний взять красивенький движок, натыкать туда 100500 модулей и в результате получится супер-классный магазин. Нет и еще раз нет. В лучшем случае получится очередной говносайт (извините то есть даже такой термин). Для любого более менее нормального магазина нужно нормально "поработать напильником", что бы с него получилось что-то стоящее. По любому придется все переносить на хостинг и возможно настраивать на хостинге, решать проблемы совместимости модулей, совместимости тем, очень часто изменять код самого движка итд.. А тут по любому нужны знания.
Вы конечно, молодец что так мне все описали, буду знать. Но к сведению, я хоть и блондинка, но типа инженер системотехник, который немного учился на первых курсах, ну и типа опыт настройки разных движков есть, и ковыряния под свои нужды в кодах, просто я это делаю не круто! Вот, потому и спросила совета, дабы немного облегчить поиски модулей... сосредоточившись на настройке.
 
Вы сравниваете русский форум опенкарта и английский магазин расширений престы. На официальном сайте опенкарта цены тоже в среднем $30 Для просмотра ссылки Войди или Зарегистрируйся.

ОК, возьмем официальные сайты Для опенкарта только достаточно сложные модули стоят 30 и больше долларов, а процентов 80% модулей стоит от 10 до 30 долларов!. В то время как для престы минимальная цена начинается от 30 (и выше - 40, 50 и до 350) евро!. Смотрел тут Для просмотра ссылки Войди или Зарегистрируйся

Преста тоже поддерживает MVC паттерн, но в модулях все зависит от разработчика. С версии 1.5 в модулях контроллеры, представления и остальное тоже должны лежать в отдельных папках, но для обратной совместимости многие этого не делают.
От разработчика говорите.. Специально скачал версию 1.5, так раньше смотрел только 1.4, думал может действительно что-то кардинально поменялось.
Зашел в папку modules, открыл первый попавшийся файл - blocklayered.php и увидел там вот такой код:
PHP:
    public function hookFeatureValueForm($params)
    {
        $languages = Language::getLanguages(false);
        $default_form_language = (int)(Configuration::get('PS_LANG_DEFAULT'));
        $lang_value = array();
     
        if (version_compare(_PS_VERSION_,'1.5','>'))
            $return = '
                <script type="text/javascript">
                    flag_fields = \'\';
                </script>';
        else
            $return = '';
     
        $result = Db::getInstance(_PS_USE_SQL_SLAVE_)->executeS(
        'SELECT url_name, meta_title, id_lang FROM '._DB_PREFIX_.'layered_indexable_feature_value_lang_value
        WHERE id_feature_value = '.(int)$params['id_feature_value']);
        if ($result)
            foreach ($result as $data)
                $lang_value[$data['id_lang']] = array('url_name' => $data['url_name'], 'meta_title' => $data['meta_title']);
        $return .= '<div class="clear"></div>
                <label>'.$this->l('URL:').'</label>
                <div class="margin-form">
                <script type="text/javascript">
                    flag_fields += \'¤url_name¤meta_title\';
                </script>
                <div class="translatable">';
        foreach ($languages as $language)
            $return .= '
                    <div class="lang_'.$language['id_lang'].'" id="url_name_'.$language['id_lang'].'" style="display: '.($language['id_lang'] == $default_form_language ? 'block' : 'none').'; float: left;">
                        <input size="33" type="text" name="url_name_'.$language['id_lang'].'" value="'.Tools::safeOutput(@$lang_value[$language['id_lang']]['url_name'], true).'" />
                        <span class="hint" name="help_box">'.$this->l('Invalid characters:').' <>;=#{}_<span class="hint-pointer">&nbsp;</span></span>
                        <p style="clear: both">'.$this->l('Specific URL format in block layered generation').'</p>
                    </div>';
        if (version_compare(_PS_VERSION_,'1.5','<'))
...
При этом файл подписан "@author PrestaShop SA <contact@prestashop.com>"
По-вашему это MVC? По-моему это самый что ни есть говнокод, который сами разработчики движка и клепают.
Остается только искренне посочувствовать тем кому приходится с этим работать..
 
прикрутить модуль даже для блондики не проблема, обычно инструкция в комплекте подробная.
Ага, и любой модуль будет вам идеально работать со всеми версиями опенкарта и со всеми сборками.. не будет конфликтовать ни с одним другим модулем, будет идеально вписываться в любой шаблон и вообще делать все точно то, что от него нужно.. :))) может быть в какой-то паралельной вселенной))
Любой модуль пишется и тестируется на голой сборке магазина со стандартной темой. В лучшем случае модуль тестируется на совместимость с каким-то ну очень популярными модулями и темами (типа шопики), все. На все остальные случаи никакой гарантии нету.
 
гляньте на это творение Для просмотра ссылки Войди или Зарегистрируйся. С этим модулем вопрос про админку решается.
ребята проблема опенкарта как для меня пользователя была в одном в админке , но после поста (в цитате) все отпало само собой реально теперь интересует тупо опенкарт.
 
  • Нравится
Реакции: stnx
Вы конечно, молодец что так мне все описали, буду знать. Но к сведению, я хоть и блондинка, но типа инженер системотехник, который немного учился на первых курсах, ну и типа опыт настройки разных движков есть, и ковыряния под свои нужды в кодах, просто я это делаю не круто! Вот, потому и спросила совета, дабы немного облегчить поиски модулей... сосредоточившись на настройке.

Для "ковыряния в кодах" имхо лучше подходит опенкарт, так как код намного! более понятный и читаемый. Пример кода престы я привел выше.
Приведу еще пример кода конроллера модуля опенкарта:

PHP:
class ControllerModuleInformation extends Controller {
  protected function index() {
 
    $this->language->load('module/information');
 
    $this->data['heading_title'] = $this->language->get('heading_title');
    $this->data['text_contact'] = $this->language->get('text_contact');
    $this->data['text_sitemap'] = $this->language->get('text_sitemap');
 
    $this->load->model('catalog/information');
 
    $this->data['informations'] = array();
    foreach ($this->model_catalog_information->getInformations() as $result) {
          $this->data['informations'][] = array(
            'title' => $result['title'],
            'href'  => $this->url->link('information/information', 'information_id=' . $result['information_id'])
          );
    }
 
    $this->data['contact'] = $this->url->link('information/contact');
    $this->data['sitemap'] = $this->url->link('information/sitemap');
 
    if (file_exists(DIR_TEMPLATE . $this->config->get('config_template') . '/template/module/information.tpl')) {
      $this->template = $this->config->get('config_template') . '/template/module/information.tpl';
    } else {
      $this->template = 'default/template/module/information.tpl';
    }
 
    $this->render();
  }
}

В массив data передаются переменные для представления.
Вся работа с базой спрятана в методе модели, из контроллера нам не нужно использовать sql запросы, мы просто подключаем нужную модель:

$this->load->model('catalog/information');
и получаем все нужные данные одной строчкой кода
$this->model_catalog_information->getInformations()

когда все готово, подключается файл шаблона и происходит рендеринг. В контроллере у нас нету ни одной строчки html кода, он весь в шаблоне.
Да, этот код тоже не идеальный, но он очень простой и намного легче читается.
 
Код:
if (version_compare(_PS_VERSION_,'1.5','>'))
Это код для совместимости со старыми версиями. И он выводит страницу конфигурации в админке. Все что, во фронт-оффисе выводится через шаблоны.

Для примера контроллер модуля в престе Для просмотра ссылки Войди или Зарегистрируйся

Страница настроек для версии 1.5 (Для просмотра ссылки Войди или Зарегистрируйся). Никакого html
Код:
$this->fields_form[0]['form'] = array(
            'legend' => array(
                'title' => $this->l('Settings'),
                'image' => _PS_ADMIN_IMG_.'information.png'
            ),
            'description'=>$this->l('Add payment methods on').' <a href="?tab=AdminUniPaySystem&token='.Tools::getAdminToken('AdminUniPaySystem'.(int)(Tab::getIdFromClassName('AdminUniPaySystem')).(int)($this->context->cookie->id_employee)).'" class="link">'.$this->l('Payments>Pay Systems tab').'</a>',
            'input' => array(
                array(
                    'type' => 'radio',
                    'label' => $this->l('Confirmation button'),
                    'desc' => $this->l('Confirmation button on paysystems page'),
                    'name' => 'universalpay_onepage',
                    'class' => 't',
                    'is_bool' => true,
                    'values' => array(
                        array(
                            'id' => 'universalpay_onepage_on',
                            'value' => 1,
                            'label' => $this->l('Enabled')
                        ),
                        array(
                            'id' => 'universalpay_onepage_off',
                            'value' => 0,
                            'label' => $this->l('Disabled')
                        )
                    )
                ),
            ),
 
            'submit' => array(
                'name' => 'submitSave',
                'title' => $this->l('Save'),
                'class' => 'button'
            )
        );
 
а это по-вашему что? :)
PHP:
            'description'=>$this->l('Add payment methods on').' <a href="?tab=AdminUniPaySystem&token='.Tools::getAdminToken('AdminUniPaySystem'.(int)(Tab::getIdFromClassName('AdminUniPaySystem')).(int)($this->context->cookie->id_employee)).'" class="link">'.$this->l('Payments>Pay Systems tab').'</a>',
этот код настолько плохо читается что вы даже не увидели в нем html, а он там есть :))
 
Это поле с описанием. Неужели для того, чтобы вставить ссылку нужен отдельный шаблон?
 
Это поле с описанием. Неужели для того, чтобы вставить ссылку нужен отдельный шаблон?
Почему отдельный? Это описание же потом в каком-то шаблоне рендериться, правильно? Так почему бы в контроллере не сформировать все необходимые для этой ссылки данный (текст, урл) и не предать их в этот шаблон. А потом в самом шаблоне создать эту ссылку, подставив в нее данные из контроллера? В таком случае любой дизайнер сможет изменить эту ссылку, добавить в нее дополнительные классы или идентификаторы или изменить ее код непосредственно из шаблона, и ему не придется потом искать эту ссылку где-то в дебрях контроллера (в котором, учитывая качество кода, не каждый программист сможет разобраться).. Для этого и придуман MVC чтобы отделить логику от модели и представления.
Плюс, не знаю как в персте, а в нормальных движках для такой рутины как создание ссылок созданы хелперы. Например в Drupal ссылка создается с помощью функции l() - l('Title', 'url');
 
Статус
В этой теме нельзя размещать новые ответы.
Назад
Сверху