<?xml version="1.0"?>
<rss version="2.0"><channel><title/><link>https://opencartforum.com/blogs/136-useful-it/</link><description/><language>uk</language><item><title>&#x41F;&#x440;&#x438;&#x43A;&#x43B;&#x430;&#x434; &#x441;&#x443;&#x447;&#x430;&#x441;&#x43D;&#x43E;&#x433;&#x43E; &#x43C;&#x43E;&#x434;&#x443;&#x43B;&#x44F; ocStore, &#x43C;&#x43E;&#x434;&#x443;&#x43B;&#x44C; "&#x414;&#x435;&#x440;&#x435;&#x432;&#x43E; &#x43A;&#x430;&#x442;&#x435;&#x433;&#x43E;&#x440;i&#x439;"</title><link>https://opencartforum.com/blogs/entry/544-priklad-suchasnogo-modulya-ocstore-modul-derevo-kategoriy/</link><description><![CDATA[<p>
	<span style="font-size:16px;">Доброго дня!</span>
</p>

<p>
	<span style="font-size:16px;">Останнiм часом раз-пораз з'являються дискусії на тему застаріння CMS <abbr title="Бесплатная платформа для электронной коммерции с открытым исходным кодом"><abbr title="Бесплатная платформа для электронной коммерции с открытым исходным кодом">OpenCart</abbr></abbr>. Порушимо і тут цю тему, але не розкритикувати, чи похвалити, а пропонуючи!</span>
</p>

<p>
	 
</p>

<p>
	<span style="font-size:16px;">Як розгорнути проект з сучасним FrontEnd ми <a href="https://opencartforum.com/blogs/entry/537-yak-rozgornuti-proekt-na-vite-poryad-z-opencart-dlya-skladannya-suchasnih-dodatkiv-za-dopomogoyu-react-vue-svelte-vanila-javascript/" rel="">писали ранiше</a>...</span>
</p>

<p>
	<span style="font-size:16px;">Зараз-же розглянемо посібник з прикладами, де спробуємо подружити Element Plus та <abbr title="Бесплатная платформа для электронной коммерции с открытым исходным кодом"><abbr title="Бесплатная платформа для электронной коммерции с открытым исходным кодом">OpenCart</abbr></abbr> модуль для адмiн панелi </span>
</p>

<p>
	<span style="font-size:16px;">Створемо додаток "Управління категоріями <abbr title="Бесплатная платформа для электронной коммерции с открытым исходным кодом"><abbr title="Бесплатная платформа для электронной коммерции с открытым исходным кодом">OpenCart</abbr></abbr>"</span>
</p>

<p>
	 
</p>

<p>
	<span style="font-size:16px;">1) Клієнтська частина</span>
</p>

<p>
	<em>../upload/admin/view/template/extension/module/multi_categories.twig</em>
</p>

<pre class="ipsCode prettyprint lang-html prettyprinted"><span class="pln">{{ header }} {{ column_left }}
</span><span class="tag">&lt;div</span><span class="pln"> </span><span class="atn">id</span><span class="pun">=</span><span class="atv">"content"</span><span class="tag">&gt;</span><span class="pln">
    </span><span class="tag">&lt;div</span><span class="pln"> </span><span class="atn">class</span><span class="pun">=</span><span class="atv">"page-header"</span><span class="tag">&gt;</span><span class="pln">
        </span><span class="tag">&lt;div</span><span class="pln"> </span><span class="atn">class</span><span class="pun">=</span><span class="atv">"container-fluid"</span><span class="tag">&gt;</span><span class="pln">
            </span><span class="tag">&lt;div</span><span class="pln"> </span><span class="atn">class</span><span class="pun">=</span><span class="atv">"pull-right"</span><span class="tag">&gt;</span><span class="pln">
                </span><span class="tag">&lt;a</span><span class="pln"> </span><span class="atn">href</span><span class="pun">=</span><span class="atv">"{{ cancel }}"</span><span class="pln"> </span><span class="atn">data-toggle</span><span class="pun">=</span><span class="atv">"tooltip"</span><span class="pln"> </span><span class="atn">title</span><span class="pun">=</span><span class="atv">"{{ button_cancel }}"</span><span class="pln"> </span><span class="atn">class</span><span class="pun">=</span><span class="atv">"btn btn-default"</span><span class="tag">&gt;&lt;i</span><span class="pln"> </span><span class="atn">class</span><span class="pun">=</span><span class="atv">"fa fa-reply"</span><span class="tag">&gt;&lt;/i&gt;&lt;/a&gt;</span><span class="pln">
            </span><span class="tag">&lt;/div&gt;</span><span class="pln">
            </span><span class="tag">&lt;h1&gt;</span><span class="pln">{{ heading_title }}</span><span class="tag">&lt;/h1&gt;</span><span class="pln">
            </span><span class="tag">&lt;ul</span><span class="pln"> </span><span class="atn">class</span><span class="pun">=</span><span class="atv">"breadcrumb"</span><span class="tag">&gt;</span><span class="pln">
                {% for breadcrumb in breadcrumbs %}
                    </span><span class="tag">&lt;li&gt;&lt;a</span><span class="pln"> </span><span class="atn">href</span><span class="pun">=</span><span class="atv">"{{ breadcrumb.href }}"</span><span class="tag">&gt;</span><span class="pln">{{ breadcrumb.text }}</span><span class="tag">&lt;/a&gt;&lt;/li&gt;</span><span class="pln">
                {% endfor %}
            </span><span class="tag">&lt;/ul&gt;</span><span class="pln">
        </span><span class="tag">&lt;/div&gt;</span><span class="pln">
    </span><span class="tag">&lt;/div&gt;</span><span class="pln">
    </span><span class="tag">&lt;div</span><span class="pln"> </span><span class="atn">class</span><span class="pun">=</span><span class="atv">"container-fluid"</span><span class="tag">&gt;</span><span class="pln">
        </span><span class="tag">&lt;div</span><span class="pln"> </span><span class="atn">class</span><span class="pun">=</span><span class="atv">"panel panel-default"</span><span class="tag">&gt;</span><span class="pln">
            </span><span class="tag">&lt;div</span><span class="pln"> </span><span class="atn">class</span><span class="pun">=</span><span class="atv">"panel-heading"</span><span class="tag">&gt;</span><span class="pln">
                </span><span class="tag">&lt;h3</span><span class="pln"> </span><span class="atn">class</span><span class="pun">=</span><span class="atv">"panel-title"</span><span class="tag">&gt;&lt;i</span><span class="pln"> </span><span class="atn">class</span><span class="pun">=</span><span class="atv">"fa fa-pencil"</span><span class="tag">&gt;&lt;/i&gt;</span><span class="pln"> {{ breadcrumb_last }}</span><span class="tag">&lt;/h3&gt;</span><span class="pln">
            </span><span class="tag">&lt;/div&gt;</span><span class="pln">
            </span><span class="tag">&lt;div</span><span class="pln"> </span><span class="atn">class</span><span class="pun">=</span><span class="atv">"panel-body"</span><span class="tag">&gt;</span><span class="pln">
                </span><span class="tag">&lt;div</span><span class="pln"> </span><span class="atn">id</span><span class="pun">=</span><span class="atv">"app"</span><span class="tag">&gt;&lt;/div&gt;</span><span class="pln">
            </span><span class="tag">&lt;/div&gt;</span><span class="pln">
        </span><span class="tag">&lt;/div&gt;</span><span class="pln">
    </span><span class="tag">&lt;/div&gt;</span><span class="pln">
</span><span class="tag">&lt;/div&gt;</span><span class="pln">
</span><span class="tag">&lt;script</span><span class="pln"> </span><span class="atn">type</span><span class="pun">=</span><span class="atv">"module"</span><span class="pln"> </span><span class="atn">crossorigin</span><span class="pln"> </span><span class="atn">src</span><span class="pun">=</span><span class="atv">"{{ base }}view/javascript/product_list.js"</span><span class="tag">&gt;&lt;/script&gt;</span><span class="pln">
</span><span class="tag">&lt;link</span><span class="pln"> </span><span class="atn">rel</span><span class="pun">=</span><span class="atv">"stylesheet"</span><span class="pln"> </span><span class="atn">crossorigin</span><span class="pln"> </span><span class="atn">href</span><span class="pun">=</span><span class="atv">"{{ base }}view/javascript/product_list.css"</span><span class="tag">&gt;</span><span class="pln">
</span><span class="tag">&lt;style&gt;</span><span class="pln">
    html </span><span class="pun">{</span><span class="pln">
        </span><span class="kwd">height</span><span class="pun">:</span><span class="pln"> auto
    </span><span class="pun">}</span><span class="pln">
