Post by bogdanus91 » Fri May 12, 2023 11:39 pm

Hello all I am trying to create a simple ocmod modificator the code is below:

Code: Select all

<?xml version="1.0" encoding="utf-8"?>
<modification>
    <name>Symbol counter</name>
    <code>my_modification</code>
    <version>1.0</version>
    <author>Bogdan Onyshenko</author>
    <link>http://www.example.com</link>
    <file path="admin/view/javascript/common.js">
        <operation>
            <search><![CDATA[//]]>&nbsp;</search>
            <add><![CDATA[
// Add the two new functions here:
function updateProgressBar(textarea) {
    const charCount = textarea.value.length;
    //console.log(charCount);
    const progressBar = document.querySelector('#progress-bar');
    //show charcount before progressbar
    document.querySelector('#char-count').innerHTML = charCount + '/170';

    if (charCount < 140) {
        progressBar.style.backgroundColor = 'orange';
        progressBar.style.width = (charCount / 140 * 33.33) + '%';
    } else if (charCount >= 140 && charCount <= 170) {
        progressBar.style.backgroundColor = 'green';
        progressBar.style.width = ((charCount - 140) / 30 * 33.33 + 33.33) + '%';
    } else {
        progressBar.style.backgroundColor = 'red';
        progressBar.style.width = '100%';
    }
}

function updateProgressBarTitle(textarea) {
    const charCount = textarea.value.length;
    //console.log(charCount);
    const progressBar = document.querySelector('#progress-barTitle');
    //show charcount before progressbar
    document.querySelector('#char-countTitle').innerHTML = charCount + '/80';

    if (charCount < 70) {
        progressBar.style.backgroundColor = 'orange';
        progressBar.style.width = (charCount / 70 * 33.33) + '%';
    } else if (charCount >= 70 && charCount <= 80) {
        progressBar.style.backgroundColor = 'green';
        progressBar.style.width = ((charCount - 70) / 30 * 33.33 + 33.33) + '%';
    } else {
        progressBar.style.backgroundColor = 'red';
        progressBar.style.width = '100%';
    }
}
    ]]></add>
        </operation>

    </file>

    <file path="admin/view/template/catalog/product_form.twig">
        <operation>
            <search><![CDATA[<div class="form-group required">
                      <label class="col-sm-2 control-label" for="input-meta-title{{ language.language_id }}">{{ entry_meta_title }}</label>
                      <div class="col-sm-10">
                        <input type="text" name="product_description[{{ language.language_id }}][meta_title]" value="{{ product_description[language.language_id] ? product_description[language.language_id].meta_title }}" placeholder="{{ entry_meta_title }}" id="input-meta-title{{ language.language_id }}" class="form-control"/>
                        {% if error_meta_title[language.language_id] %}
                          <div class="text-danger">{{ error_meta_title[language.language_id] }}</div>
                        {% endif %} </div>
                    </div>]]></search>
            <add><![CDATA[
<div class="form-group required">
    <label class="col-sm-2 control-label" for="input-meta-title{{ language.language_id }}">{{ entry_meta_title }}</label>
    <div class="col-sm-10">
        <input type="text" name="product_description[{{ language.language_id }}][meta_title]" value="{{ product_description[language.language_id] ? product_description[language.language_id].meta_title }}" placeholder="{{ entry_meta_title }}" id="input-meta-title{{ language.language_id }}" class="form-control"/>
        {% if error_meta_title[language.language_id] %}
            <div class="text-danger">{{ error_meta_title[language.language_id] }}</div>
        {% endif %}
    </div>
</div>
<div id="char-countTitle"></div>
<style>
    #char-countTitle {
        display: flex;
        justify-content: center;
    }
</style>
<div id="progress-barTitle" style="width: 100%; height: 10px;"></div>
]]></add>
        </operation>

        <operation>
            <search><![CDATA[<input type="text" name="product_description[{{ language.language_id }}][meta_title]" value="{{ product_description[language.language_id] ? product_description[language.language_id].meta_title }}" placeholder="{{ entry_meta_title }}" id="input-meta-title{{ language.language_id }}" class="form-control"/>]]></search>
            <add><![CDATA[
<input type="text" name="product_description[{{ language.language_id }}][meta_title]" value="{{ product_description[language.language_id] ? product_description[language.language_id].meta_title }}" placeholder="{{ entry_meta_title }}" id="input-meta-title{{ language.language_id }}" class="form-control"/>
]]></add>
        </operation>




        <operation>
            <search><![CDATA[ <div class="form-group">
                      <label class="col-sm-2 control-label" for="input-meta-description{{ language.language_id }}">{{ entry_meta_description }}</label>
                      <div class="col-sm-10">
                        <textarea name="product_description[{{ language.language_id }}][meta_description]" rows="5" placeholder="{{ entry_meta_description }}" id="input-meta-description{{ language.language_id }}" class="form-control">{{ product_description[language.language_id] ? product_description[language.language_id].meta_description }}</textarea>
                      </div>
                    </div>]]></search>
            <add><![CDATA[
  <div class="form-group">
                      <label class="col-sm-2 control-label" for="input-meta-description{{ language.language_id }}">{{ entry_meta_description }}</label>
                      <div class="col-sm-10">
                        <textarea name="product_description[{{ language.language_id }}][meta_description]" rows="5" placeholder="{{ entry_meta_description }}" id="input-meta-description{{ language.language_id }}" class="form-control"  oninput="updateProgressBar(this)">{{ product_description[language.language_id] ? product_description[language.language_id].meta_description }}</textarea>
                      </div>

                    </div>
                    <div id="char-count"></div>
                  <style>
                    #char-count {
                      display: flex;
                      justify-content: center;
                    }

                  </style>
                    <div id="progress-bar" style="width: 100%; height: 10px;"></div>

]]></add>
        </operation>


    </file>


    <file path="admin/view/template/catalog/category_form.twig">
        <operation>
            <search><![CDATA[  <div class="form-group required">
                    <label class="col-sm-2 control-label" for="input-meta-title{{ language.language_id }}">{{ entry_meta_title }}</label>
                    <div class="col-sm-10">
                      <input type="text" name="category_description[{{ language.language_id }}][meta_title]" value="{{ category_description[language.language_id] ? category_description[language.language_id].meta_title }}" placeholder="{{ entry_meta_title }}" id="input-meta-title{{ language.language_id }}" class="form-control" />
                      {% if error_meta_title[language.language_id] %}
                      <div class="text-danger">{{ error_meta_title[language.language_id] }}</div>
                      {% endif %}
                    </div>
                  </div>]]></search>
            <add><![CDATA[
  <div class="form-group required">
                    <label class="col-sm-2 control-label" for="input-meta-title{{ language.language_id }}">{{ entry_meta_title }}</label>
                    <div class="col-sm-10">
                      <input type="text" name="category_description[{{ language.language_id }}][meta_title]" value="{{ category_description[language.language_id] ? category_description[language.language_id].meta_title }}" placeholder="{{ entry_meta_title }}" id="input-meta-title{{ language.language_id }}" class="form-control" oninput="updateProgressBarTitle(this)" />
                      {% if error_meta_title[language.language_id] %}
                      <div class="text-danger">{{ error_meta_title[language.language_id] }}</div>
                      {% endif %}
                    </div>
                  </div>

                  <div id="char-countTitle"></div>
                  <style>
                    #char-countTitle {
                      display: flex;
                      justify-content: center;
                    }

                  </style>
                  <div id="progress-barTitle" style="width: 100%; height: 10px;"></div>

]]></add>
        </operation>

        <operation>
            <search><![CDATA[   <div class="form-group">
                    <label class="col-sm-2 control-label" for="input-meta-description{{ language.language_id }}">{{ entry_meta_description }}</label>
                    <div class="col-sm-10">
                      <textarea name="category_description[{{ language.language_id }}][meta_description]" rows="5" placeholder="{{ entry_meta_description }}" id="input-meta-description{{ language.language_id }}" class="form-control">{{ category_description[language.language_id] ? category_description[language.language_id].meta_description }}</textarea>
                    </div>
                  </div>]]></search>
            <add><![CDATA[
  <div class="form-group">
                    <label class="col-sm-2 control-label" for="input-meta-description{{ language.language_id }}">{{ entry_meta_description }}</label>
                    <div class="col-sm-10">
                      <textarea name="category_description[{{ language.language_id }}][meta_description]" rows="5" placeholder="{{ entry_meta_description }}" id="input-meta-description{{ language.language_id }}" class="form-control" oninput="updateProgressBar(this)">{{ category_description[language.language_id] ? category_description[language.language_id].meta_description }}</textarea>
                    </div>
                  </div>
                  <div id="char-count"></div>
                  <style>
                    #char-count {
                      display: flex;
                      justify-content: center;
                    }

                  </style>
                  <div id="progress-bar" style="width: 100%; height: 10px;"></div>

]]></add>
        </operation>
    </file>


    <file path="admin/view/template/catalog/information_form.twig">
        <operation>
            <search><![CDATA[    <div class="form-group required">
                    <label class="col-sm-2 control-label" for="input-meta-title{{ language.language_id }}">{{ entry_meta_title }}</label>
                    <div class="col-sm-10">
                      <input type="text" name="information_description[{{ language.language_id }}][meta_title]" value="{{ information_description[language.language_id] ? information_description[language.language_id].meta_title }}" placeholder="{{ entry_meta_title }}" id="input-meta-title{{ language.language_id }}" class="form-control" />
                      {% if error_meta_title[language.language_id] %}
                      <div class="text-danger">{{ error_meta_title[language.language_id] }}</div>
                      {% endif %} </div>
                  </div>]]></search>
            <add><![CDATA[
 <div class="form-group required">
                    <label class="col-sm-2 control-label" for="input-meta-title{{ language.language_id }}">{{ entry_meta_title }}</label>
                    <div class="col-sm-10">
                      <input type="text" name="information_description[{{ language.language_id }}][meta_title]" value="{{ information_description[language.language_id] ? information_description[language.language_id].meta_title }}" placeholder="{{ entry_meta_title }}" id="input-meta-title{{ language.language_id }}" class="form-control" oninput="updateProgressBarTitle(this)" />
                      {% if error_meta_title[language.language_id] %}
                      <div class="text-danger">{{ error_meta_title[language.language_id] }}</div>
                      {% endif %} </div>
                  </div>
                  <div id="char-countTitle"></div>
                  <style>
                    #char-countTitle {
                      display: flex;
                      justify-content: center;
                    }

                  </style>
                  <div id="progress-barTitle" style="width: 100%; height: 10px;"></div>

]]></add>
        </operation>


        <operation>
            <search><![CDATA[      <div class="form-group">
                    <label class="col-sm-2 control-label" for="input-meta-description{{ language.language_id }}">{{ entry_meta_description }}</label>
                    <div class="col-sm-10">
                      <textarea name="information_description[{{ language.language_id }}][meta_description]" rows="5" placeholder="{{ entry_meta_description }}" id="input-meta-description{{ language.language_id }}" class="form-control">{{ information_description[language.language_id] ? information_description[language.language_id].meta_description }}</textarea>
                    </div>
                  </div>
                ]]></search>
            <add><![CDATA[
   <div class="form-group">
                    <label class="col-sm-2 control-label" for="input-meta-description{{ language.language_id }}">{{ entry_meta_description }}</label>
                    <div class="col-sm-10">
                      <textarea name="information_description[{{ language.language_id }}][meta_description]" rows="5"  placeholder="{{ entry_meta_description }}" id="input-meta-description{{ language.language_id }}" class="form-control" oninput="updateProgressBar(this)">{{ information_description[language.language_id] ? information_description[language.language_id].meta_description }}</textarea>
                    </div>
                  </div>
                  <div id="char-count"></div>
                  <style>
                    #char-count {
                      display: flex;
                      justify-content: center;
                    }

                  </style>
                  <div id="progress-bar" style="width: 100%; height: 10px;"></div>

]]></add>
        </operation>

    </file>
