트위그 확장 함수를 만들어서 디자인을 맞춤형으로 만들어보세요.

7836 단어 EC-CUBE3EC-CUBEtwig
EC-CUBE Advent Calendar 2016 17일차.

트위그 확장 함수를 만들어서 디자인을 맞춤형으로 만들어보세요.


EC-CUBE 3.0에서 템플릿 엔진은 Twig을 사용합니다.
이번에 우리는 Twig 확장 함수를 만들어 Twig 코드에 사용하는 방법을 소개했다.

이 문장의 종점


Top 페이지에 상품명과 재고를 표시합니다.

Twig 확장 함수를 사용하지 않을 경우


다음 그림과 같이 페이지에 매개변수app가 있습니다.그러나 Viwe는 다른 설치에 의존해 가독성도 떨어진다.
twig
{% set Product = app['eccube.repository.product'].get(2) %}

{{ Product.Name }}:残りあと{{ Product.getStockMax }}個!

Twig 확장 함수를 사용하는 경우


최종 실현의 예

TwigExtensionSample_getProduct ProductEnity를 반환하는 Twig 확장 함수를 제작함으로써 다음과 같은 내용을 실현할 수 있다.
  • 이 함수는 매개 변수로 상품 ID를 전달하면 ProductEnity가 되돌아온다.
  • 페이지와 상관없이 사용할 수 있습니다.
  • twig
    {% set Product = TwigExtensionSample_getProduct() %}
    
    {{ Product.Name }}:残りあと{{ Product.getStockMax }}個!
    
    (getProduct와 같은 함수 이름도 가능하지만 함수 이름이 반복되는 문제를 피하기 위해 함수 이름에 플러그인 코드를 추가함)

    설치 방법


    먼저 이쪽에서 초기 플러그인을 다운로드하여 EC-CUBE에 설치/사용하십시오.(설정 잊지 마세요)
    https://github.com/ryo-endo/eccube3-twig-extension-sample-plugin/releases/tag/1.0.0
    [TwigExtensionSamplePlugin-blank.tar.gz]/app/Plugin/TwigExtensionSample/ServiceProvider/TwigExtensionSampleServiceProvider.phpregister 함수에 다음 코드를 추가하면 Twig 코드TwigExtensionSample_getProduct 함수를 사용할 수 있습니다.
    TwigExtensionSampleServiceProvider.php
    public function register(BaseApplication $app)
    {
        $app['twig'] = $app->share($app->extend('twig', function (\Twig_Environment $twig, \Silex\Application $app) {
            // 商品を取得するTwig拡張関数
            $twig->addFunction(new \Twig_SimpleFunction('TwigExtensionSample_getProduct', function ($id) use ($app) {
                return $app['eccube.repository.product']->get($id);
            }));
    
            return $twig;
        }));
    }
    
    이후 EC-CUBE管理画面>コンテンツ管理>ページ管理>TOPページ>ページ編集에서 탑 페이지의 트위터 파일에 다음과 같은 코드를 추가하면 이 글의 최초 캡처처럼 표시해야 한다.
    첫 페이지
    {% block main %}
        {#--ここから--#}
        <div class="row">
            <div class="col-sm-12">
                {% set Product = app['eccube.repository.product'].get(2) %}
                {{ Product.Name }}:残りあと{{ Product.getStockMax }}個!
            </div>
        </div>
        {#--ここまで--#}
    
    완성된 플러그인이 여기에 업로드되었습니다.
    https://github.com/ryo-endo/eccube3-twig-extension-sample-plugin/releases/tag/1.0.0
    [TwigExtensionSamplePlugin-1.0.0.tar.gz]

    간단한 해설

  • $twig->addFunctionTwig_SimpleFunction 실례를 제출하여 새로운 확장 함수를 등록했습니다.
  • 첫 번째 매개 변수는 생성할 확장 함수의 이름입니다.
  • 두 번째 매개 변수는 확장 함수를 호출할 때의 처리(무명 함수)입니다.
  • 확장 함수가 다른 종류로 구분되면


    위에서 말한 바와 같이 무명 함수로 등록하는 것은 간단하지만 반으로 나눌 수도 있다.
    다음은 샘플 코드가 준비되어 있으니 참고하세요.
    확장 함수를 Twig/Extension/ProductExtension.php로 분할합니다.
    Service Provider에는 클래스만 등록됩니다.
    https://github.com/ryo-endo/eccube3-twig-extension-sample-plugin/tree/use_class_file

    주의


    플러그인을 삭제한 후 Twig 파일에 확장 함수가 남아 있으면 Twig 코드의 컴파일링이 '알 수 없는 함수 호출' 이라고 오류를 일으킬 수 있음을 주의하십시오.
    Twig_Error_Syntax in ExpressionParser.php line 574:
    Unknown "TwigExtensionSample_getProduct"function in
    "string_template29dc7e2fb366c012654f4e32f1588c5ddaa81f6708677d059e47634bf7f5342a"at line 43.

    최후


    우리는 Twig 확장 함수를 만들어 이를 이용하여 디자인을 맞춤형으로 만드는 방법을 소개했다.
    어느 정도 통용되는 확장 함수를 만들 수 있다면 프론트 데스크의 담당자도 맞춤형 디자인을 쉽게 할 수 있을 것 같다.
    이번 샘플 플러그인을 기반으로 $twig->addFunction만 추가하면 간단하게 제작할 수 있으니 꼭 시도해 보세요.
    그럼 내일은 @chihiro-adachi의 인기 시리즈인'PhpStorm Silex의 코드 보완(3)'E에 따라.

    좋은 웹페이지 즐겨찾기