</span><span class="tag">&lt;/style&gt;</span><span class="pln">

{{ footer }}</span></pre>

<p>
	 
</p>

<p>
	<span style="font-size:16px;">2) Клієнтська частина source for Vue Element-plus</span>
</p>

<p>
	<em>../src/App.vue</em>
</p>

<pre class="ipsCode prettyprint lang-javascript prettyprinted"><span class="pun">&lt;</span><span class="pln">template</span><span class="pun">&gt;</span><span class="pln">
  </span><span class="pun">&lt;</span><span class="pln">el</span><span class="pun">-</span><span class="pln">tree
      style</span><span class="pun">=</span><span class="str">"max-width: 600px"</span><span class="pln">
      </span><span class="pun">:</span><span class="pln">data</span><span class="pun">=</span><span class="str">"products"</span><span class="pln">
      node</span><span class="pun">-</span><span class="pln">key</span><span class="pun">=</span><span class="str">"category_id"</span><span class="pln">
  </span><span class="pun">&gt;</span><span class="pln">
    </span><span class="pun">&lt;</span><span class="pln">template </span><span class="pun">#</span><span class="kwd">default</span><span class="pun">=</span><span class="str">"{ node, data }"</span><span class="pun">&gt;</span><span class="pln">
        </span><span class="pun">&lt;</span><span class="pln">span </span><span class="kwd">class</span><span class="pun">=</span><span class="str">"custom-tree-node"</span><span class="pun">&gt;</span><span class="pln">
          </span><span class="pun">&lt;</span><span class="pln">span</span><span class="pun">&gt;{{</span><span class="pln"> data</span><span class="pun">.</span><span class="pln">sort_order </span><span class="pun">}})</span><span class="pln"> </span><span class="pun">{{</span><span class="pln"> node</span><span class="pun">.</span><span class="pln">label </span><span class="pun">}}&lt;/</span><span class="pln">span</span><span class="pun">&gt;</span><span class="pln">
          </span><span class="pun">&lt;</span><span class="pln">span</span><span class="pun">&gt;</span><span class="pln">
            </span><span class="pun">&lt;</span><span class="pln">a </span><span class="pun">:</span><span class="pln">href</span><span class="pun">=</span><span class="str">"openCategory(data)"</span><span class="pln"> target</span><span class="pun">=</span><span class="str">"_blank"</span><span class="pun">&gt;</span><span class="pln">_</span><span class="pun">&lt;</span><span class="pln">i </span><span class="kwd">class</span><span class="pun">=</span><span class="str">"fa fa-pencil"</span><span class="pun">&gt;&lt;</span><span class="str">/i&gt;&lt;/</span><span class="pln">a</span><span class="pun">&gt;</span><span class="pln">
          </span><span class="pun">&lt;/</span><span class="pln">span</span><span class="pun">&gt;</span><span class="pln">
        </span><span class="pun">&lt;/</span><span class="pln">span</span><span class="pun">&gt;</span><span class="pln">
    </span><span class="pun">&lt;/</span><span class="pln">template</span><span class="pun">&gt;</span><span class="pln">
  </span><span class="pun">&lt;/</span><span class="pln">el</span><span class="pun">-</span><span class="pln">tree</span><span class="pun">&gt;</span><span class="pln">
</span><span class="pun">&lt;/</span><span class="pln">template</span><span class="pun">&gt;</span><span class="pln">

</span><span class="pun">&lt;</span><span class="pln">script setup</span><span class="pun">&gt;</span><span class="pln">
</span><span class="kwd">import</span><span class="pln"> </span><span class="pun">{</span><span class="pln"> onMounted</span><span class="pun">,</span><span class="pln"> ref </span><span class="pun">}</span><span class="pln"> from </span><span class="str">'vue'</span><span class="pun">;</span><span class="pln">

</span><span class="kwd">let</span><span class="pln"> productPath </span><span class="pun">=</span><span class="pln"> </span><span class="str">''</span><span class="pun">;</span><span class="pln">
</span><span class="kwd">const</span><span class="pln"> products </span><span class="pun">=</span><span class="pln"> ref</span><span class="pun">({});</span><span class="pln">

</span><span class="kwd">const</span><span class="pln"> openCategory </span><span class="pun">=</span><span class="pln"> </span><span class="pun">(</span><span class="pln">data</span><span class="pun">)</span><span class="pln"> </span><span class="pun">=&gt;</span><span class="pln"> </span><span class="pun">{</span><span class="pln">
  </span><span class="kwd">return</span><span class="pln"> data</span><span class="pun">.</span><span class="pln">href</span><span class="pun">.</span><span class="pln">replaceAll</span><span class="pun">(</span><span class="str">'&amp;amp;'</span><span class="pun">,</span><span class="pln"> </span><span class="str">'&amp;'</span><span class="pun">);</span><span class="pln">
</span><span class="pun">}</span><span class="pln">

</span><span class="kwd">const</span><span class="pln"> appInit </span><span class="pun">=</span><span class="pln"> </span><span class="pun">(</span><span class="pln">list </span><span class="pun">=</span><span class="pln"> </span><span class="pun">[])</span><span class="pln"> </span><span class="pun">=&gt;</span><span class="pln"> </span><span class="pun">{</span><span class="pln">
  products</span><span class="pun">.</span><span class="pln">value </span><span class="pun">=</span><span class="pln"> list</span><span class="pun">;</span><span class="pln">
</span><span class="pun">}</span><span class="pln">

</span><span class="kwd">const</span><span class="pln"> getProducts </span><span class="pun">=</span><span class="pln"> </span><span class="kwd">async</span><span class="pln"> </span><span class="pun">()</span><span class="pln"> </span><span class="pun">=&gt;</span><span class="pln"> </span><span class="pun">{</span><span class="pln">
  </span><span class="kwd">if</span><span class="pln"> </span><span class="pun">(!</span><span class="pln">productPath</span><span class="pun">)</span><span class="pln"> </span><span class="pun">{</span><span class="pln">
    console</span><span class="pun">.</span><span class="pln">debug</span><span class="pun">(</span><span class="str">'The error for determining the path to get data!'</span><span class="pun">);</span><span class="pln">
  </span><span class="pun">}</span><span class="pln"> </span><span class="kwd">else</span><span class="pln"> </span><span class="pun">{</span><span class="pln">
    </span><span class="kwd">let</span><span class="pln"> response </span><span class="pun">=</span><span class="pln"> </span><span class="kwd">await</span><span class="pln"> fetch</span><span class="pun">(</span><span class="pln">
        productPath
    </span><span class="pun">);</span><span class="pln">

    appInit</span><span class="pun">(</span><span class="pln">
        </span><span class="kwd">await</span><span class="pln"> response</span><span class="pun">.</span><span class="pln">json</span><span class="pun">()</span><span class="pln">
    </span><span class="pun">);</span><span class="pln">
  </span><span class="pun">}</span><span class="pln">
</span><span class="pun">}</span><span class="pln">