</modification>


the filename is seocounter.ocmod.xml but then I try to upload it using extensions->installer I get an error incorrect file type. I tryed to copress it into zip archive it uploaded but I don't see it in a list of modificators and when i am refreshing or cliaring modification cache I get no effect files didn't change and no errors. What am I doing wrong? Or how do I debug the problem?
Last edited by bogdanus91 on Sat May 13, 2023 1:45 am, edited 2 times in total.

Newbie

Posts

Joined
Wed Jul 10, 2013 5:08 pm

Post by by mona » Sat May 13, 2023 12:07 am

No OC version

This will install You can not make multi-lined edits
javascript does not work with OCmod
Errors are listed in log tab of modifications

Code: Select all

MOD: Symbol counter

FILE: admin/view/javascript/common.js
CODE: //&nbsp;
NOT FOUND - OPERATIONS ABORTED!

FILE: admin/view/template/catalog/product_form.twig
CODE: <div class="form-group required">
                      <label class="col-sm-2 control-label" for="input-meta-title{{ language.language_id }}">{{ entry_meta_title }}</label>
                      <div class="col-sm-10">
                        <input type="text" name="product_description[{{ language.language_id }}][meta_title]" value="{{ product_description[language.language_id] ? product_description[language.language_id].meta_title }}" placeholder="{{ entry_meta_title }}" id="input-meta-title{{ language.language_id }}" class="form-control"/>
                        {% if error_meta_title[language.language_id] %}
                          <div class="text-danger">{{ error_meta_title[language.language_id] }}</div>
                        {% endif %} </div>
                    </div>
