Показ дописів із міткою Корпорація 2 CMS. Показати всі дописи
Показ дописів із міткою Корпорація 2 CMS. Показати всі дописи

четвер, 12 лютого 2009 р.

Локалізація в «Корпорація 2 CMS»: словники та шаблони

У 2009 році ми створили для локалізації «Корпорації 2 CMS» два компоненти: translate підставляв переклади, а lang_bar показував перелік мов для перемикання.

Налаштування мов

У головному класі використовувалися три властивості, які можна було задавати в config_main.php:

public $lang='ru';  // Текущий язык публичной части
public $lang_adm='ru';  // Текущий язык админ-части
public $langs=array('ru','ua', 'en'); // Доступные языки

Позначення ua було внутрішнім ідентифікатором української мови в цій системі: саме з ним пов’язані наведені каталоги й конфігурація.

Словник компонента

Кожен компонент мав каталог lang з файлами масивів перекладу. Наприклад, український словник зберігався у /lang/ua/index.php:

defined( '_VALID_CORP' ) or die( 'Прямой вызов запрещён' );
$this->msg=array(
array('login_label', 'Логін'),
array('password_label' , 'Пароль'),
array('reg_label' , 'Реєстрація'),
array('forg_label' , 'Згадати пароль'),
array('hello_label' , 'Ласкаво просимо'),
array('exit_btn' , 'Вихід')
);

Підключення перекладача в компоненті

Далі компонент підключав клас перекладу та завантажував повідомлення для auth:

function CMain()
{
$GLOBALS["c"]->ins_comp_file("translate/main_class.php");
$this->trans=new translate($application);
$this->trans->get_msg('auth');
}

Для роботи цього фрагмента потрібен контекст компонента та змінної $application, якого в нотатці немає. У PHP 8 метод з назвою класу більше не є конструктором; для конструктора використовується __construct() (документація PHP).

Маркери в шаблоні

Замість готових підписів шаблон містив маркери на кшталт <%login_label%>. Приклад форми показує, де стояли такі маркери. У ньому залишилися таблична верстка, некоректне значення ширини 100%px та адреси Blogger; завершення PHP-рядка в записі відсутнє. Тому цей фрагмент пояснює розташування підписів, але не є готовою формою для копіювання у проєкт.

// Шаблон формы авторизации

$GLOBALS["myauth"]->auth_form='



<form>









<table border="0" cellpadding="0" cellspacing="0" style="width: 100%px;">                                            <tbody>
<tr>                                              <td align="left" valign="top">






<table border="0" cellpadding="0" cellspacing="0" style="width: 100%px;">                                                <tbody>
<tr>                                                  <td align="left" valign="top">






<table border="0" cellpadding="0" cellspacing="0" style="height: 22px; width: 100%px;">                                                    <tbody>
<tr>                                                      <td class="path" width="52"><%login_label%>:</td>                                                      <td><label>
                                                        <input class="str_001" name="login_corp" type="text" />
                                                      </label></td>                                                    </tr>
</tbody></table>







<table border="0" cellpadding="0" cellspacing="0" style="height: 22px; width: 100%px;">                                                      <tbody>
<tr>                                                        <td class="path" width="52"><%password_label%>:</td>                                                        <td><label>
                                                          <input class="str_001" name="passwd_corp" type="password" />
                                                        </label></td>                                                      </tr>
</tbody></table>
</td>                                                  <td align="right" class="tahoma_18_blue" valign="middle" width="25">





<input class="auth_button" name="sumbit_auth" type="submit" value="" />


</td>                                                </tr>
</tbody></table>
</td>                                              </tr>
<tr>                                              <td align="left" class="path2" height="25" valign="bottom"><a href="https://www.blogger.com/reg/"><%reg_label%></a> | <a href="https://www.blogger.com/rest_pwd/"><%forg_label%></a></td>                                            </tr>
</tbody></table>

</form>

Перед виведенням шаблон передавали перекладачеві:

echo $this->trans->tr($this->auth_form);

Приклад використання цього механізму містився в компоненті авторизації auth.

Компоненти «Корпорація 2 CMS»: призначення й структура

