markimax

Opencart 2.2 - языковые папки (как побороть ?)

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

markimax    1 547

Opencart 2.2 - языковые папки (как побороть ?)

Во всех версиях были папки russian
Теперь Даниэль и компания сделали дикий разворот в этой области

Что теперь делать ? Тупо копировать содержимое файлов в ru-ru ?

Кто как реализует в своих модулях ?

Надо как то выработать стандарт

К примеру свои модули я полностью адаптировал, они работают, но вот с языковыми папками - затык полный, как реализовать, чтобы не было у пользователей лишних дублей языковых папок

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
sv2109    437

как побороть? выпустить отдельно версию модуля для 2.2 с новыми языковыми папками. 

хотя, не сложно предвидеть, что в языковых папках у пользователей будут и старые папки и новые и все на кучу, так как копировать все будут модули для 2.1 в 2.2 и потом чистить это никто не будет..

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
markimax    1 547

как побороть? выпустить отдельно версию модуля для 2.2 с новыми языковыми папками. 

хотя, не сложно предвидеть, что в языковых папках у пользователей будут и старые папки и новые и все на кучу, так как копировать все будут модули для 2.1 в 2.2 и потом чистить это никто не будет..

Ну есть вариант перехватить вызов папок еще. К примеру по запросу код ru-ru подсовывать папку russian

Все же вести отдельные ветки для версий из-за папок не совсем "красиво", скажем так

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
chukcha    1 018

Решать перехватом..

Но! или ocmod, или отдельный функционал, типа - синхронизировать языковые файлы

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
markimax    1 547

Решать перехватом..

Но! или ocmod, или отдельный функционал, типа - синхронизировать языковые файлы

Вот и я склоняюсь к этому варианту

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
chukcha    1 018

В принципе, это не сложно..

Можно, тупо.. при входе в админку делать синхронизацию, проверять наличие старых путей и перемещать в новые.

Да, первый вход - самый тяжелый, а следующие - уже брызги..

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
markimax    1 547

В принципе, это не сложно..

Можно, тупо.. при входе в админку делать синхронизацию, проверять наличие старых путей и перемещать в новые.

Да, первый вход - самый тяжелый, а следующие - уже брызги..

Я думаю, просто при запросе заменять пути папок .../ru-ru/... на .../russian/... - всего одна строка кода str_replace. Но не известно как дальше может "развить мысль" Даниэль :-D

Синхронизацию не всегда есть возможность сделать - не у всех есть доступ на запись, будут проблемы у малоквалифицированных пользователей

Хотя тоже рассмотрю этот вариант.  Это очень не плохой вариант. Спасибо.

Короче надо обсудить и подумать, над "коварством" Даниэля

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
chukcha    1 018

не у всех есть доступ на запись

 

Ну... При входе в админку, проверяется папки download, cache, log на запись, вот в этот момент и делать синхронизацию

И, естественно, кричать, просить, дать доступ..

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
rb2    407

vqmod/ocmod подход вас быстро плохому научил. Забыли, что есть install.php, в котором можно спросить, какие языки есть в магазине и где они живут?

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
markimax    1 547

vqmod/ocmod подход вас быстро плохому научил. Забыли, что есть install.php, в котором можно спросить, какие языки есть в магазине и где они живут?