NOT FOUND - OPERATIONS ABORTED!

FILE: admin/view/template/catalog/category_form.twig
CODE: <div class="form-group required">
                    <label class="col-sm-2 control-label" for="input-meta-title{{ language.language_id }}">{{ entry_meta_title }}</label>
                    <div class="col-sm-10">
                      <input type="text" name="category_description[{{ language.language_id }}][meta_title]" value="{{ category_description[language.language_id] ? category_description[language.language_id].meta_title }}" placeholder="{{ entry_meta_title }}" id="input-meta-title{{ language.language_id }}" class="form-control" />
                      {% if error_meta_title[language.language_id] %}
                      <div class="text-danger">{{ error_meta_title[language.language_id] }}</div>
                      {% endif %}
                    </div>
                  </div>
NOT FOUND - OPERATIONS ABORTED!

FILE: admin/view/template/catalog/information_form.twig
CODE: <div class="form-group required">
                    <label class="col-sm-2 control-label" for="input-meta-title{{ language.language_id }}">{{ entry_meta_title }}</label>
                    <div class="col-sm-10">
                      <input type="text" name="information_description[{{ language.language_id }}][meta_title]" value="{{ information_description[language.language_id] ? information_description[language.language_id].meta_title }}" placeholder="{{ entry_meta_title }}" id="input-meta-title{{ language.language_id }}" class="form-control" />
                      {% if error_meta_title[language.language_id] %}
                      <div class="text-danger">{{ error_meta_title[language.language_id] }}</div>
                      {% endif %} </div>
                  </div>