У 2009 році «Корпорація 2 CMS» швидко розвивалася: ми вже розробили кілька десятків компонентів. Кожен відповідав за окреме завдання, а з їхніх викликів складалася функціональність сайту. Ось які компоненти на той момент уже були в системі.

Загальні компоненти

  • topmenu — меню сайту.
  • rewrite — робота зі зрозумілими URL, заголовками та перетворенням вмісту.
  • pathway — навігаційний ланцюжок, або «хлібні крихти».
  • search — пошук.
  • tiptop — порада дня.
  • inc_region — підключення окремої області сторінки.
  • map — карта сайту.

Облікові записи

  • auth — авторизація.
  • reg_user — реєстрація користувача.
  • forg_passwd — функція «згадати пароль».

Каталог товарів і замовлення

  • catalog_tov_dataset — клас роботи з SQL для каталогу.
  • catalog_tov — основний компонент каталогу.
  • group_tov і group_tov_map — групи товарів та їх подання в карті.
  • spis_tov — список товарів.
  • tov_detile — детальний опис товару.
  • scroll_tov — смуга прокручування товарів.
  • map_tov — подання товарів у компоненті map.
  • gtov_menu — меню груп товарів, яке часто розміщували ліворуч.
  • basket — кошик і оформлення замовлення.
  • basket_informer — кількість товарів у кошику та основний клас роботи з ним.

Адміністрування

  • page_editors — кнопки редагування статичної сторінки.
  • fckeditor — редактор HTML.
  • page_props — властивості сторінки.
  • edit_menu — редагування меню.

Три принципи, на яких ми будували систему

  1. Простота й лаконічність. Ми прагнули робити компоненти простими у використанні: типовий виклик часто займав лише один рядок.
  2. Модульність. Замість одного великого компонента — невеликі частини, кожна з яких розв’язує свою задачу.
  3. Повторне використання й перевірка. Ті самі невеликі компоненти застосовували в інших компонентах і різних проєктах. Це давало більше нагод перевірити їхню роботу та виправити помилки.

Такою була структура нашої CMS у цій версії: від меню та навігації до каталогу товарів, кошика й інструментів редагування сайту.

SVN-репозиторії «Корпорації»: адреси й доступ через SSH

Для отримання вихідних текстів «Корпорації 2» та спільної роботи над іншими нашими проєктами використовувався Subversion (SVN). У нотатці 2009 року я навів чотири адреси репозиторіїв.

Якому проєкту відповідає кожна адреса

  • corp2 — система «Корпорація 2».
  • corp1 — система «Корпорація 1».
  • corp_web — «Корпорація 2 CMS», вебчастина «Корпорації 2».
  • rs_sites — наші корпоративні сайти.
svn+ssh://corp2.net/mnt/d/svn_repository/corp2
svn+ssh://corp2.net/mnt/d/svn_repository/corp1
svn+ssh://corp2.net/mnt/d/svn_repository/corp_web
svn+ssh://corp2.net/mnt/d/svn_repository/rs_sites

Чому в адресі вказано svn+ssh

Таке підключення передає протокол Subversion через зашифрований SSH-тунель. Автентифікацію виконує SSH, а на сервері для роботи з репозиторієм запускається svnserve у тунельному режимі. Механізм описано в розділі svnserve книги Version Control with Subversion.

Це пояснює спосіб підключення, але саме існування адреси не надає прав на вихідні тексти. Для використання потрібні чинний доступ до сервера та дозволи на відповідний репозиторій.

Клієнт SVN у Windows

Для роботи я вказував TortoiseSVN: цей клієнт інтегрується в оболонку Windows і дає змогу працювати з SVN через Провідник. Чотири адреси вище відтворюють структуру наших репозиторіїв на час написання нотатки; актуальну адресу потрібного проєкту слід брати в його адміністратора.

K2 Chat — навіщо бізнесу ще один месенджер, особливо під час війни?

«Де файл?» — «У чаті». — «У якому із семи?» Знайома ситуація? Коли робочі домовленості розпорошені між месенджерами, команді складніше знах...