rb2, я не совсем понял при чем здесь vqmod и ocmod (тем более что я никогда их не использую в своих модулях). И причем здесь install.php. Эту мат. часть мы прекрасно знаем. Вопрос в другом не у всех есть права на запись в папки к примеру /admin/language/* и у разных версий opencart разные уже папки для языков. Не хочется плодить дубли языковых папок у  пользователей  Не забывайте модули частенько устанавливают до языкового пакета, полюс наверняка какие то модули (вот здесь привет лентяям с ocmod) будут использовать старые папки языков и простое переименование папки сделает не работоспособным другие модули. Т е  надо предусмотреть все варианты

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
chukcha    1 018

ну...

 

 

(тем более что я никогда их не использую в своих модулях).

не используете, а в системные файлы лезете напрямую..

Лучше бы вставляли через ocmod/vqmod

 

извините, что встрял в ваш разговор, (привет разработчикам с прописыванием кода в системные файлы)

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
markimax    1 547

ну...

 

не используете, а в системные файлы лезете напрямую..

Лучше бы вставляли через ocmod/vqmod

 

извините, что встрял в ваш разговор, (привет разработчикам с прописыванием кода в системные файлы)

Ну не лезу я, сколько можно повторять уже. Не лезу я в КОД файла. Это совершенно разные вещи.  Разве вы не заметили куда добавляется код ?!  Он не меняет ли логики и не даже нумерификации строк системного кода файла (и всего одного файла). Не изменяет ни одного байта стандартного кода. Что не понятного еще. Не сравнивайте ocmod который меняет строки кода и логику внутри. Так что ocmod с его проверками кеша и т..п. сравнивать не надо. Уж тем более советовать это сделать.

Ну надоело честное слово.

Как говорил мой комбат, можно и к столбу до...ся - почему без пилотки.

Тема не "холивар с Марком", а конкретная по opencart 2.2

 

И попросил помощи и советов в решении проблемы. А ни "холивара" не в тему

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
chukcha    1 018

<offtop>

 

Холивар начали вы, вот с этих слов, промолчали бы, и не было бы вопросов.
 

(вот здесь привет лентяям с ocmod)

(тем более что я никогда их не использую в своих модулях)

 
 

Не лезу я в КОД файла.

Т.е. вы нигде не прописываете свой фронтлоадер,?
 
 
А это взялось с воздуха.

$file = DIR_SYSTEM . 'library/front_loader.php';
if (file_exists($file)) {include_once($file);}
$seocmspro_loader='end';

 
И это называется
Не изменяет ни одного байта стандартного кода
Это называется вмешаться в стандартный код (изменить)

 

</offtop>

 

 

Кстати, install.php может находиться один, без ocmod файлов, так что отмазка про ocmod, vqmod не канает. А может рассматриваться как вариант решения.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
markimax    1 547

<offtop>

 

Вы читайте внимательно что я написал вам. Внимательно!

И пожалуйста в ЛС.

Повторю еще раз. Не изменяется ни один байт системного кода

Внимательно прочли? А теперь перечитайте как мантру. И вдумайтесь, что вам написали. А не быстро строчить ответ не читая (в вашем стиле)

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
chukcha    1 018

Еще раз, для тех кто в танке

Внимательно прочли?

2818759578.png

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
Baco    395

Поставьте проверку в класе с:

public function __construct($directory = '') {
	$this->directory = $directory;
}

на:

public function __construct($directory = '') {
	$this->directory = $directory;
        (DIR_LANGUAGE . 'english/' !== false AND is_dir(DIR_LANGUAGE . 'english/')) ? $this->default = 'english' : $this->default = 'en-gb';
}

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
chukcha    1 018

Вася, речь идет о легком пути решения

И как его решать..

Я предложил это делать при каждом входе в админку, и приводить файлы в соответствие с версией.

 

Но в любом случае это вмешиваться в код..

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
Baco    395

Вася, речь идет о легком пути решения

И как его решать..

Я предложил это делать при каждом входе в админку, и приводить файлы в соответствие с версией.

 

Но в любом случае это вмешиваться в код..

 

Тогда можно решить от обратного:

<modification>
	<id>#Fix for lang adaptaion 2.1 & older</id>
	<version>2.2.x</version>
	<vqmver>2.4.1</vqmver>
	<author>baco</author>
	<file name="system/library/language.php">
	<operation>
		<search position="after"><![CDATA[private $directory;]]></search>
		<add><![CDATA[
		private $checker = false;
		]]></add>
	</operation>
	<operation>
		<search position="before"><![CDATA[$this->data = array_merge($this->data, $_);]]></search>
		<add><![CDATA[
                $this->checker = (DIR_LANGUAGE . $directory . '/' !== false AND is_dir(DIR_LANGUAGE . $directory . '/')) ? $directory : false;
		if (isset($this->checker)) {
			$file = DIR_LANGUAGE . $this->checker . '/' . $filename . '.php';
			if (is_file($file)) {
				require($file);
			}
		}
		]]></add>
	</operation>
	</file>
</modification>

хоть и вмешательство, но на уровне кеша, как оптимальней решить - пока не приходит в голову, кроме костыления.

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
markimax    1 547

Вася, речь идет о легком пути решения

И как его решать..

Я предложил это делать при каждом входе в админку, и приводить файлы в соответствие с версией.

 

Но в любом случае это вмешиваться в код..

 

Уже нашел решение как предложил  Baco без модификаторов и без изменения системного кода

Делаем временно доступными private переменные (мат. часть php) класса Language и изменяем их, после загрузки "своего", ставим обратно

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
chukcha    1 018

Это что конструктивный разговор?

 

5606248935.png

 

1451168426.png

 

А теперь внимание

Делаем все!!!! файлы(не папки) РО

Заливаем маркокод, который не изменяет файлы.

И.. опа.. маркокод не работает!!!

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
markimax    1 547
...

 

Вали отсюда. Надоел уже

Тебя Waha "послал"

Так ты решил везде срать

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
chukcha    1 018

А вы только что оттуда?

 

Надоел?
 

Мишель, не гони пуррргу

Мишель, не помррри с дуррру

 

Поделиться сообщением


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

Для публикации сообщений создайте учётную запись или авторизуйтесь

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

Создать учетную запись

Зарегистрируйте новую учётную запись в нашем сообществе. Это очень просто!

Регистрация нового пользователя

Войти

Уже есть аккаунт? Войти в систему.

Войти


  • Похожий контент

    • От dimetrio1986
      Всем добрый день! Ищу уже очень долго модуль для мгновенной рассрочки от приват банк, знаю что есть модуль, но на моем движке он не работает. Кто то может подсказать или за деньги настроить? Хочу сделать кнопку на сайте и при нажимании на нее всплывает попап с выбором рассрочки
    • От kazbanov
      Выручайте ребяты. После настройки редирескта в htaccess с HTTP на HTTPS не пускает в админку, логин и пароль правилные, редирект пробовал разный. Выключаю - пускает, включаю - не пускает. Конфиги настроены верно, с движком дружу давно, а вот с таким столкнулся впервые. Версия 2.2.0.0 тема fastor.
    • От Alan8
      Добрый день друзья, у меня такая проблема. Пытаюсь добавить блок в category.tpl, но он не добавляется, точнее на долю секунд появляется потом исчезает. Модификаторы и отключал и обновлял, нечего не помогло. Подскажите плз кто занет в чем проблема  
    • От php5
      Поставил OC 2.2
      Создал одну категорию, создал ещё одну и вложил в первую.
      Создал ещё одну категорию, она в корне.

      И всё выглядит как на скрине. Можно создавать их как угодно и сколько угодно - получается такая фигня. Это фича 2.2? Супер категория из всех категорий? :ugeek:
      У этой категории id=0

    • От deezler
      Еще раз привет. Искал модули для того, чтобы адрес корзины был не кривой /index.php?route=checkout/cart, а просто /cart/
       
      Единственное бесплатное решение на 2.2., которое сразу заработало — вот это http://www.opencart.com/index.php?route=extension/extension/info&extension_id=26068
       
      Модуль состоит всего из одного файла, который переписывает файл /catalog/controller/startup/seo_url.php
       
      Все получилось круто, но две проблемы возникло:
       
      На несуществующих страницах перестала выводится ошибка 404, просто главную показывает с кодом 200. На конце всех ссылок сайта выводит .html. Подскажите, как можно эти проблемы решить?
       
      Вот код файла:
      <?php class ControllerStartupSeoUrl extends Controller { /*************************** ***** SeoUrl Functions ***** ***************************/ private $urlFriendly = array( 'common/home' => 'index', 'account/register' => 'create-account', 'account/login' => 'login', 'account/logout' => 'logout', 'account/newsletter' => 'newsletter', 'account/wishlist' => 'wishlist', 'account/order' => 'order-history', 'account/account' => 'my-account', 'account/forgotten' => 'forgot-password', 'account/download' => 'downloads', 'account/return' => 'returns', 'account/transaction' => 'transactions', 'account/password' => 'change-password', 'account/edit' => 'edit-account', 'account/address' => 'address-book', 'account/reward' => 'reward-points', 'account/return/add' => 'request-add', 'account/voucher' => 'voucher', 'information/contact' => 'contact', 'information/contact/success' => 'contact-success', 'information/sitemap' => 'sitemap', 'affiliate/register' => 'create-affiliate-account', 'affiliate/login' => 'affiliate-login', 'affiliate/logout' => 'affiliate-logout', 'affiliate/account' => 'affiliates', 'affiliate/edit' => 'edit-affiliate-account', 'affiliate/password' => 'change-affiliate-password', 'affiliate/payment' => 'affiliate-payment-options', 'affiliate/tracking' => 'ffiliate-tracking-code', 'affiliate/transaction' => 'affiliate-transactions', 'affiliate/forgotten' => 'affiliate-forgot-password', 'checkout/cart' => 'shopping-cart', 'checkout/checkout' => 'checkout', 'checkout/voucher' => 'gift-vouchers', 'product/special' => 'specials', 'product/manufacturer' => 'brands', 'product/compare' => 'compare-products', 'product/search' => 'search', ); public function getKeyFriendly($_route) { if( count($this->urlFriendly) > 0 ){ $key = array_search($_route, $this->urlFriendly); if($key && in_array($_route, $this->urlFriendly)){ return $key; } } return false; } public function getValueFriendly($route) { if( count($this->urlFriendly) > 0) { if(in_array($route, array_keys($this->urlFriendly))){ return '/'.$this->urlFriendly[$route]; } } return false; } /*************************** ***** SeoUrl Functions ***** ***************************/ public function index() { // Add rewrite to url class if ($this->config->get('config_seo_url')) { $this->url->addRewrite($this); } // Decode URL if (isset($this->request->get['_route_'])) { /* SeoUrl remove prefix (*.html) */ $this->request->get['_route_'] = explode('.', $this->request->get['_route_'], -1); $this->request->get['_route_'] = implode('.',$this->request->get['_route_']); /* SeoUrl remove prefix (*.html) */ $parts = explode('/', $this->request->get['_route_']); // remove any empty arrays from trailing if (utf8_strlen(end($parts)) == 0) { array_pop($parts); } foreach ($parts as $part) { $query = $this->db->query("SELECT * FROM " . DB_PREFIX . "url_alias WHERE keyword = '" . $this->db->escape($part) . "'"); if ($query->num_rows) { $url = explode('=', $query->row['query']); if ($url[0] == 'product_id') { $this->request->get['product_id'] = $url[1]; } if ($url[0] == 'category_id') { if (!isset($this->request->get['path'])) { $this->request->get['path'] = $url[1]; } else { $this->request->get['path'] .= '_' . $url[1]; } } if ($url[0] == 'manufacturer_id') { $this->request->get['manufacturer_id'] = $url[1]; } if ($url[0] == 'information_id') { $this->request->get['information_id'] = $url[1]; } if ($query->row['query'] && $url[0] != 'information_id' && $url[0] != 'manufacturer_id' && $url[0] != 'category_id' && $url[0] != 'product_id') { $this->request->get['route'] = $query->row['query']; } } else { $this->request->get['route'] = 'error/not_found'; break; } } if (!isset($this->request->get['route'])) { if (isset($this->request->get['product_id'])) { $this->request->get['route'] = 'product/product'; } elseif (isset($this->request->get['path'])) { $this->request->get['route'] = 'product/category'; } elseif (isset($this->request->get['manufacturer_id'])) { $this->request->get['route'] = 'product/manufacturer/info'; } elseif (isset($this->request->get['information_id'])) { $this->request->get['route'] = 'information/information'; } } /* SeoUrl getKeyFriendly */ if ($_key = $this->getKeyFriendly($this->request->get['_route_']) ) { $this->request->get['route'] = $_key; } /* SeoUrl getKeyFriendly */ if (isset($this->request->get['route'])) { return new Action($this->request->get['route']); } } } public function rewrite($link) { $url_info = parse_url(str_replace('&', '&', $link)); $url = ''; $data = array(); parse_str($url_info['query'], $data); foreach ($data as $key => $value) { if (isset($data['route'])) { if (($data['route'] == 'product/product' && $key == 'product_id') || (($data['route'] == 'product/manufacturer/info' || $data['route'] == 'product/product') && $key == 'manufacturer_id') || ($data['route'] == 'information/information' && $key == 'information_id')) { $query = $this->db->query("SELECT * FROM " . DB_PREFIX . "url_alias WHERE `query` = '" . $this->db->escape($key . '=' . (int)$value) . "'"); if ($query->num_rows && $query->row['keyword']) { $url .= '/' . $query->row['keyword']; unset($data[$key]); } } elseif ($key == 'path') { $categories = explode('_', $value); foreach ($categories as $category) { $query = $this->db->query("SELECT * FROM " . DB_PREFIX . "url_alias WHERE `query` = 'category_id=" . (int)$category . "'"); if ($query->num_rows && $query->row['keyword']) { $url .= '/' . $query->row['keyword']; } else { $url = ''; break; } } unset($data[$key]); } /* SeoUrl getValueFriendly */ if( $_link = $this->getValueFriendly($data['route']) ) { $url .= $_link; unset($data[$key]); } /* SeoUrl getValueFriendly */ } } if ($url) { unset($data['route']); $query = ''; if ($data) { foreach ($data as $key => $value) { $query .= '&' . rawurlencode((string)$key) . '=' . rawurlencode((is_array($value) ? http_build_query($value) : (string)$value)); } if ($query) { $query = '?' . str_replace('&', '&', trim($query, '&')); } } /* SeoUrl add prefix (*.html) */ return $url_info['scheme'] . '://' . $url_info['host'] . (isset($url_info['port']) ? ':' . $url_info['port'] : '') . str_replace('/index.php', '', $url_info['path']) . $url . '.html' . $query; } else { return $link; } } } В первую очередь, я пробовал менять .html на / в этом блоке:
      /* SeoUrl add prefix (*.html) */ return $url_info['scheme'] . '://' . $url_info['host'] . (isset($url_info['port']) ? ':' . $url_info['port'] : '') . str_replace('/index.php', '', $url_info['path']) . $url . '.html' . $query; } else { return $link; } Но меняются только ссылки (что, кстати, тоже очень круто, потому что мы избавляемся от дублей), но вот страницы упорно открываются только с путем .html.
  • Последние посетители   0 пользователей онлайн

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