사전 부팅 모듈 — 관리에서 향상된 제품 목록


오늘 우리는Prestashop 모듈 프로그래밍으로 돌아간다.우리 오늘 무슨 게임 해요?
많은 모듈이 우리가 앞쪽에서 디렉터리 보기를 사용자 정의할 수 있도록 해 준다.그런데 만약에 저희가 백스테이지를 정하고 싶다면요?즉, 우리는 제품 목록 보기에서 약간의 열이 부족하다는 것이다.만약 목록에서 우리의 모든 EAN13 코드와 원가와 무게 등의 값을 볼 수 있다면 다행이다. 이 값들은 보통 사용자가 잘못 설정한 것이기 때문에 추적하기 어렵다.무게가 0그램이고 운임이 0펜스인 주문서를 발표하려고 할 때만 제품 설명에 값이 부족하다는 것을 깨닫기 시작한다.
우리는 열을 추가하는 여러 가지 방법이 있다.우선 갈고리 actionAdminProductsListingFieldsModifier 가 있는데, 그 역할은 말 그대로 제품 목록을 구축하는 데 사용되는 select의 필드를 수정할 수 있도록 하는 것이다.
actionAdminProductsListingFieldsModifier
Located in: /src/Adapter/Product/AdminProductDataProvider.php
Parameters:

