Post by rodtango » Tue Nov 20, 2012 9:22 am

오픈카트는 말그대로 오픈소스여서 그런지 개인적으로 참 부족한게 많다고 생각한다.
해서 부족한 부분을 "매꾸려고" Extension 부분을 뒤지다 보면 상당히 많은게 있는데
설치 해 보면 버젼이 틀려서 않되고 또는 여러 vqmod를 새버젼으로 설치하지 않으면
않된다던지... 암튼 문제가 많아도 너무~~~~~~~~~~~~~~ 많다.

버젼이 틀려서 않되는 것은 VQmod는 설치하면 그 다음은 시스템 스타트 컨트롤을
VQmod 가 해버리고 필요한 파일을 찾아 그 내용을 바꾸던지 추가하던지 (Add, Replace)
지가 맘대로 다 해버린다. 그야 다 필요하니까 하겠지만 VQmod 에드온을 설치하면 이넘이
vqcache폴더에 파일을 만들어 넣고 시작할때마다 거기서 불러오는데 버젼이 틀리면
진행하던 스크립이 버젼이 틀려 이행하려는 스크립이 없으면 그다음에 실행해야하는
스크립마져 뻑시킨다. 그래서 어디서 에러가 나는지 통 찾기가 막막하다.
당연히 로그 파일을 보면 대충은 나오지만 모두 다 나오는건 아니다. 또 다른문제는
어떨때는 두가지 익스텐션이 같은 스크립트를 실행하기 때문에 두번 실행하던지
십중팔구 그냥 뻑난다.

그래서... xml 파일을 지우고 복구하려고 난리 부르스를 쳐도 해결을 볼 수 없어
오픈카트를 새로 설치한 적도 있는데 나중에 보니 vqcache에 생성된 파일이
시키지 않아도 지가 먼저 실행을 해버려 한번 만들어진 케쉬파일은 계속 사용하기에
xml 파일만 지워도 문제가 해결되지 않더라.

해서..... 개인적으로 VQmod를 아주 증오한다.

문제 해결은 xml 을 오픈카트 코어에 추가하는 방법인데 전에도 언급했듯이 스페인어 퍼럼에
celestial 이라는 개발자 친구의 도움이 있었다. 방법을 아래에 소개하는데 오픈카트 코어를
건드리는것이니 혹시 발생할 수 있는 문제에 대비해 수정할 파일을 백업하기를 바란다.

개인적으론 2번의 문제가 있었는데 그 후엔 별다른 문제없이 다 잘 된다. 또 제일 큰 장점은
버젼이 틀린 xml 이라도 내 오픈카트버젼에 밪게 수정하여 사용할 수 있다는 점이다.

[BEFORE]

Code: Select all

<file name="admin/controller/catalog/manufacturer.php">  (이곳에 위치한 파일을 찾아서)
      <operation>
      <search position="before"><![CDATA[ 
        $manufacturer_total = $this->model_catalog_manufacturer->getTotalManufacturers(); (이 스크립트를 만나면)
      ]]></search>
      <add><![CDATA[
      $this->load->model('tool/image'); ( 이 스크립트를 위 스크립트 전에 추가하라 )[before]
      ]]></add>
      </operation>
그럼 아래와 같이 admin/controller/catalog/manufacturer.php 파일에
$manufacturer_total = $this->model_catalog_manufacturer->getTotalManufacturers(); 을 찾아
$this->load->model('tool/image'); 을 위에 추가하면 된다.

결과:

Code: Select all

$this->load->model('tool/image');
$manufacturer_total = $this->model_catalog_manufacturer->getTotalManufacturers();
===========


[AFTER]

Code: Select all