</span><span class="kwd">const</span><span class="pln"> appUrl </span><span class="pun">=</span><span class="pln"> </span><span class="pun">(</span><span class="pln">route</span><span class="pun">)</span><span class="pln"> </span><span class="pun">=&gt;</span><span class="pln"> </span><span class="pun">{</span><span class="pln">
  </span><span class="com">// Sanitize the call</span><span class="pln">
  route </span><span class="pun">=</span><span class="pln"> route</span><span class="pun">?.</span><span class="pln">replace</span><span class="pun">(</span><span class="str">/[^a-zA-Z0-9_\/]/</span><span class="pln">i</span><span class="pun">,</span><span class="pln"> </span><span class="str">''</span><span class="pun">)</span><span class="pln">
      </span><span class="pun">||</span><span class="pln"> </span><span class="str">''</span><span class="pun">;</span><span class="pln">

  </span><span class="kwd">if</span><span class="pln"> </span><span class="pun">(!</span><span class="pln">route</span><span class="pun">)</span><span class="pln">
    </span><span class="kwd">return</span><span class="pln"> </span><span class="str">''</span><span class="pun">;</span><span class="pln">

  </span><span class="com">// production or development (variable set: in root on .env.development file)</span><span class="pln">
  </span><span class="kwd">const</span><span class="pln"> inputUrl </span><span class="pun">=</span><span class="pln"> </span><span class="kwd">new</span><span class="pln"> URL</span><span class="pun">(</span><span class="pln">
      </span><span class="kwd">import</span><span class="pun">.</span><span class="pln">meta</span><span class="pun">.</span><span class="pln">env</span><span class="pun">.</span><span class="pln">PROD
          </span><span class="pun">?</span><span class="pln"> document</span><span class="pun">?.</span><span class="pln">location</span><span class="pun">?.</span><span class="pln">href
          </span><span class="pun">:</span><span class="pln"> </span><span class="kwd">import</span><span class="pun">.</span><span class="pln">meta</span><span class="pun">.</span><span class="pln">env</span><span class="pun">.</span><span class="pln">VITE_APP_HOME_PATH
  </span><span class="pun">);</span><span class="pln">

  inputUrl</span><span class="pun">?.</span><span class="pln">searchParams</span><span class="pun">?.</span><span class="kwd">set</span><span class="pun">(</span><span class="str">'route'</span><span class="pun">,</span><span class="pln"> route</span><span class="pun">);</span><span class="pln">

  </span><span class="kwd">return</span><span class="pln"> inputUrl</span><span class="pun">?.</span><span class="pln">href
      </span><span class="pun">||</span><span class="pln"> </span><span class="str">''</span><span class="pun">;</span><span class="pln">
</span><span class="pun">}</span><span class="pln">

onMounted</span><span class="pun">(()</span><span class="pln"> </span><span class="pun">=&gt;</span><span class="pln"> </span><span class="pun">{</span><span class="pln">
  productPath </span><span class="pun">=</span><span class="pln"> appUrl</span><span class="pun">(</span><span class="pln">
      </span><span class="str">'extension/module/multi_categories/get_categories'</span><span class="pln">
  </span><span class="pun">);</span><span class="pln">

  getProducts</span><span class="pun">();</span><span class="pln">
</span><span class="pun">})</span><span class="pln">
</span><span class="pun">&lt;/</span><span class="pln">script</span><span class="pun">&gt;</span><span class="pln">

</span><span class="pun">&lt;</span><span class="pln">style</span><span class="pun">&gt;</span><span class="pln">
</span><span class="pun">.</span><span class="pln">custom</span><span class="pun">-</span><span class="pln">tree</span><span class="pun">-</span><span class="pln">node </span><span class="pun">{</span><span class="pln">
  align</span><span class="pun">-</span><span class="pln">items</span><span class="pun">:</span><span class="pln"> center</span><span class="pun">;</span><span class="pln">
  column</span><span class="pun">-</span><span class="pln">gap</span><span class="pun">:</span><span class="pln"> </span><span class="lit">9px</span><span class="pun">;</span><span class="pln">
  display</span><span class="pun">:</span><span class="pln"> flex</span><span class="pun">;</span><span class="pln">
  flex</span><span class="pun">:</span><span class="pln"> </span><span class="lit">1</span><span class="pun">;</span><span class="pln">
  justify</span><span class="pun">-</span><span class="pln">content</span><span class="pun">:</span><span class="pln"> space</span><span class="pun">-</span><span class="pln">between
</span><span class="pun">}</span><span class="pln">
</span><span class="pun">&lt;/</span><span class="pln">style</span><span class="pun">&gt;</span></pre>

<p>
	 
</p>

<p>
	<span style="font-size:16px;">3) Контроллер</span>
</p>

<p>
	<em>../upload/admin/controller/extension/module/multi_categories.php</em>
</p>

<pre class="ipsCode prettyprint lang-php prettyprinted"><span class="pun">&lt;?</span><span class="pln">php
</span><span class="com">// Read more: https://opencartforum.com/files/developer/678008-sha</span><span class="pln">