<?php
array(
  '_ps_version' => (string) PrestaShop version,
  'sql_select' => &(array),
  'sql_table' => &(array),
  'sql_where' => &(array),
  'sql_order' => &(array),
  'sql_limit' => &(string),
);
(수중에 완전한Prestashop 원본 파일이 있으면 항상 도움이 된다. 원본 파일을 보면 보통 이 생각을 이해하는 데 도움이 된다. 내 예에서 이 갈고리가 called twice, most probably by mistake라는 것을 먼저 발견했다.그래,잘못됐든 안 됐든 이제 우리는 이 사실에 대처할 준비가 되어 있다.)
the previous article에서 했던 것처럼 모듈 프레임워크를 만듭니다.여기까지:
https://validator.prestashop.com/generator
나는 아래 목록에서 필요한 갈고리를 찾을 수 없기 때문에, 우리는 잠시 후에 그것을 추가할 것이다.
새로운 모듈을 다운로드하고 압축을 풀면 코드를 추가합니다.필요한 갈고리를 추가하겠습니다.
public function install()
{
        Configuration::updateValue('ADMINEXTRAINFO_LIVE_MODE', false);

        return parent::install() &&
            $this->registerHook('backOfficeHeader') &&
            $this->registerHook('actionAdminProductsListingFieldsModifier');  // added line
}
설치 방법 및 파일 하단의 훅 구현:
public function hookActionAdminProductsListingFieldsModifier($param)
{
        /* Place your code here. */
        print('***==hookActionAdminProductsListingFieldsModifier==***');
        var_dump($param);
}
단지 그것이 효과가 있는지 확인하기 위해서다.
확실히 그렇다.이것은 페이지 원본에서 바로 볼 수 있는 것입니다.
***==hookActionAdminProductsListingFieldsModifier==***array(10) {
  ["_ps_version"]=>
  string(7) "1.7.7.3"
  ["sql_select"]=>
  &array(16) {
    ["id_product"]=>
    array(3) {
      ["table"]=>
      string(1) "p"
      ["field"]=>
      string(10) "id_product"
      ["filtering"]=>
      string(4) " %s "
    }
    ["reference"]=>
    array(3) {
      ["table"]=>
      string(1) "p"
      ["field"]=>
      string(9) "reference"
      ["filtering"]=>
      string(13) "LIKE '%%%s%%'"
    }
    ["price"]=>
    array(3) {
      ["table"]=>
      string(2) "sa"
      ["field"]=>
      string(5) "price"
      ["filtering"]=>
      string(4) " %s "
    }
        ...

아래로 스크롤하면 두 번 반복되는 것을 볼 수 있습니다. 이것이 바로 우리가 AdminProductDataProvider의 코드를 검사할 때 기대했던 것입니다.php.네, 하지만 내용은 자기 해석입니다.매개 변수에 새 필드를 같은 형식으로 추가하기만 하면 됩니다.우리가 필요로 하는 필드가 같은 표에 있다는 것을 아는 아주 간단한 작업이중 처형을 방지하는 것을 잊지 마라.
이것이 바로 우리가 갈고리에 넣을 물건이다.
public function hookActionAdminProductsListingFieldsModifier($param)
{
        /* Place your code here. */
        if (!$param['sql_select']['ean13']) {
                $param['sql_select']['ean13'] = array();
                $param['sql_select']['ean13']["table"] = "p";
                $param['sql_select']['ean13']["field"] = "ean13";
                $param['sql_select']['ean13']["filtering"] = "LIKE '%%%s%%'";
        }

        if (!$param['sql_select']['weight']) {
                $param['sql_select']['weight'] = array();
                $param['sql_select']['weight']["table"] = "p";
                $param['sql_select']['weight']["field"] = "weight";
                $param['sql_select']['weight']["filtering"] = ' %s ';
        }

        if (!$param['sql_select']['wholesale_price']) {
                $param['sql_select']['wholesale_price'] = array();
                $param['sql_select']['wholesale_price']["table"] = "sa";
                $param['sql_select']['wholesale_price']["field"] = "wholesale_price";
                $param['sql_select']['wholesale_price']["filtering"] = ' %s ';
        }
}
그러나 분명히 이것은 부족하다.새 필드를 표시해야 합니다.다행히도Prestashop 모듈 개발 문서를 검색하면 한 페이지가 인용됩니다exactly to our case!모듈의 뷰 하위 폴더에 다음과 같이 하위 트리를 추가해야 합니다.
├───sql
├───translations
├───upgrade
└───views
    ├───css
    ├───img
    ├───js
    ├───PrestaShop
    │   └───Admin
    │       └───Product
    │           └───CatalogPage
    │               └───Lists
    └───templates
        └───admin
하위 디렉토리의 컨텐트는 Prestashop sources의 하위 폴더에서 가져옵니다.
prestashop_1.7.7.3/src/PrestaShopBundle/Resources/views/Admin 
처음에 우리는 파일 하나만 덮어썼는데,
/src/PrestaShopBundle/Resources/views/Admin/Product/CatalogPage/Lists/list.html.twig 
나는 여태껏 들어 본 적이 없다.이전의 작은 나뭇가지 틀이지만, 내가 여기서 본 것은 완전히 Django 틀이나 Jinja 틀처럼 보인다.모든 템플릿 언어가 같은 문법을 사용하는 것 같아...우리에게 이익이 있다!(이러나 주의해야 할 것은 이 문법은 전단과 후단의 비교적 오래된 부분에서 사용된 Smarty와 약간 다르다는 것이다.)
HTML 테이블과 목록에 제품이 표시되는 것을 보았습니다.html.가는 가지는 한 줄의 몸을 대표한다.제품 id와 동일한 열에 EAN13 필드를 추가하여 AD를 그대로 유지합니다.
 <td>
        <label class="form-check-label" for="bulk_action_selected_products-{{ product.id_product }}">
                {{ product.id_product }}
        </label>
        <br/>
        <a href="{{ product.url|default('') }}#tab-step6">{{ product.ean13 }}</a>
    </td>
나는 다른 분야에서 이 생각을 복제했다 #링크 중의tab-step6는 제품 설명의 '옵션' 옵션을 가리키며, EAN13이 설정되어 있습니다."마찬가지로""무게""필드는 제품 범주 아래에 배치하고 도매 가격은 가격 아래에 둡니다."
<td>
        {{ product.name_category|default('') }}
        <br>
        <a href="{{ product.url|default('') }}#tab-step4">{{ product.weight|round(2) }} kg</a>
</td>
<td class="text-center">
        <a href="{{ product.url|default('') }}#tab-step2">{{ product.price|default('N/A'|trans({}, 'Admin.Global')) }}</a>
        <br>
        <a href="{{ product.url|default('') }}#tab-step2">{{ product.wholesale_price|round(2) }}</a>
</td>
우리는 숫자가 좋은 외관을 가지도록 반올림 (2) 필터를 사용해야 한다. 그렇지 않으면 8자리 정도의 10진수 숫자가 모두 나타날 것이다.왜 제품이 필요 없어요?가격이것은 php 코드에서 완성되었고, 앞에 화폐 기호를 붙이거나 추가했기 때문이다.우리도 도매가격에 대해 같은 조정을 하고 싶지만, 간단하게 보기 위해서 당분간 현상을 유지하자.'kg'이라는 단어의 국제화를 뛰어넘자.
헤더를 변경하려면, 우리는 표의 제품을 덮어써야 한다.html.잔가지 틀.내가 발견한 것은 우리의 새로운 필드를 통해 필터와 정렬을 시도하는 것은 통하지 않는다는 것이다.비록 우리는 이미 정의를 내렸고, 새로운 필드를 필터하고 정렬하는 데 필요한 모든 속성을 정확하게 정의하기를 원하지만, 일부 자바스크립트를 수정해야 합니다.필터와 정렬은 aax 호출을 통해 실행되며 추가 프로그래밍이 필요합니다.우리는 새로운 영역을 처리하기 위해 자바스크립트를 가르쳐야 한다.다음 연습에 남겨 두자.(미완성 솔루션은 고객에게 큰 도움이 됩니다.)
다음은 제 제품 버전표입니다.html.잔가지:
{% block product_catalog_form_table_header %}
    <tr class="column-headers">
        <th scope="col" style="width: 2rem"></th>
        <th scope="col" style="width: 6%">
            {{ ps.sortable_column_header("ID"|trans({}, 'Admin.Global'), 'id_product', orderBy, sortOrder) }}
        </th>
        <th scope="col">
            {{ "Image"|trans({}, 'Admin.Global') }}
        </th>
        <th scope="col">
            {{ ps.sortable_column_header("Name"|trans({}, 'Admin.Global'), 'name', orderBy, sortOrder) }}
        </th>
        <th scope="col" style="width: 9%">
            {{ ps.sortable_column_header("Reference"|trans({}, 'Admin.Global'), 'reference', orderBy, sortOrder) }}
        </th>
        <th scope="col">
            {{ ps.sortable_column_header("Category"|trans({}, 'Admin.Catalog.Feature'), 'name_category', orderBy, sortOrder) }}
        </th>
        <th scope="col" class="text-center" style="width: 6%">
            {{ ps.sortable_column_header("Price ex VAT"|trans({}, 'Admin.Catalog.Feature'), 'price', orderBy, sortOrder) }}
        </th>
        <th scope="col" class="text-center" style="width: 6%">
            {{ "Price VAT"|trans({}, 'Admin.Catalog.Feature') }}
        </th>

        {% if 'PS_STOCK_MANAGEMENT'|configuration %}
        <th scope="col" class="text-center" style="width: 6%">
            {{ ps.sortable_column_header("Quant"|trans({}, 'Admin.Catalog.Feature'), 'sav_quantity', orderBy, sortOrder) }}
        </th>
        {% else %}
            <th></th>
        {% endif %}

        <th scope="col" class="text-center">
            {{ ps.sortable_column_header("Status"|trans({}, 'Admin.Global'), 'active', orderBy, sortOrder) }}
        </th>
        {% if has_category_filter == true %}
            <th scope="col">
                {{ ps.sortable_column_header("Pos"|trans({}, 'Admin.Global'), 'position', orderBy, sortOrder) }}
            </th>
        {% endif %}
        <th scope="col" class="text-right" style="width: 3rem; padding-right: 2rem">
                {{ "Actions"|trans({}, 'Admin.Global') }}
        </th>
    </tr>
    <tr class="column-headers">
        <th></th>
        <th>
            {{ "EAN13"|trans({}, 'Admin.Catalog.Feature') }}
        </th>
        <th></th>
        <th></th>
        <th></th>
        <th>
            {{ "Weight"|trans({}, 'Admin.Global') }}
        </th>
        <th>
            {{ "Cost Price"|trans({}, 'Admin.Catalog.Feature') }}
        </th>
        <th></th>
        <th></th>
        <th></th>
        {% if has_category_filter == true %}
            <th></th>
        {% endif %}
        <th></th>
    </tr>
{% endblock %}
다음은 Github 저장소입니다.
https://github.com/vallka/prestamodule_adminextrainfo
계속

좋은 웹페이지 즐겨찾기