NOT FOUND - OPERATIONS ABORTED!
----------------------------------------------------------------
Please read the documentation > https://github.com/opencart/opencart/wi ... ion-System
(and the forum rules > viewtopic.php?t=200480)

For more information use google and/or download a free extension from the marketplace.

DISCLAIMER:
You should not modify core files .. if you would like to donate a cup of coffee I will write it in a modification for you.


https://www.youtube.com/watch?v=zXIxDoCRc84


User avatar
Expert Member

Posts

Joined
Mon Jun 10, 2019 9:31 am

Post by bogdanus91 » Sat May 13, 2023 1:14 am

Thank you for the answer. I think it will be easyer simply to replace the files and it will work. Oc version is 3.0.3.7 sorry for not writeing it here. Too bad that OpenCart is not that extendible. Ocmod seams useless at this point if it can search only by one line aspecially

Newbie

Posts

Joined
Wed Jul 10, 2013 5:08 pm

Post by by mona » Sat May 13, 2023 1:33 am

I personally disagree, but you ae entitled to your opinion.

You can edit groups of lines by using offset, but you cant search multiple lines. You need to read the documentation and get some practice.
Javascript is a limitation, but it is by design .. nothing would work if developers were able to edit commons.js ..
It is not just about what you can do, but it is about what 100s of people can do to the same store files without breaking it ..

Anyway, now that your question is solved please edit the title to include [SOLVED]

DISCLAIMER:
You should not modify core files .. if you would like to donate a cup of coffee I will write it in a modification for you.


https://www.youtube.com/watch?v=zXIxDoCRc84


User avatar
Expert Member

Posts

Joined
Mon Jun 10, 2019 9:31 am
Who is online

Users browsing this forum: No registered users and 17 guests