</span><span class="kwd">class</span><span class="pln"> </span><span class="typ">ControllerExtensionModuleMultiCategories</span><span class="pln"> </span><span class="kwd">extends</span><span class="pln"> </span><span class="typ">Controller</span><span class="pln"> </span><span class="pun">{</span><span class="pln">
    </span><span class="kwd">private</span><span class="pln"> $error </span><span class="pun">=</span><span class="pln"> </span><span class="pun">[];</span><span class="pln">

    </span><span class="kwd">private</span><span class="pln"> $edit_link </span><span class="pun">=</span><span class="pln"> </span><span class="str">''</span><span class="pun">;</span><span class="pln">

    </span><span class="kwd">public</span><span class="pln"> </span><span class="kwd">function</span><span class="pln"> index</span><span class="pun">()</span><span class="pln"> </span><span class="pun">{</span><span class="pln">
        $this</span><span class="pun">-&gt;</span><span class="pln">load</span><span class="pun">-&gt;</span><span class="pln">language</span><span class="pun">(</span><span class="str">'extension/module/multi_categories'</span><span class="pun">);</span><span class="pln">

        $this</span><span class="pun">-&gt;</span><span class="pln">document</span><span class="pun">-&gt;</span><span class="pln">setTitle</span><span class="pun">(</span><span class="pln">
            $this</span><span class="pun">-&gt;</span><span class="pln">language</span><span class="pun">-&gt;</span><span class="kwd">get</span><span class="pun">(</span><span class="str">'heading_title'</span><span class="pun">)</span><span class="pln">
        </span><span class="pun">);</span><span class="pln">

        $this</span><span class="pun">-&gt;</span><span class="pln">getForm</span><span class="pun">();</span><span class="pln">
    </span><span class="pun">}</span><span class="pln">

    </span><span class="kwd">protected</span><span class="pln"> </span><span class="kwd">function</span><span class="pln"> getForm</span><span class="pun">()</span><span class="pln"> </span><span class="pun">{</span><span class="pln">
        $data </span><span class="pun">=</span><span class="pln"> </span><span class="pun">[];</span><span class="pln">

        $data</span><span class="pun">[</span><span class="str">'header'</span><span class="pun">]</span><span class="pln"> </span><span class="pun">=</span><span class="pln"> $this</span><span class="pun">-&gt;</span><span class="pln">load</span><span class="pun">-&gt;</span><span class="pln">controller</span><span class="pun">(</span><span class="str">'common/header'</span><span class="pun">);</span><span class="pln">
        $data</span><span class="pun">[</span><span class="str">'column_left'</span><span class="pun">]</span><span class="pln"> </span><span class="pun">=</span><span class="pln"> $this</span><span class="pun">-&gt;</span><span class="pln">load</span><span class="pun">-&gt;</span><span class="pln">controller</span><span class="pun">(</span><span class="str">'common/column_left'</span><span class="pun">);</span><span class="pln">
        $data</span><span class="pun">[</span><span class="str">'footer'</span><span class="pun">]</span><span class="pln"> </span><span class="pun">=</span><span class="pln"> $this</span><span class="pun">-&gt;</span><span class="pln">load</span><span class="pun">-&gt;</span><span class="pln">controller</span><span class="pun">(</span><span class="str">'common/footer'</span><span class="pun">);</span><span class="pln">

        $this</span><span class="pun">-&gt;</span><span class="pln">response</span><span class="pun">-&gt;</span><span class="pln">setOutput</span><span class="pun">(</span><span class="pln">$this</span><span class="pun">-&gt;</span><span class="pln">load</span><span class="pun">-&gt;</span><span class="pln">view</span><span class="pun">(</span><span class="str">'extension/module/multi_categories'</span><span class="pun">,</span><span class="pln"> $data</span><span class="pun">));</span><span class="pln">
    </span><span class="pun">}</span><span class="pln">

    </span><span class="kwd">public</span><span class="pln"> </span><span class="kwd">function</span><span class="pln"> get_categories</span><span class="pun">()</span><span class="pln">
    </span><span class="pun">{</span><span class="pln">
        $this</span><span class="pun">-&gt;</span><span class="pln">response</span><span class="pun">-&gt;</span><span class="pln">addHeader</span><span class="pun">(</span><span class="str">'Content-Type: application/json'</span><span class="pun">);</span><span class="pln">

        </span><span class="kwd">if</span><span class="pln"> </span><span class="pun">(!</span><span class="pln">$this</span><span class="pun">-&gt;</span><span class="pln">validate</span><span class="pun">())</span><span class="pln">
            $this</span><span class="pun">-&gt;</span><span class="pln">response</span><span class="pun">-&gt;</span><span class="pln">setOutput</span><span class="pun">([]);</span><span class="pln">

        $this</span><span class="pun">-&gt;</span><span class="pln">load</span><span class="pun">-&gt;</span><span class="pln">model</span><span class="pun">(</span><span class="str">'extension/module/multi_categories'</span><span class="pun">);</span><span class="pln">

        $categories </span><span class="pun">=</span><span class="pln"> $this</span><span class="pun">-&gt;</span><span class="pln">model_extension_module_multi_categories</span><span class="pun">-&gt;</span><span class="pln">get_categories</span><span class="pun">();</span><span class="pln">

        $this</span><span class="pun">-&gt;</span><span class="pln">edit_link </span><span class="pun">=</span><span class="pln"> $this</span><span class="pun">-&gt;</span><span class="pln">url</span><span class="pun">-&gt;</span><span class="pln">link</span><span class="pun">(</span><span class="pln">
            </span><span class="str">'catalog/category/edit'</span><span class="pun">,</span><span class="pln">
            </span><span class="str">'user_token='</span><span class="pln"> </span><span class="pun">.</span><span class="pln"> $this</span><span class="pun">-&gt;</span><span class="pln">session</span><span class="pun">-&gt;</span><span class="pln">data</span><span class="pun">[</span><span class="str">'user_token'</span><span class="pun">],</span><span class="pln">
            </span><span class="kwd">true</span><span class="pln">
        </span><span class="pun">);</span><span class="pln">

        $this</span><span class="pun">-&gt;</span><span class="pln">response</span><span class="pun">-&gt;</span><span class="pln">setOutput</span><span class="pun">(</span><span class="pln">json_encode</span><span class="pun">(</span><span class="pln">
            $this</span><span class="pun">-&gt;</span><span class="pln">tree</span><span class="pun">(</span><span class="pln">
                $categories
            </span><span class="pun">)</span><span class="pln">
        </span><span class="pun">));</span><span class="pln">
    </span><span class="pun">}</span><span class="pln">

    </span><span class="kwd">private</span><span class="pln"> </span><span class="kwd">function</span><span class="pln"> tree</span><span class="pun">(</span><span class="pln">$list</span><span class="pun">,</span><span class="pln"> $parent_id </span><span class="pun">=</span><span class="pln"> </span><span class="lit">0</span><span class="pun">)</span><span class="pln">
    </span><span class="pun">{</span><span class="pln">
        $children_list </span><span class="pun">=</span><span class="pln"> </span><span class="pun">[];</span><span class="pln">

        </span><span class="kwd">foreach</span><span class="pln"> </span><span class="pun">(</span><span class="pln">$list </span><span class="kwd">as</span><span class="pln"> $item</span><span class="pun">)</span><span class="pln"> </span><span class="pun">{</span><span class="pln">
            </span><span class="kwd">if</span><span class="pln"> </span><span class="pun">((</span><span class="kwd">int</span><span class="pun">)</span><span class="pln">$parent_id </span><span class="pun">!==</span><span class="pln"> </span><span class="pun">(</span><span class="kwd">int</span><span class="pun">)</span><span class="pln">$item</span><span class="pun">[</span><span class="str">'parent_id'</span><span class="pun">])</span><span class="pln">
                </span><span class="kwd">continue</span><span class="pun">;</span><span class="pln">

            $item</span><span class="pun">[</span><span class="str">'children'</span><span class="pun">]</span><span class="pln"> </span><span class="pun">=</span><span class="pln"> $this</span><span class="pun">-&gt;</span><span class="pln">tree</span><span class="pun">(</span><span class="pln">
                $list</span><span class="pun">,</span><span class="pln">
                $item</span><span class="pun">[</span><span class="str">'category_id'</span><span class="pun">]</span><span class="pln">
            </span><span class="pun">);</span><span class="pln">

            $children_list</span><span class="pun">[]</span><span class="pln"> </span><span class="pun">=</span><span class="pln"> $this</span><span class="pun">-&gt;</span><span class="pln">itemBuild</span><span class="pun">(</span><span class="pln">
                $item
            </span><span class="pun">);</span><span class="pln">
        </span><span class="pun">}</span><span class="pln">

        </span><span class="kwd">return</span><span class="pln"> $children_list</span><span class="pun">;</span><span class="pln">
    </span><span class="pun">}</span><span class="pln">

    </span><span class="kwd">private</span><span class="pln"> </span><span class="kwd">function</span><span class="pln"> itemBuild</span><span class="pun">(</span><span class="pln">$data </span><span class="pun">=</span><span class="pln"> </span><span class="pun">[])</span><span class="pln">
    </span><span class="pun">{</span><span class="pln">
        $data</span><span class="pun">[</span><span class="str">'label'</span><span class="pun">]</span><span class="pln"> </span><span class="pun">=</span><span class="pln"> strip_tags</span><span class="pun">(</span><span class="pln">html_entity_decode</span><span class="pun">(</span><span class="pln">
            $data</span><span class="pun">[</span><span class="str">'name'</span><span class="pun">],</span><span class="pln">
            ENT_QUOTES</span><span class="pun">,</span><span class="pln"> </span><span class="str">'UTF-8'</span><span class="pln">
        </span><span class="pun">));</span><span class="pln">

        $data</span><span class="pun">[</span><span class="str">'href'</span><span class="pun">]</span><span class="pln"> </span><span class="pun">=</span><span class="pln"> $this</span><span class="pun">-&gt;</span><span class="pln">edit_link </span><span class="pun">.</span><span class="pln"> </span><span class="str">'&amp;amp;category_id='</span><span class="pln"> </span><span class="pun">.</span><span class="pln"> $data</span><span class="pun">[</span><span class="str">'category_id'</span><span class="pun">];</span><span class="pln">

        </span><span class="kwd">return</span><span class="pln"> $data</span><span class="pun">;</span><span class="pln">
    </span><span class="pun">}</span><span class="pln">

    </span><span class="kwd">private</span><span class="pln"> </span><span class="kwd">function</span><span class="pln"> validate</span><span class="pun">()</span><span class="pln">
    </span><span class="pun">{</span><span class="pln">
        </span><span class="kwd">if</span><span class="pln"> </span><span class="pun">(!</span><span class="pln">$this</span><span class="pun">-&gt;</span><span class="pln">user</span><span class="pun">-&gt;</span><span class="pln">hasPermission</span><span class="pun">(</span><span class="str">'access'</span><span class="pun">,</span><span class="pln"> </span><span class="str">'extension/module/multi_categories'</span><span class="pun">))</span><span class="pln"> </span><span class="pun">{</span><span class="pln">
            $this</span><span class="pun">-&gt;</span><span class="pln">error</span><span class="pun">[</span><span class="str">'warning'</span><span class="pun">]</span><span class="pln"> </span><span class="pun">=</span><span class="pln"> $this</span><span class="pun">-&gt;</span><span class="pln">language</span><span class="pun">-&gt;</span><span class="kwd">get</span><span class="pun">(</span><span class="str">'error_permission'</span><span class="pun">);</span><span class="pln">
        </span><span class="pun">}</span><span class="pln">

        </span><span class="kwd">return</span><span class="pln"> </span><span class="pun">!</span><span class="pln">$this</span><span class="pun">-&gt;</span><span class="pln">error</span><span class="pun">;</span><span class="pln">
    </span><span class="pun">}</span><span class="pln">
</span><span class="pun">}</span></pre>

<p>
	 
</p>

<p>
	<span style="font-size:16px;">4) Модель</span>
</p>

<p>
	<em>../upload/admin/model/extension/module/multi_categories.php</em>
</p>

<pre class="ipsCode prettyprint lang-php prettyprinted"><span class="pun">&lt;?</span><span class="pln">php
</span><span class="com">// Read more: https://opencartforum.com/files/developer/678008-sha</span><span class="pln">

