OpenCart модификаторлары - бастапқы жүйе файлдарына қол тигізбей, функционалға не дизайнға өзгерістер енгізуге мүмкіндік беретін ерекше модуль түрі. Бұл OpenCart негізгі файлдарының тұрақтылығын сақтай отырып, платформаның мүмкіндіктерін өзгертуге не кеңейтуге жол ашады. Осы мақалада OpenCart үшін өз модификаторыңызды қалай жасауға болатыны және модификаторлардың қандай мүмкіндіктер беретіндігі сипатталады.
Алғашында модификатор тұжырымдамасы OpenCart 1.5 нұсқасында vQmod арқылы енгізілді, кейін жетілдіріліп, OCMOD болып өзгерді және OpenCart 2.1 нұсқасынан бастап стандартты функционалға айналды. Демек, OpenCart-тағы модификатор - бұл негізгі файлдарға тікелей әсер етпей, жүйеге өзгерістер енгізу құралы.
OpenCart модификаторы - XML файл түріндегі модуль, онда түпнұсқа OpenCart файлдарының кодына қандай өзгерістер енгізу керектігі туралы нұсқаулар жинағы бар: ауыстыру, қосу немесе жою. OpenCart бұл нұсқауларды бөлек қалтада (модификация кэші) бастапқы файлдардың көшірмелерін жасап, өзгерістерді сол көшірмелерге енгізу арқылы орындайды. Нәтижесінде сайт түпнұсқалардың орнына өзгертілген файлдарды қолданады.
OCMOD модификаторы стандартты мүмкіндіктерді өзгертіп не кеңейтетін дербес модуль ретінде де, қосымша php, twig, js, css және басқа файлдары бар толыққанды модульдің бөлігі ретінде де жұмыс істей алады.
Модификатор файлының атауы - <file_name>.ocmod.xml үлгісіне сай болуы керек, мұнда <file_name> орнына өз атауыңызды қоясыз. Яғни файл атауы әрдайым ".ocmod.xml" деп аяқталуы тиіс, әйтпесе жүйе модификаторды “көрмейді” де, оны елемейді.
Ерекшелік: модификатор архивтегі толық модуль құрамында қолданылса - бұл жағдайда архивтегі модификатор файлының атауы install.xml болуы керек.
Модификатор файлын орналастыру - сайт түбіндегі system қалтасы. Модификатор файлын кеңейтулерді жүктеу арқылы дерекқорға да тұрақты орналастыруға болады. Алайда әзірлеу кезінде файлды system қалтасына жазып, сонда өңдеп, нәтижені тексеру ыңғайлы, ал әзірлеу аяқталғаннан кейін модификаторды модуль ретінде дерекқорға жүктейді.
Модификация кэші орналасуы - сайт түбірінің құрылымын қайталайтын /storage/modification қалтасы. Яғни, егер сіз /admin/controller/catalog/product.php файлына модификатор жасасаңыз, оның өзгертілген көшірмесі /storage/modification/admin/controller/catalog/product.php ішінде болады. Сол жерден модификаторыңыз енгізетін өзгерістерді көресіз.
Логтар орналасуы - /storage/logs қалтасы. Онда 2 негізгі лог файлы бар: ocmod.log - модификатор файлдарының қалай өңделгенін, ретін және нұсқаулардың қалай орындалғанын көрсетеді, және error.log - түрлендіру кезінде болған қателерді қамтитын лог файлы.
Жүйе модификатор файлдарын танып, олардың нұсқауларын қолдану үшін модификаторлар бетінде "Жаңарту" түймесін басу керек.
Кейде кэштi жаңартқаннан кейін де сайтта өзгерістер көрінбейді. Бұл әдетте сайтта қосымша кэштеу модульдері немесе жүктеуді жеделдету құралдары қолданылғандықтан болады, оларда да кэшті жаңарту қажет болуы мүмкін.
OCMOD модификатор файлы жалпы сипаттамалық бөлік пен файлдарды өзгерту нұсқауларын қамтуы тиіс. Синтаксисті әкімші тақырыбында "Test" сөзін қосатын қарапайым мысалдан бастаймын:
<!--?xml version="1.0" encoding="utf-8"?--> <modification> <name>Test</name> <!-- Модификатор атауы --> <code>Test</code> <!-- Модификатордың бірегей коды --> <version>1.0</version> <!-- Нұсқа --> <author>Test</author> <!-- Автор --><link />http://www.test.ru <!-- Әзірлеуші сайты --> <file path="admin/view/template/common/header.twig"> <!-- Қай файл өзгертіледі --> <operation> <search> <!-- Файлдан код табу --> <!--[CDATA[ <div class="container-fluid"--> ]]> </search> <add position="after"> <!-- Өзгерісті қосу (табылған кодтан кейін) --> <!--[CDATA[ <p-->Test<p> </p> ]]> </add> </operation> </file> </modification>
Сонымен, бұл модификатор мысалы header.twig файлын өзгертеді. Ол "<div class="container-fluid">" жолын табады да, одан кейін "<p>Test</p>" кодын қосады.
Бір xml файлында <file> секцияларының қалаған саны болуы мүмкін, сондықтан бір модификатормен көптеген файлдарды өзгерте аламыз.
Енді әр тегті және оның мүмкіндіктерін толығырақ қарастырайық.
Қай файлда не файлдарда өзгеріс енгізу керектігін көрсетеді. Міндетті path атрибуты өзгертілетін файлға жолды қамтиды. Бір не бірнеше файлды көрсетуі мүмкін. Бірнеше файлды көрсету үшін "|" таңбасы қолданылады. Мысалы, action.php және loader.php файлдарына өзгеріс енгізу
<file path="system/engine/action.php|system/engine/loader.php">
Кодты қысқарту үшін жақшаларды пайдаланып, бірнеше мәнді үтір арқылы көрсетуге болады:
<file path="system/engine/{action,loader}.php">
Сонымен қатар "*" және "?" таңбаларын "маска" бойынша жол көрсету үшін қолдануға болады. Бұл үлгі файлдарын өзгертуге жиі пайдалы.
<file path="catalog/view/theme/*/template/product/product.twig">
OpenCart-та қандай тақырыптар орнатылғанын алдын ала білмейтіндіктен, "theme" сөзінен кейін "*" қойдық, сонда барлық тақырыптардағы product.twig файлдары өзгереді.
Өзгеріс енгізу секциясының басталуын көрсетеді. File секциялары ішінде бірнеше <operation> болуы мүмкін. Яғни, бір файлда бірден бірнеше өзгеріс жасай аламыз. Operation тегі міндетті емес error атрибутына ие болуы мүмкін, оның мәндері мыналар:
Мысалы, header.twig ішінен "navbar-rightnav" мәтінін табу, ал ол болмаса, өткізіп, келесі операцияда "navbar-right" мәтінін табу:
<file path="admin/view/template/common/header.twig"> <operation error="skip"> <search><![CDATA[ navbar-rightnav ]]></search> <add position="after"><![CDATA[ <li>Test1</li> ]]></add> </operation> <operation error="skip"> <search><![CDATA[ navbar-right ]]></search> <add position="after"><![CDATA[ <li>Test2</li> ]]></add> </operation> </file>
Егер error="skip" атрибутын көрсетпесеңіз, "navbar-rightnav" іздеуіндегі алғашқы қате бүкіл <file> секциясын үзіп, оны елемей қояр еді.
Ағымдағы операцияда қай мәтінді табу керектігін көрсетеді. Төмендегі қолдану ережелері бар:
<![CDATA[ және ]]> арнайы тегтері xml файлдарында кез келген таңбалық деректерді беру үшін қолданылады, яғни олардың арасында кез келген мәтін, соның ішінде жақшалар, кіші/үлкен белгілері, сондай-ақ php, html коды бола алады.
Нақтырақ орынға өзгеріс енгізу үшін Search тегінде мына атрибуттарды қолдануға болады:
Мысал: "TEST" мәзір тармағын қосу.
<file path="admin/controller/common/column_left.php"> <operation> <search index="0" trim="true"><![CDATA[ $data['menus'][] = array( ]]></search> <add position="before"><![CDATA[ $data['menus'][] = array( 'id' => 'menu-test', 'icon' => 'fa-play', 'name' => 'TEST', 'href' => '#' ); ]]></add> </operation> </file>
Бұл мысалда "$data['menus'][] = array(" алғашқы кездесуін тауып, оның алдына өз кодымызды қосамыз.
Тег табылған мәтіннің алдына/соңына қосылатын немесе соның орнына қойылатын мәтінді қамтиды.
Search тегі сияқты, бұл тег те <![CDATA[ және ]]> аралығында жазылған қосылатын/ауыстырылатын кодты қамтуы тиіс.
Add тегінде мына атрибуттарды қолдануға болады:
Мысал: Әкімшілік панельдегі тауарлар тізімінде "Test" сөзін қосу.
<file path="admin/view/template/catalog/product_list.twig"> <operation> <search index="1" trim="true"><![CDATA[ panel-body ]]></search> <add position="after" offset="1" trim="true"><![CDATA[ <p>Test</p> ]]></add> </operation> </file>
"panel-body" мәтінінің екінші кездесуін табамыз (біріншісі - тауарлардың оң жағындағы сүзгі, екіншісі - тауарлар тізімі) және табылған мәтіннен бір жол төмен "<p>Test</p>" кодын қосамыз.
Назар аударыңыз: position="before" және position="after" кодты "panel-body" табылған жолдың ортасына емес, келесі (немесе алдыңғы) жолға қосады. Егер жол ортасына қосу керек болса, position="replace" пайдаланып, табылған мәтінді қайталап, өз кодыңызды қосыңыз.
Мысал: Футердегі OpenCart нұсқасының алдына мәтін қосу
<file path="admin/view/template/common/footer.twig"> <operation> <search><![CDATA[ {{ text_version }} ]]></search> <add position="replace" trim="true"><![CDATA[ <p>Test</p>{{ text_version }} ]]></add> </operation> </file>
OpenCart-та OCMOD модификаторын жасап, сіз жүйенің дерлік барлық бөлігін өзгертіп, мүмкіндіктерін кеңейте аласыз, бұл ретте түпнұсқа файлдарға әсер етпейсіз және бәрін бастапқы қалпына қайтару үшін модификатор файлын жойсаңыз жеткілікті (немесе ол дерекқорға жүктелген болса, оны өшіріңіз).