<file name="catalog/controller/product/manufacturer.php">( 이 파일을 찾아 )
      <operation>
         <search position="after" trim="true"><![CDATA[
         foreach ($results as $result) {   (이 행을 만났을때 )
         ]]></search>
         <add><![CDATA[
                                               ( 아래 스크립트를 추가한다)
         if ($result['image']) {
            $image = $this->model_tool_image->resize($result['image'], 40, 40);
         } else {
            $image = false;
         }
         ]]></add>
      </operation>

결과는 : admin/controller/catalog/manufacturer.php 파일이 아래와 같이 수정되겠다.

Code: Select all

foreach ($results as $result) { 
             if ($result['image']) {
                         $image = $this->model_tool_image->resize($result['image'], 40, 40);
             } else {
                 $image = false;
                      }
=========

[REPLACE]

Code: Select all

<file name="catalog/view/theme/default/template/product/manufacturer_list.tpl">( 이 파일을 찾아 )
      <operation>
         <search position="replace" trim="true"><![CDATA[
                                                (아래 스크립트를 만나면 )
         <li><a href="<?php echo $category['manufacturer'][$i]['href']; ?>"><?php echo $category['manufacturer'][$i]['name']; ?></a></li>
         ]]></search>
         <add><![CDATA[
                                               (아래 스크립트로 바꾼다)
         <li><a href="<?php echo $category['manufacturer'][$i]['href']; ?>">
		 <img src="<?php echo $category['manufacturer'][$i]['image']; ?>" 
		 alt="<?php echo $category['manufacturer'][$i]['name']; ?>" /><br />
		 <?php echo $category['manufacturer'][$i]['name']; ?></a></li>
         ]]></add>
      </operation>
   </file>
결과는 : admin/controller/catalog/manufacturer.php 파일에

Code: Select all

<li><a href="<?php echo $category['manufacturer'][$i]['href']; ?>"><?php echo $category['manufacturer'][$i]['name']; ?></a></li>  ( 이 스크립트를 지우고 그 자리에 아래 스크립트를 넣으면 되겠다)

<li><a href="<?php echo $category['manufacturer'][$i]['href']; ?>">
		 <img src="<?php echo $category['manufacturer'][$i]['image']; ?>" 
		 alt="<?php echo $category['manufacturer'][$i]['name']; ?>" /><br />
		 <?php echo $category['manufacturer'][$i]['name']; ?></a></li>
by celestial

http://ocart.limclothing.com


User avatar
Active Member

Posts

Joined
Wed Sep 19, 2012 5:34 am
Location - Argentina / Mexico

Post by jonghwa » Tue Feb 12, 2013 12:52 am

오픈카트는 확장(extension)과 모듈(module)을 메커니즘을 제공하지만 특정 이벤트를 후킹할 수 있는 방법을 특별히 제공하지 않기 때문에 향후 업데이트를 고려하면 vQmod를 사용할 수 밖에 없습니다.


vQmod의 가장 큰 위험은 하나의 파일을 여러 xml 파일에서 접근 수정할 때입니다.

이 때는 이를 하나로 몰아서 처리해주는 것이 좋습니다만 어쩔 수 없이 나눠서 관리해야할 수도 있구요.


이렇게 여러 개의 xml 파일에서 접근하는 오픈카트 코어 소스 파일을 알고 싶다면 vqmod/xml 디렉토리 안에서 다음과 같이 명령하면 편리합니다.

Code: Select all

$ grep -h "file name" * | sort | uniq -d
제 쇼핑몰에서는 여러 개의 xml 파일이 다음 파일을 수정하고 있네요.

Code: Select all

        <file name="admin/controller/common/header.php">
        <file name="admin/controller/sale/order.php">
        <file name="admin/model/sale/customer.php">
        <file name="admin/model/sale/order.php">
        <file name="admin/view/template/common/header.tpl">
        <file name="admin/view/template/sale/order_info.tpl">
        <file name="catalog/controller/account/address.php">
        <file name="catalog/controller/account/register.php">
        <file name="catalog/controller/checkout/guest.php">
        <file name="catalog/controller/checkout/guest_shipping.php">
        <file name="catalog/controller/checkout/payment_address.php">
        <file name="catalog/controller/checkout/register.php">
        <file name="catalog/controller/checkout/shipping_address.php">
        <file name="catalog/controller/common/footer.php">
        <file name="catalog/controller/common/header.php">
        <file name="catalog/model/account/customer.php">
        <file name="catalog/model/checkout/order.php">
상황은 각자 다르겠지만 vQmod로 시스템이 꼬인다면 위 설정을 먼저 살펴봐야겠지요.

핀코인 (http://pincoin.co.kr)

extensions by pincoin


User avatar
New member

Posts

Joined
Thu Oct 25, 2012 12:29 pm
Location - Seoul
Who is online

Users browsing this forum: No registered users and 30 guests