</span><span class="kwd">class</span><span class="pln"> </span><span class="typ">ModelExtensionModuleMultiCategories</span><span class="pln"> </span><span class="kwd">extends</span><span class="pln"> </span><span class="typ">Model</span><span class="pln"> </span><span class="pun">{</span><span class="pln">
    </span><span class="kwd">public</span><span class="pln"> </span><span class="kwd">function</span><span class="pln"> get_categories</span><span class="pun">()</span><span class="pln">
    </span><span class="pun">{</span><span class="pln">
        $query </span><span class="pun">=</span><span class="pln"> $this</span><span class="pun">-&gt;</span><span class="pln">db</span><span class="pun">-&gt;</span><span class="pln">query</span><span class="pun">(</span><span class="str">"SELECT cd.name, c.category_id, c.parent_id, c.sort_order FROM "</span><span class="pln"> </span><span class="pun">.</span><span class="pln"> DB_PREFIX </span><span class="pun">.</span><span class="pln"> </span><span class="str">"category c LEFT JOIN "</span><span class="pln"> </span><span class="pun">.</span><span class="pln"> DB_PREFIX </span><span class="pun">.</span><span class="pln"> </span><span class="str">"category_description cd ON (c.category_id = cd.category_id) WHERE cd.language_id = '"</span><span class="pln"> </span><span class="pun">.</span><span class="pln"> </span><span class="pun">(</span><span class="kwd">int</span><span class="pun">)</span><span class="pln">$this</span><span class="pun">-&gt;</span><span class="pln">config</span><span class="pun">-&gt;</span><span class="kwd">get</span><span class="pun">(</span><span class="str">'config_language_id'</span><span class="pun">)</span><span class="pln"> </span><span class="pun">.</span><span class="pln"> </span><span class="str">"' ORDER BY c.parent_id, c.sort_order, cd.name;"</span><span class="pun">);</span><span class="pln">

        </span><span class="kwd">return</span><span class="pln"> isset</span><span class="pun">(</span><span class="pln">$query</span><span class="pun">-&gt;</span><span class="pln">num_rows</span><span class="pun">)</span><span class="pln">
            </span><span class="pun">?</span><span class="pln"> $query</span><span class="pun">-&gt;</span><span class="pln">rows
            </span><span class="pun">:</span><span class="pln"> </span><span class="pun">[];</span><span class="pln">
    </span><span class="pun">}</span><span class="pln">
</span><span class="pun">}</span></pre>

<p>
	 
</p>

<p>
	5) Мова
</p>

<p>
	<em>../upload/admin/language/en-gb/extension/module/multi_categories.php</em>
</p>

<pre class="ipsCode prettyprint lang-php prettyprinted"><span class="pun">&lt;?</span><span class="pln">php
</span><span class="com">// Heading</span><span class="pln">
$_</span><span class="pun">[</span><span class="str">'heading_title'</span><span class="pun">]</span><span class="pln">    </span><span class="pun">=</span><span class="pln"> </span><span class="str">'Categories'</span><span class="pun">;</span></pre>

<p>
	 
</p>

<p>
	<span style="font-size:16px;">Сучасні бібліотеки та фреймворки пропонують широкий вибір готового функціоналу, наприклад, ви легко можете додати можливість перетягування елементів</span>
</p>

<pre class="ipsCode prettyprint lang-html prettyprinted"><span class="tag">&lt;el-tree</span><span class="pln">
     ...
     </span><span class="atn">draggable</span><span class="pln">
     ...
</span><span class="tag">&gt;</span><span class="pln">
  //...
</span><span class="tag">&lt;/el-tree&gt;</span></pre>

<p>
	<span style="font-size:16px;">та події </span>
</p>

<pre class="ipsCode prettyprint lang-html prettyprinted"><span class="tag">&lt;el-tree</span><span class="pln">
    @</span><span class="atn">node-drag-start</span><span class="pun">=</span><span class="atv">"dragStart"</span><span class="pln">
    @</span><span class="atn">node-drag-enter</span><span class="pun">=</span><span class="atv">"dragEnter"</span><span class="pln">
    @</span><span class="atn">node-drag-leave</span><span class="pun">=</span><span class="atv">"dragLeave"</span><span class="pln">
    @</span><span class="atn">node-drag-over</span><span class="pun">=</span><span class="atv">"dragOver"</span><span class="pln">
    @</span><span class="atn">node-drag-end</span><span class="pun">=</span><span class="atv">"dragEnd"</span><span class="pln">
    @</span><span class="atn">node-drop</span><span class="pun">=</span><span class="atv">"drop"</span><span class="pln">
</span><span class="tag">&gt;</span><span class="pln">
    // ...
</span><span class="tag">&lt;/el-tree&gt;</span></pre>

<p>
	<span style="font-size:16px;">та з легкістю створити модуль зручного сортування дерева категорій перетягуванням <abbr title="Бесплатная платформа для электронной коммерции с открытым исходным кодом"><abbr title="Бесплатная платформа для электронной коммерции с открытым исходным кодом">OpenCart</abbr></abbr> методом "Drag and Drop".</span>
</p>

<p>
	<span style="font-size:16px;">А з нашими прикладами ще й безкоштовно!!!</span>
</p>

<p>
	 
</p>

<p>
	<span style="font-size:16px;">Дякуємо, за прочитання! </span>
</p>

<p>
	<span style="font-size:16px;"><a href="https://opencartforum.com/files/file/3839-multiedit/?&amp;_rid=678008" rel="">Тут</a> ви зможете знайти наші <a href="https://opencartforum.com/files/developer/678008-sha/?&amp;_rid=678008" rel="">модулі</a>, та щє-й зі знижкою!)</span>
</p>

<p>
	<span style="font-size:16px;">якщо використаєте купон 678008-30</span>
</p>

<p>
	 
</p>

<p>
	<span style="font-size:16px;">Ось що вийшло</span>
</p>

<p>
	 
</p>

<p>
	<img alt="3categoriesmultitree.gif.1fce0dc268789587bc2ae0572bb9e5e3.gif" class="ipsImage ipsImage_thumbnailed" data-fileid="802317" data-ratio="93.11" style="height:auto;" width="682" data-src="https://opencartforum.com/storage/attachment/monthly_2024_10/3categoriesmultitree.gif.1fce0dc268789587bc2ae0572bb9e5e3.gif" src="https://opencartforum.com/applications/core/interface/js/spacer.png" />
</p>

<p>
	 
</p>

<p>
	<span style="font-size:20px;">                              <a href="https://opencartforum.com/ru/files/file/9338-upravlinnya-kategoriyami-free/" rel="">Скачати готовий модуль!</a></span>
</p>

<p>
	 
</p>

<p>
	 
</p>

<p>
	пропозиції та оцiнка вітаються!)
</p>
]]></description><guid isPermaLink="false">544</guid><pubDate>Sun, 13 Oct 2024 23:19:00 +0000</pubDate></item><item><title>&#x42F;&#x43A; &#x43F;&#x456;&#x434;&#x43A;&#x43B;&#x44E;&#x447;&#x438;&#x442;&#x438; Tailwind.css &#x434;&#x43E; &#x441;&#x432;&#x43E;&#x433;&#x43E; Javascript &#x43F;&#x440;&#x43E;&#x435;&#x43A;&#x442;&#x443; &#x43D;&#x430; Node.js.</title><link>https://opencartforum.com/blogs/entry/538-yak-pidklyuchiti-tailwindcss-do-svogo-javascript-proektu-na-nodejs/</link><description><![CDATA[<p>
	<span style="font-size:16px;">Повна документацiя на <a href="https://tailwindcss.com/" rel="external nofollow">офiцiйному сайтi. [EN]</a></span>
</p>

<p>
	 
</p>

<p>
	<span style="font-size:16px;">1) Нам потрiбно <a href="https://nodejs.org/" rel="external nofollow">завантажити</a> та <a href="https://opencartforum.com/blogs/entry/537-yak-rozgornuti-proekt-na-vite-poryad-z-opencart-dlya-skladannya-suchasnih-dodatkiv-za-dopomogoyu-react-vue-svelte-vanila-javascript/" rel="">встановити Node.js</a><br />
	2) Перейти до консолi<br />
	3) Зазвичай він використовується у зв'язку з якимось проектом, наприклад <a href="https://opencartforum.com/blogs/entry/537-yak-rozgornuti-proekt-na-vite-poryad-z-opencart-dlya-skladannya-suchasnih-dodatkiv-za-dopomogoyu-react-vue-svelte-vanila-javascript/" rel="">Vite</a>, або PrimeVue<br />
	4) В консолi ввести:</span>
</p>

<pre class="ipsCode">npm install -D tailwindcss postcss autoprefixer</pre>

