Explorar o código

Fix OCMOD targeting wrong template file (product.twig vs product_form.twig)

OC3 on this host uses product_form.twig, not product.twig. OC3 silently
skips OCMOD operations for files that don't exist, explaining why the tab
never appeared and the modification log showed no errors.

Also wrap getSyncEnabledProducts() in try/catch so sync failures return a
descriptive JSON error instead of a raw PHP exception causing a 500.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Benjamin Harris hai 2 semanas
pai
achega
3fa9e1a9c7
Modificáronse 2 ficheiros con 23 adicións e 19 borrados
  1. 14 17
      install.xml
  2. 9 2
      upload/admin/controller/extension/module/reverb.php

+ 14 - 17
install.xml

@@ -2,51 +2,48 @@
 <modification>
     <name>Reverb Integration</name>
     <code>reverb</code>
-    <version>1.0.3</version>
+    <version>1.0.4</version>
     <author>Reverb OpenCart</author>
     <link>https://reverb.com/au/page/integrations</link>
 
     <!--
         ========================================================================
-        FILE: admin/view/template/catalog/product.twig
-        Injects a Reverb tab into the product edit page.
-
-        Tab content is loaded via AJAX from extension/module/reverb/productTab
-        so no PHP controller patching is required. Saving is handled by the
-        OC event hooks registered in the module install() method.
+        FILE: admin/view/template/catalog/product_form.twig
+        (OC3 uses product_form.twig, NOT product.twig)
 
-        error="skip" on each operation means a single search miss will not
-        abort the other operation.
+        Injects a Reverb tab into the product edit page.
+        Tab content is loaded via AJAX from extension/module/reverb/productTab.
+        Saving is handled by OC event hooks registered in module install().
         ========================================================================
     -->
-    <file path="admin/view/template/catalog/product.twig">
+    <file path="admin/view/template/catalog/product_form.twig">
 
-        <!-- Tab nav item — inserted after the SEO tab -->
+        <!-- Tab nav item — inserted after the Design tab (last tab in OC3) -->
         <operation error="skip">
-            <search><![CDATA[<li><a href="#tab-seo" data-toggle="tab">{{ tab_seo }}</a></li>]]></search>
+            <search><![CDATA[<li><a href="#tab-design" data-toggle="tab">{{ tab_design }}</a></li>]]></search>
             <add position="after"><![CDATA[<li><a href="#tab-reverb" data-toggle="tab">Reverb</a></li>]]></add>
         </operation>
 
-        <!-- Tab pane placeholder + AJAX loader — inserted before the SEO pane -->
+        <!-- Tab pane + AJAX loader — inserted before the Design pane -->
         <operation error="skip">
-            <search><![CDATA[<div class="tab-pane" id="tab-seo">]]></search>
+            <search><![CDATA[<div class="tab-pane" id="tab-design">]]></search>
             <add position="before"><![CDATA[
 <div class="tab-pane" id="tab-reverb">
   <div id="reverb-tab-content" style="padding:20px;">
     <i class="fa fa-spinner fa-spin"></i> Loading&hellip;
   </div>
 </div>
-<script>
+<script type="text/javascript">
 (function () {
   $(document).ready(function () {
-    var p  = new URLSearchParams(window.location.search);
+    var p   = new URLSearchParams(window.location.search);
     var url = 'index.php?route=extension/module/reverb/productTab'
             + '&user_token=' + encodeURIComponent(p.get('user_token') || '')
             + '&product_id=' + encodeURIComponent(p.get('product_id') || 0);
     $.get(url).done(function (html) {
       $('#reverb-tab-content').html(html);
     }).fail(function () {
-      $('#reverb-tab-content').html('<p class="text-danger"><i class="fa fa-exclamation-circle"></i> Could not load Reverb tab. Check that the Reverb module is installed correctly.</p>');
+      $('#reverb-tab-content').html('<p class="text-danger"><i class="fa fa-exclamation-circle"></i> Could not load Reverb tab. Check that the Reverb module is installed and enabled.</p>');
     });
   });
 }());

+ 9 - 2
upload/admin/controller/extension/module/reverb.php

@@ -188,8 +188,15 @@ class ControllerExtensionModuleReverb extends Controller {
             return;
         }
 
-        $allowed_categories = $this->config->get('module_reverb_sync_categories') ?? [];
-        $products           = $this->model_extension_module_reverb->getSyncEnabledProducts((array)$allowed_categories);
+        try {
+            $allowed_categories = $this->config->get('module_reverb_sync_categories') ?? [];
+            $products           = $this->model_extension_module_reverb->getSyncEnabledProducts((array)$allowed_categories);
+        } catch (Exception $e) {
+            $json['error'] = 'Database error: ' . $e->getMessage();
+            $this->response->addHeader('Content-Type: application/json');
+            $this->response->setOutput(json_encode($json));
+            return;
+        }
 
         $pushed = 0;
         $errors = 0;