<p>
	<span style="font-size:16px;"><img class="ipsImage ipsImage_thumbnailed" data-fileid="789022" data-ratio="40.60" width="436" alt="image.png.40bb04a9df20b271e428b23e5d3601bd.png" data-src="https://opencartforum.com/storage/attachment/monthly_2024_04/image.png.40bb04a9df20b271e428b23e5d3601bd.png" src="https://opencartforum.com/ru/applications/core/interface/js/spacer.png" /></span>
</p>

<p>
	 
</p>

<p>
	<span style="font-size:16px;">5) Згенерувати конфігураційні файли, пишемо</span>
</p>

<pre class="ipsCode">npx tailwindcss init -p</pre>

<p>
	<span style="font-size:16px;"><img class="ipsImage ipsImage_thumbnailed" data-fileid="789023" data-ratio="19.11" width="492" alt="image.png.7e623bcbd7faa8f9171712ba4d09fece.png" data-src="https://opencartforum.com/storage/attachment/monthly_2024_04/image.png.7e623bcbd7faa8f9171712ba4d09fece.png" src="https://opencartforum.com/ru/applications/core/interface/js/spacer.png" /></span>
</p>

<p>
	<span style="font-size:16px;">Ось вони:</span>
</p>

<p>
	<span style="font-size:16px;"><img class="ipsImage ipsImage_thumbnailed" data-fileid="789024" data-ratio="149.16" width="356" alt="tailwind-multiedit-npm.png.7888fef10beb7bbf9f8049fcd9c117de.png" data-src="https://opencartforum.com/storage/attachment/monthly_2024_04/tailwind-multiedit-npm.png.7888fef10beb7bbf9f8049fcd9c117de.png" src="https://opencartforum.com/ru/applications/core/interface/js/spacer.png" /></span>
</p>

<p>
	 
</p>

<p>
	<span style="font-size:16px;">6) Тепер нам потрiбно вiдкрити до редагування файл tailwind.config.js, та внести ось такi змiни</span>
</p>

<pre class="ipsCode">"./index.html",
"./src/**/*.{vue,js,ts,jsx,tsx}"</pre>

<p>
	<span style="font-size:16px;"><span></span><img class="ipsImage ipsImage_thumbnailed" data-fileid="789044" data-ratio="61.44" width="568" alt="tw-multiedit-css.png.bb751ae2822a4496637664cf3cb1b813.png" data-src="https://opencartforum.com/storage/attachment/monthly_2024_04/tw-multiedit-css.png.bb751ae2822a4496637664cf3cb1b813.png" src="https://opencartforum.com/ru/applications/core/interface/js/spacer.png" /></span>
</p>

<p>
	 
</p>

<p>
	<span style="font-size:16px;">7) Далi вiдкрити файл style.css, та додати ось такi змiни</span>
</p>

<pre class="ipsCode">@tailwind base;
@tailwind components;
@tailwind utilities;</pre>

<p>
	<span style="font-size:16px;"><a class="ipsAttachLink ipsAttachLink_image" href="https://opencartforum.com/storage/attachment/monthly_2024_04/tail-wind-multi-edit-pro-vite-project.png.dc3e2c068bb557ac8d6ff1daf82a00eb.png" data-fileid="789046" data-fileext="png" rel=""><img class="ipsImage ipsImage_thumbnailed" data-fileid="789046" data-ratio="51.00" width="1000" alt="tail-wind-multi-edit-pro-vite-project.thumb.png.8ade4bd6148bd5d4d71d22dc6f7b06a6.png" data-src="https://opencartforum.com/storage/attachment/monthly_2024_04/tail-wind-multi-edit-pro-vite-project.thumb.png.8ade4bd6148bd5d4d71d22dc6f7b06a6.png" src="https://opencartforum.com/ru/applications/core/interface/js/spacer.png" /></a></span>
</p>

<p>
	 
</p>

<p>
	<span style="font-size:16px;">8) Якщо ви вперше розгортаєте проект, вам може знадобиться пiдтянути залежностi</span>
</p>

<pre class="ipsCode">npm i</pre>

<p>
	 
</p>

<p>
	<span style="font-size:16px;">9) Останнiй шаг це запуск проекту!</span>
</p>

<pre class="ipsCode">npm run dev</pre>

<p>
	<span style="font-size:16px;">В мене вийшло!)</span>
</p>

<p>
	<span style="font-size:16px;"><img class="ipsImage ipsImage_thumbnailed" data-fileid="789048" data-ratio="55.72" width="463" alt="taill-multiedit.png.c468414ba24ca57d53387630a6514362.png" data-src="https://opencartforum.com/storage/attachment/monthly_2024_04/taill-multiedit.png.c468414ba24ca57d53387630a6514362.png" src="https://opencartforum.com/ru/applications/core/interface/js/spacer.png" /></span>
</p>

<p>
	 
</p>

<p>
	<span style="font-size:16px;">Як пiдключити tailwind до <abbr title="Бесплатная платформа для электронной коммерции с открытым исходным кодом">OpenCart</abbr> робочого проекту<a href="https://tailwindcss.com/docs/installation/play-cdn" rel="external nofollow"> , за допомогою CDN? (офiцiйний сайт)</a></span>
</p>

<p>
	<span style="font-size:16px;"><a href="https://opencartforum.com/files/developer/678008-sha/?utm_source=opencartforum&amp;utm_medium=profilecpage&amp;utm_campaign=profile" rel="">Нашi проекти!</a></span>
</p>

<p>
	 
</p>

<p>
	
</p>
]]></description><guid isPermaLink="false">538</guid><pubDate>Tue, 30 Apr 2024 21:14:14 +0000</pubDate></item><item><title>&#x42F;&#x43A; &#x440;&#x43E;&#x437;&#x433;&#x43E;&#x440;&#x43D;&#x443;&#x442;&#x438; &#x43F;&#x440;&#x43E;&#x435;&#x43A;&#x442; &#x43D;&#x430; Vite &#x43F;&#x43E;&#x440;&#x44F;&#x434; &#x437; OpenCart &#x434;&#x43B;&#x44F; &#x441;&#x43A;&#x43B;&#x430;&#x434;&#x430;&#x43D;&#x43D;&#x44F; &#x441;&#x443;&#x447;&#x430;&#x441;&#x43D;&#x438;&#x445; &#x434;&#x43E;&#x434;&#x430;&#x442;&#x43A;&#x456;&#x432;, &#x437;&#x430; &#x434;&#x43E;&#x43F;&#x43E;&#x43C;&#x43E;&#x433;&#x43E;&#x44E; React, Vue, Svelte, Vanila JavaScript!</title><link>https://opencartforum.com/blogs/entry/537-yak-rozgornuti-proekt-na-vite-poryad-z-opencart-dlya-skladannya-suchasnih-dodatkiv-za-dopomogoyu-react-vue-svelte-vanila-javascript/</link><description><![CDATA[<p>
	<span style="font-size:16px;">Якщо на комп'ютерi ще не встановлено node.js його потрiбно завантажити з <a href="https://nodejs.org/" rel="external nofollow">офсайту</a> та встановити як звичайний додаток.</span>
</p>

<p>
	 
</p>

<p>
	<img class="ipsImage ipsImage_thumbnailed" data-fileid="788899" data-ratio="36.52" width="512" alt="image.png.047c0f6a63f4486213acb3221d5d2400.png" data-src="https://opencartforum.com/storage/attachment/monthly_2024_04/image.png.047c0f6a63f4486213acb3221d5d2400.png" src="https://opencartforum.com/ru/applications/core/interface/js/spacer.png" />
</p>

<p>
	 
</p>

<p>
	<span style="color:#2980b9;"><span style="font-size:18px;">Короткий посібник:</span></span>
</p>

<p>
	 
</p>

<p>
	<span style="font-size:16px;"><span style="color:#2980b9;">1)</span> Спершу потрiбно вiдкрити консоль, та перейти до проекту </span>
</p>

<p>
	<span style="font-size:16px;"><img class="ipsImage ipsImage_thumbnailed" data-fileid="788900" data-ratio="5.71" width="490" alt="image.png.69207225f8bf64671ac4aa6f93659849.png" data-src="https://opencartforum.com/storage/attachment/monthly_2024_04/image.png.69207225f8bf64671ac4aa6f93659849.png" src="https://opencartforum.com/ru/applications/core/interface/js/spacer.png" /></span>
</p>

<p>
	<span style="font-size:16px;">наприклад, cd D:\xampp\htdocs\www\multiedit-pro\</span>
</p>

<p>
	 
</p>

<p>
	<span style="font-size:16px;"><span style="color:#2980b9;">2)</span> Переходимо до розгорнування проекту, </span>
</p>

<p>
	<span style="font-size:16px;">вводимо в консолi: npm create vite@latest</span>
</p>

<p>
	<span style="font-size:16px;"><img class="ipsImage ipsImage_thumbnailed" data-fileid="788901" data-ratio="17.96" width="529" alt="image.png.e6bb27350451c29bea18611eed7eab85.png" data-src="https://opencartforum.com/storage/attachment/monthly_2024_04/image.png.e6bb27350451c29bea18611eed7eab85.png" src="https://opencartforum.com/ru/applications/core/interface/js/spacer.png" /></span>
</p>

<p>
	<span> </span> 
</p>

<p>
	<span style="font-size:16px;"><span style="color:#2980b9;">3)</span> Назва проекту:</span>
</p>

<p>
	<span style="font-size:16px;">Якщо на цьому етапi ви розгортаєте новий чистий проект, то можна вказати його назву.</span>
</p>

<p>
	<span style="font-size:16px;">Але в нашому випадку, для роботи поряд з CMS <abbr title="Бесплатная платформа для электронной коммерции с открытым исходным кодом">OpenCart</abbr> замiсть назви, потрiбно поставити крапку</span>
</p>

<p>
	<span style="font-size:16px;"><img class="ipsImage ipsImage_thumbnailed" data-fileid="788906" data-ratio="18.01" width="977" alt="image.png.3ba3e39b809f0585a75619626c6bffcc.png" data-src="https://opencartforum.com/storage/attachment/monthly_2024_04/image.png.3ba3e39b809f0585a75619626c6bffcc.png" src="https://opencartforum.com/ru/applications/core/interface/js/spacer.png" /></span>
</p>

<p>
	 
</p>

<p>
	<span style="font-size:16px;">тодi з'явиться запитання, i вам потрiбно буде: </span>
</p>

<p>
	<span style="font-size:16px;"><span style="color:#2980b9;">3)</span> Обрати Ignore files and continue, щоб залишити вже iснуючi файли.</span>
</p>

<p>
	<span style="font-size:16px;"><span style="color:#2980b9;">4)</span> Обрати шаблон</span>
</p>

<p>
	<span style="font-size:16px;"><img class="ipsImage ipsImage_thumbnailed" data-fileid="788908" data-ratio="35.68" width="925" alt="image.png.7185387c777641259c1fdaf3b7542d68.png" data-src="https://opencartforum.com/storage/attachment/monthly_2024_04/image.png.7185387c777641259c1fdaf3b7542d68.png" src="https://opencartforum.com/ru/applications/core/interface/js/spacer.png" /></span>
</p>

<p>
	<span style="font-size:16px;">я обираю Vue.</span>
</p>

<p>
	 
</p>

<p>
	<span style="font-size:16px;"><span style="color:#2980b9;">5)</span> Обрати налаштування</span>
</p>

<p>
	<span style="font-size:16px;"><img class="ipsImage ipsImage_thumbnailed" data-fileid="788909" data-ratio="32.13" width="887" alt="image.png.80b13d0ba18146838670a0a353cf8620.png" data-src="https://opencartforum.com/storage/attachment/monthly_2024_04/image.png.80b13d0ba18146838670a0a353cf8620.png" src="https://opencartforum.com/ru/applications/core/interface/js/spacer.png" /></span>
</p>

<p>
	<span style="font-size:16px;">наприклад JavaScript</span>
</p>

<p>
	 
</p>

<p>
	<span style="font-size:18px;">Готово!</span>
</p>

<p>
	<span style="font-size:16px;"><img class="ipsImage ipsImage_thumbnailed" data-fileid="788910" data-ratio="41.21" width="893" alt="image.png.ad1586ff68be757cbdc27e43052c1246.png" data-src="https://opencartforum.com/storage/attachment/monthly_2024_04/image.png.ad1586ff68be757cbdc27e43052c1246.png" src="https://opencartforum.com/ru/applications/core/interface/js/spacer.png" /></span>
</p>

<p>
	 
</p>

<p>
	<span style="font-size:16px;"><span style="color:#2980b9;">6)</span> Для подальшої роботи підтягуємо залежнi модулi</span>
</p>

<p>
	<span style="font-size:16px;">npm i</span>
</p>

<p>
	<span style="font-size:16px;"><img class="ipsImage ipsImage_thumbnailed" data-fileid="788911" data-ratio="10.95" width="676" alt="image.png.c38f4488a17654704963ae699fc0cc00.png" data-src="https://opencartforum.com/storage/attachment/monthly_2024_04/image.png.c38f4488a17654704963ae699fc0cc00.png" src="https://opencartforum.com/ru/applications/core/interface/js/spacer.png" /></span>
</p>

<p>
	<span style="font-size:16px;">...тут буде багато iнфи)</span>
</p>

<p>
	 
</p>

<p>
	<span style="font-size:18px;">А ось i результат:</span>
</p>

<p>
	<span style="font-size:16px;"><img class="ipsImage ipsImage_thumbnailed" data-fileid="788912" data-ratio="115.54" width="399" alt="image.png.c729439445702e0bf18295160d25e556.png" data-src="https://opencartforum.com/storage/attachment/monthly_2024_04/image.png.c729439445702e0bf18295160d25e556.png" src="https://opencartforum.com/ru/applications/core/interface/js/spacer.png" /></span>
</p>

<p>
	 
</p>

<p>
	<span style="font-size:16px;">Проект створили, та рушiй <a href="https://opencartforum.com/opencart/" rel="">ocStore</a> не зачепили! (Вiн знаходиться в папцi upload).</span>
</p>

<p>
	 
</p>

<p>
	<span style="font-size:16px;">А тепер можна й подивитись на результат, та отримати крапельку дофаміну: npm run dev, або npm run preview!</span>
</p>

<p>
	 
</p>

<p>
	<span style="font-size:16px;"><a href="https://vitejs.dev/" rel="external nofollow">Офiцiйний сайт Vite</a>!</span>
</p>
]]></description><guid isPermaLink="false">537</guid><pubDate>Mon, 29 Apr 2024 20:34:25 +0000</pubDate></item><item><title>&#x41F;&#x43E;&#x43B;&#x435;&#x437;&#x43D;&#x43E;&#x435; &#x434;&#x43B;&#x44F; &#x440;&#x430;&#x437;&#x440;&#x430;&#x431;&#x43E;&#x442;&#x447;&#x438;&#x43A;&#x430;.</title><link>https://opencartforum.com/blogs/entry/154-poleznoe-dlya-razrabotchika/</link><description><![CDATA[<p>
	<strong><span style="font-size:16px;">    Полезное:</span></strong>
</p>

<p>
	     1) <a href="https://refactoring.guru/" rel="external nofollow">Рефакторинг и Паттерны</a> проектирования
</p>

<p>
	 
</p>

<p>
	<strong><span style="font-size:16px;">    Безопасность:</span></strong>
</p>

<p>
	     1) <a href="https://check.mnmkr.com/" rel="external nofollow">Проверка подлинности</a> модуля или шаблона.
</p>

<p>
	 
</p>

<p>
	<strong><span style="font-size:16px;">    Самоорганизация:</span></strong>
</p>

<ol><li>
		<a href="https://trello.com" rel="external nofollow">Доска задач</a>
	</li>
	<li>
		<a href="https://wakatime.com/" rel="external nofollow">Wakatime</a> -  удобный тайм-трекер для разработчиков
	</li>
</ol><p>
	<strong><span style="font-size:16px;"> </span></strong>
</p>

<p>
	<strong><span style="font-size:16px;">     Шпаргалки:</span></strong>
</p>

<p>
	     2) Могу ли я <a href="https://caniuse.com/" rel="external nofollow">использовать</a>.
</p>

<p style="background-color:#ffffff;color:#353c41;font-size:14px;">
	<span><span>     5) Шпоры: <a href="https://www.cssportal.com/" rel="external nofollow" style="background-color:transparent;color:#3d6594;">https://www.cssportal.com</a> <a contenteditable="false" data-ipshover="" data-ipshover-target="https://opencartforum.com/profile/18938-tom/?do=hovercard" data-mentionid="18938" href="https://opencartforum.com/profile/18938-tom/" rel="">@Tom</a></span></span>
</p>

<p style="background-color:#ffffff;color:#353c41;font-size:14px;">
	<span><span>     6) В помощь работы с ocmod: <a contenteditable="false" data-ipshover="" data-ipshover-target="https://opencartforum.com/profile/18938-tom/?do=hovercard" data-mentionid="18938" href="https://opencartforum.com/profile/18938-tom/" rel="">@Tom</a></span></span>
</p>

<p style="background-color:rgb(255,255,255);color:rgb(53,60,65);font-size:14px;">
	<span>         - <a href="https://github.com/opencart/opencart/wiki/Modification-System" rel="external nofollow" style="background-color:transparent;color:#4588c5;">https://github.com/<abbr title="Бесплатная платформа для электронной коммерции с открытым исходным кодом"><abbr title="Бесплатная платформа для электронной коммерции с открытым исходным кодом">opencart</abbr></abbr>/<abbr title="Бесплатная платформа для электронной коммерции с открытым исходным кодом"><abbr title="Бесплатная платформа для электронной коммерции с открытым исходным кодом">opencart</abbr></abbr>/wiki/Modification-System</a></span>
</p>

<p style="background-color:rgb(255,255,255);color:rgb(53,60,65);font-size:14px;">
	<span>         - <a href="http://dyisol.com/vqmod-to-ocmod-conversion-tool.php" rel="external nofollow" style="background-color:transparent;color:#3d6594;">http://dyisol.com/vqmod-to-ocmod-conversion-tool.php</a></span>
</p>

<p style="background-color:rgb(255,255,255);color:rgb(53,60,65);font-size:14px;">
	 
</p>

<p>
	 
</p>

<p>
	<strong><span style="font-size:16px;">     Сервисы</span></strong>:
</p>

<p>
	     1) <a href="https://regex101.com/" rel="external nofollow">Конструктор</a> и <a href="https://regex101.com/library?filterFlavors=pcre&amp;filterFlavors=javascript&amp;orderBy=MOST_POINTS" rel="external nofollow">библиотека</a> регулярок.
</p>

<p>
	     2) Оффлайн <a href="https://www.exlab.net/tools/sheets/regexp.html" rel="external nofollow">шпаргалка</a> по регуляркам.
</p>

<p>
	 
</p>

<p>
	<strong><span style="font-size:16px;">    Оптимизация:</span></strong>
</p>

<p>
	     1) <a href="https://tinyjpg.com/" rel="external nofollow">Сжатие</a> изображений.
</p>

<p>
	 
</p>

<p>
	<strong><span style="font-size:16px;">    Разное:</span></strong>
</p>

<p>
	     1) <a href="https://github.com/" rel="external nofollow">https://github.com/</a>
</p>

<p>
	     2) <a href="https://bitbucket.org/" rel="external nofollow">https://bitbucket.org/</a>
</p>

<p>
	     3) Минифицированные файлы<span>:</span><strong><span> </span></strong><span><a href="https://www.10bestdesign.com/dirtymarkup/" rel="external nofollow" style="background-color:transparent;color:#3d6594;">https://www.10bestdesign.com/dirtymarkup/</a> <a contenteditable="false" data-ipshover="" data-ipshover-target="https://opencartforum.com/profile/18938-tom/?do=hovercard" data-mentionid="18938" href="https://opencartforum.com/profile/18938-tom/" rel="">@Tom</a></span>
</p>

<p>
	     5) Fetch:<strong> </strong><a href="https://github.github.io/fetch/" rel="external nofollow" style="background-color:transparent;color:#3d6594;">https://github.github.io/fetch/</a> <a contenteditable="false" data-ipshover="" data-ipshover-target="https://opencartforum.com/profile/689478-pimur/?do=hovercard" data-mentionid="689478" href="https://opencartforum.com/profile/689478-pimur/" rel="">@pimur</a>
</p>

<p>
	     6) JS:<strong> </strong><a href="https://github.com/ryanmcdermott/clean-code-javascript" rel="external nofollow" style="background-color:transparent;color:#3d6594;">https://github.com/ryanmcdermott/clean-code-javascript</a>, <a href="https://github.com/lydiahallie/javascript-questions" rel="external nofollow" style="background-color:transparent;color:#3d6594;">https://github.com/lydiahallie/javascript-questions</a> <a contenteditable="false" data-ipshover="" data-ipshover-target="https://opencartforum.com/profile/689478-pimur/?do=hovercard" data-mentionid="689478" href="https://opencartforum.com/profile/689478-pimur/" rel="">@pimur</a>
</p>

<p>
	     7) Юникод:<strong> </strong><a href="https://unicode-table.com/ru/" rel="external nofollow" style="background-color:transparent;color:#3d6594;">https://unicode-table.com/ru/</a> <a contenteditable="false" data-ipshover="" data-ipshover-target="https://opencartforum.com/profile/689478-pimur/?do=hovercard" data-mentionid="689478" href="https://opencartforum.com/profile/689478-pimur/" rel="">@pimur</a>
</p>

<p>
	     8) CSS Sprite Generator:<strong> </strong><a href="https://spritegen.website-performance.org/" rel="external nofollow" style="background-color:transparent;color:#3d6594;">https://spritegen.website-performance.org/</a> <a contenteditable="false" data-ipshover="" data-ipshover-target="https://opencartforum.com/profile/689478-pimur/?do=hovercard" data-mentionid="689478" href="https://opencartforum.com/profile/689478-pimur/" rel="">@pimur</a>
</p>

<p>
	 
</p>

<p>
	<span><span>    <span style="font-size:18px;"><strong>Технологии:</strong></span></span></span>
</p>

<p>
	    1) <span>Таблицы bootstrap<span>:</span><strong><span> </span></strong><span><a href="https://datatables.net/" rel="external nofollow" style="background-color:transparent;color:#3d6594;">https://datatables.net</a> <a contenteditable="false" data-ipshover="" data-ipshover-target="https://opencartforum.com/profile/18938-tom/?do=hovercard" data-mentionid="18938" href="https://opencartforum.com/profile/18938-tom/" rel="">@Tom</a></span></span>
</p>

<p>
	 
</p>

<p>
	<span style="font-size:18px;"><strong>    Ресурсы:</strong></span>
</p>

<ol><li>
		<span>Иконки Free:</span><strong><span> </span></strong><span><a href="https://icon-icons.com/ru/" rel="external nofollow" style="background-color:transparent;color:#3d6594;">https://icon-icons.com/ru/</a> <a contenteditable="false" data-ipshover="" data-ipshover-target="https://opencartforum.com/profile/18938-tom/?do=hovercard" data-mentionid="18938" href="https://opencartforum.com/profile/18938-tom/" rel="">@Tom</a></span>
	</li>
	<li>
		<span>Сервис хранения изображений<span>: <a href="https://piccy.info/" rel="external nofollow" style="background-color:transparent;color:#3d6594;">https://piccy.info</a>  (Позволяет вставлять на форум прямую ссылку на изображение, без необходимости грузить картинки на форум) <a contenteditable="false" data-ipshover="" data-ipshover-target="https://opencartforum.com/profile/18938-tom/?do=hovercard" data-mentionid="18938" href="https://opencartforum.com/profile/18938-tom/" rel="">@Tom</a></span></span>
	</li>
	<li>
		<a href="https://github.hubspot.com/pace/docs/welcome/" rel="external nofollow">Прелоадеры </a><a contenteditable="false" data-ipshover="" data-ipshover-target="https://opencartforum.com/profile/18938-tom/?do=hovercard" data-mentionid="18938" href="https://opencartforum.com/profile/18938-tom/" rel="">@Tom</a>
	</li>
</ol><p>
	 
</p>

<p>
	<span style="font-size:12px;">To be continued! <img alt=";)" data-emoticon="" data-src="https://opencartforum.com/screenshots/emoticons/test_wink.png" height="20" src="https://opencartforum.com/applications/core/interface/js/spacer.png" srcset="https://opencartforum.com/storage/smiles/emoticons/wink@2x.png 2x" style="height:auto;" title=";)" width="20" /></span>
</p>
]]></description><guid isPermaLink="false">154</guid><pubDate>Wed, 05 Dec 2018 20:09:00 +0000</pubDate></item></channel></rss>
