Manual

CSS

Css 텍스트 외곽선 처리하기, Stroke

by TheVOS posted Nov 28, 2019
?

Shortcut

PrevPrev Article

NextNext Article

Larger Font Smaller Font Up Down Go comment Print
?

Shortcut

PrevPrev Article

NextNext Article

Larger Font Smaller Font Up Down Go comment Print
Extra Form
Original source https://webisfree.com/2017-09-01/css-%ED...%B0-stroke
CSS를 사용하여 텍스트에 외곽선, stroke 효과를 주는 방법을 알아봅니다.

외곽선은 텍스트를 강조하는 효과적인 방법입니다. 간단하게 css를 사용하여 사용하는 것이 가능한데 가장 간단한 방법은 아래처럼 -webkit-text-stroke를 사용하는 방법입니다.

-webkit-text-stroke: 1px #000


다만, 이 방법은 매우 편리한 방법이지만 아쉽게도 표준 방법은 아니라 웹킷 및 모질라 계열의 브라우저에서만 적용됩니다. 사용할 경우 아래처럼 css에 적용하시기 바랍니다.
.text-stroke {
  -webkit-text-stroke: 1px #000;
}

이제 텍스트에 외곽선이 선명하게 나타납니다.

그렇다면 또 다른 방법을 알아봅니다.


# -webkit-text-stroke 크로스 브라우징 방법아래와 같은 방법을 사용하면 텍스트음영효과인 text-shadow를 이용하여 비슷한 효과를 만들 수 있습니다. 아래 코드를 봐주세요.

.text-stroke {
    color: #f00;
    text-shadow:
    -1px -1px 0 #000,
    1px -1px 0 #000,
    -1px 1px 0 #000,
    1px 1px 0 #000;  
}


이 방법은 text-shadow가 적용되는 대부분의 브라우저에서 구현됩니다. 매우 효과적인 방법입니다.

# 실제 외곽선 적용된 예제보기
만약 아래와 같은 html에 위 css를 적용하여 외곽선을 직접 구현해보겠습니다.

<span class="text-stroke">THEVOS</span>


위 코드의 실행결과는 아래와 같습니다.

THEVOS

Facebook [en]Comment 


  • Q: [EC-CUBE 2系] EC-CUBE 2系でポート番号付で管理画面を動かす TheVOS 2020.01.02
    A:

    Apacheの処理分散させるために、ロードバランサーを介してラウンドロビンを掛けた複数台で同じEC-CUBEを動かす必要が出てきました。
    Apacheを動作させるフロントエンドをコピーした複数台でPHP処理を分担、MySQLはローカル接続されているバックエンドの専用サーバーで運用という形です。

    EC-CUBEはそもそもPHPセッションをDB保存しているので、DBをバックエンドのサーバーで共通化しておけば複数台でのPHPセッションの共有化を配慮する必要はなく、複数台運用への切り替えは簡単です。

    ただし、管理画面からアップロードした画像等はApacheを動かしているサーバーに物理的に保存されるため、ラウンドロビンが掛かった状態ではどのサーバーにファイル保存されるか分からなくバラバラになってしまうため、どれか1台固定のサーバーを正としてそこへ保存し、rsync等で各サーバーへコピーしなくてはなりません。

    サブドメインではっきり分けれれば良いのですが、ドメイン追加をできない場合は1443などの独自のポート番号でポートフォワードで振り分けて管理画面を動かすサーバーを固定したいところ。

    ただし、普通にポート番号付きでアクセスしてしまうと、管理画面でログインした直後にリダイレクトエラーが出ます。
    これは/data/config/config.php で設定している HTTP_URL や HTTPS_URL と異なるURLへジャンプすることを防ぐセキュリティ対策の影響です。
    では、そもそもHTTP_URL に:1443付きで定義したらどうかとなりますが、そうすると今後はポート番号無しでアクセスしているカート画面などでリダイレクトエラーが出ます。訪問者画面も管理画面も同じEC-CUBEだと設定も共通なので。

    そこで、ポート番号付きでアクセスしたときだけこのURLを書き換えてしまうと良いです。
    具体的には /data/config/config.php をこんな風に書きます。常時SSLのご時勢ですからHTTP_URLは振り分けなくても良いかな?

    define('HTTP_URL', 'http://www.exsample.co.jp/');
    if ($_SERVER['SERVER_PORT'] == '1443') {
      define('HTTPS_URL', 'https://www.exsample.co.jp:1443/');
    } else {
      define('HTTPS_URL', 'https://www.exsample.co.jp/');
    }

    Facebook [en]Comment 

  • Q: [EC-CUBE 2系] EC-CUBE 2系で注文を受けた商品の規格を後で削除すると、管理画面で受注内容を編集できなくなる TheVOS 2020.01.02
    A:

    注文された規格を削除して、dtb_products_classテーブルから該当する規格データが無くなると、受注内容のたとえば発送先住所などを編集しようとしても数量の上限チェックに引っかかりエラーが出て受注内容の変更ができなくなってしまいます。

    ※ この現象は、規格のチェックBOXを外して更新 → チェックBOXを再度立てて更新 でも発生します。見た目は同じ規格が存在しているように見えますが、内部のproduct_class_idが変わってしまうのが原因です

    product_class_idも引用してこれていないので画面処理もうまくいきません。
    対応策として、もし規格データが削除されていた場合は在庫数チェックを行わないようにする事で受注内容の編集をできるようにしてみます。

    まずdtb_products_classから規格データが無くなっていてもproduct_class_idやproduct_idを引用できるように商品詳細dtb_order_detailの方から参照するようにします
    SC_Helper_Purchase.php の
    function getOrderDetail のSQL文を書き換えます

    -            T3.product_id,
    -            T3.product_class_id as product_class_id,
    +            T2.product_id,
    +            T2.product_class_id as product_class_id,

    LC_Page_Admin_Order_Edit.php の
    function lfCheckError に処理をスルーさせるIF文を追加

                // 在庫数のチェック
                $arrProduct = $objProduct->getDetailAndProductsClass($arrValues['product_class_id'][$i]);
    
    +            // 規格が削除されていたら在庫数チェックしない
    +            if ($arrProduct['product_class_id'] == '') {
    +                continue;
    +            }

    商品種類 product_type_id も引用してこれていなくて、画面にはエラー表示されませんが必須チェックに引っかかり先に進めなくなるのでこれもスルーさせます。
    LC_Page_Admin_Order_Edit.php の
    function lfInitParam を修正

            // 受注詳細情報
    -        $objFormParam->addParam('商品種別ID', 'product_type_id', INT_LEN, 'n', array('EXIST_CHECK', 'MAX_LENGTH_CHECK', 'NUM_CHECK'), '0');
    +        $objFormParam->addParam('商品種別ID', 'product_type_id', INT_LEN, 'n', array('MAX_LENGTH_CHECK', 'NUM_CHECK'), '0');

    視覚的にも、規格が削除されていて在庫数が連動しない商品だと分かったほうが良いので、数量欄のあるTDの背景色を赤色で表示してみます。
    /data/Smarty/templates/admin/order/edit.tpl を修正

    -                    <td class="center">
    -                        <!--{assign var=key value="quantity"}-->
    +                    <td class="center"<!--{if $arrForm.product_type_id.value[$product_index] == ''}--> style="background-color:#fdd"<!--{/if}-->>
    +                        <!--{assign var=key value="quantity"}-->

    そもそも関連データが存在している規格データを容易にdeleteしてしまう実装ってどうなの?っていう話なんですが。

    Facebook [en]Comment 

  • Q: [EC-CUBE 2系] EC-CUBE 2系でShift_JISに存在しない文字が含まれた受注データがあると、その受注内容が受注CSVからまるごと欠落する TheVOS 2020.01.02
    A:

    受注データの備考などにお客様が入力した文章にShift_JISで表現できない文字や記号がまざっていると、受注CSVをダウンロードしたときにその受注データがそっくり欠落してしまいます。

    これはCSVデータをShift_JISに変換するときのiconvのパラメータがデフォルトの「不正な文字があったらデータを捨てる」指定になっているからです。
    受注データが抜け落ちてしまっては、発見が遅れて実務上のトラブルになりかねないので、変換できない文字があっても近似文字に置き換えて出力するTRANSLIT指定をつけた方が良いと思います。

    SC_Helper_CSV.php の
    function fopen_for_output_csv のiconv指定を変更

    -        stream_filter_append($fp, 'convert.iconv.utf-8/cp932');
    +        stream_filter_append($fp, 'convert.iconv.utf-8/cp932//TRANSLIT');

    Facebook [en]Comment 

  • Q: [EC-CUBE 2系] EC-CUBE 2系で商品情報をCSVで更新するとき関連商品情報が削除される TheVOS 2020.01.02
    A:

    CSVアップロードして商品データを更新する事ができるのですが、そのCSVに「関連商品」の列が無いと、CSVをアップロードしたときにその商品に今まで登録されていた関連商品の内容が全て削除されてしまいます。

    これは、CSVアップロード処理が「関連商品」に関する列がCSVに存在している事を前提に処理しているからで、関連商品がCSV列名に存在しているかどうかチェックして、列が無かったら関連商品の処理を行わないようにすることで回避できます。

    LC_Page_Admin_Products_UploadCSV.php の
    function lfRegistReccomendProducts の冒頭に以下のコードを挿入

            $cnt = 0;
            for ($i = 1; $i <= RECOMMEND_PRODUCT_MAX; $i++) {
                $keyname = 'recommend_product_id' . $i;
                $comment_key = 'recommend_comment' . $i;
                if (array_key_exists($keyname, $arrList) == true) $cnt++;
                if (array_key_exists($comment_key, $arrList) == true) $cnt++;
            }
            if ($cnt == 0) return;

    ※ 自分でコミュニティへ参加してパッチを作成するマンパワーが無いのでその予定はありません

    Facebook [en]Comment 

  • Q: [EC-CUBE 2系] EC-CUBE 2系で商品を沢山購入すると住所情報が欠落する TheVOS 2020.01.02
    A:

    以外と有名な問題なのですが、カートに沢山の商品を入れて注文すると、受注メールは送信されてエラーも出ないのに「送料がゼロ円になる」とか「管理画面に受注データが表示されない」という障害が起きます。

    これは、セッション情報を保存するDBテーブルが text型で取られているため、65,535バイト(MySQLの場合)以上のセッション情報を保存しようとすると後ろの方のデータが欠落するためです。

    CREATE TABLE dtb_session (
        sess_id text NOT NULL,
        sess_data text,
        create_date timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP,
        update_date timestamp NOT NULL,
        PRIMARY KEY (sess_id(255))
    );

    このセッションデータには、カートに入れた商品の情報+購入者情報+配送先情報が入るため、欠落するときは真っ先に配送先の情報が欠落してしまい、結果として都道府県が分からなくなるので送料が計算できずにゼロ円になってしまいます。また、受注データとJOINする配送先データが生成されないので一覧に受注データが表示されないという症状に繋がります。

    対策としては、text → logtext に型を変更するだけで65Kバイト→4Gバイトまで保持できるようになるので情報欠落は無くなります。sessionデータはdtb_order_tempテーブルにも持っているのでそちらも修正が必要です。

    alter table dtb_session modify sess_data longtext;
    alter table dtb_order_temp modify session longtext;

    ※ かなり以前から報告されている障害ですがバージョン2.13.5でも対策されていないので公式に対応する予定は無いようです
    ※ 自分でコミュニティへ参加してパッチを作成するマンパワーが無いのでその予定はありません

    Facebook [en]Comment 

  • Q: [EC-CUBE 2系] EC-CUBE 2系の「もっと見る」を簡潔に TheVOS 2020.01.02
    A:

    今更ながら、EC-CUBE 2系のスマホ版のデザイン変更で苦労しました。

    EC-CUBEに組み込まれている「もっと見る」ボタンですが、Ajaxで次ページのjsonデータを取得してきて画像、商品名、価格等のspanやimgタグの中身を1個ずつコピーしている。。。(3系でも同じなのかな??)

    これでは、つぶしが気かないったらありゃしないので、デザイン変更しても動作するJavaScriptに書き換えてみました。jsonではなく2ページ目のHTMLをそのままGETしてきて商品一覧部分のタグをそのまま現在の一覧の下に差し込むだけ。

    ・総HIT数が<span id=”productscount”>XXX</span>に書かれていること。
    ・もっと見るボタンにid=”btn_more_product”が付いていること。
    ・商品リストの個別商品が class=”list_area” に入っていて、各商品ブロックが<form>で囲まれていること。
    (<form>で囲まれていないなら、2ヶ所の .closest(‘form’) は不要)

    の3点だけ守られていれば、デザイン変更しても大丈夫です。

    <script>
        var pageNo = 2;
        var url = "<!--{$smarty.const.P_DETAIL_URLPATH}-->";
        var imagePath = "<!--{$smarty.const.IMAGE_SAVE_URLPATH|sfTrimURL}-->/";
        var statusImagePath = "<!--{$TPL_URLPATH}-->";
    	
        function getProducts(limit) {
            $.mobile.showPageLoadingMsg();
            var i = limit;
            //送信データを準備
            var postData = {};
            $('#form1').find(':input').each(function(){
                postData[$(this).attr('name')] = $(this).val();
            });
            postData["mode"] = "html";
            postData["pageno"] = pageNo;
    
            // デザイン変更に左右されない「もっと見る」処理に書き換えました。
            $.ajax({
                type: "POST",
                data: postData,
                url: "<!--{$smarty.const.ROOT_URLPATH}-->products/list.php",
                cache: false,
                dataType: "html",
                error: function(XMLHttpRequest, textStatus, errorThrown){
                    alert(textStatus);
                    $.mobile.hidePageLoadingMsg();
                },
                success: function(result){
                    $('.list_area:last').closest('form').after($(result).find('.list_area').closest('form').clone(true));
                    pageNo++;
    
                    //すべての商品を表示したか判定
                    if (parseInt($("#productscount").text()) <= $(".list_area").length) {
                        $("#btn_more_product").hide();
                    }
                    $.mobile.hidePageLoadingMsg();
                }
            });
        }
    </script>
    

    Facebook [en]Comment 

  • Q: [EC-CUBE 2系] EC-CUBEをインストールする TheVOS 2019.12.10
    A:

    EC-CUBEを利用することになりそうなので、ひとまずEC-CUBEをレンタルサーバーにインストールしてみました。その手順備忘録です。

    EC-CUBEをダウンロードする

    EC-CUBE公式サイトからファイルをダウンロードします。
    2019年12月時点で最新バージョンは、2.13.5です。なのでダウンロードしたファイルは eccube-2.13.5.zipでした。
    screencapture-ec-cube-net.jpg
    ダウンロードするには、EC-CUBEメンバーである必要があります。登録は無料なので迷わず登録しました。

    補足ですが、バージョンによっては不具合修正ファイルがあることもあるようなので、その場合はその不具合修正ファイルもダウンロードしておきます。(今回はありませんでした。)

    EC-CUBEのファイルを配置する

    ダウンロードしたファイルは圧縮ファイルなのでとりあえず解凍します。
    そして、サーバーに配置する前に少し準備します。

    解凍すると以下のフォルダが存在すると思います。
    /data
    /docs
    /html
    /test
    /tests
    必要になのは「data」「html」の2つだけです。
    (不具合修正ファイルがある場合は上書きしてください。)

    これから構築するサイトのURLを「http://ドメイン/html」ではなく「http://ドメイン/」としたいので、「data」フォルダを丸ごと「html」フォルダ直下に移動します。
    その移動に伴い、html/define.phpを修正します。

    (修正前)

    1
    define("HTML2DATA_DIR", "/../data/");

    (修正後)

    1
    define("HTML2DATA_DIR", "/data/");

    次に「html」フォルダ直下にある.htaccessを削除します。

    ↓↓↓↓↓ 重要 ↓↓↓↓↓
    このままでは、dataフォルダにWEbからアクセスできてしまうため、とっても危険です。
    例えばlogファイルが丸見えになってしまうので、管理画面のログインIDやサーバーのパスや何のプラグイン使ってるかーなど、いろいろとデータが取れてしまうのです。(他にもいろいろ問題アリ。)
    そこで、dataフォルダ直下に以下を記述した.htaccessを配置します。

    1
    2
    order allow, deny
    deny from all

    ほんとは、dataフォルダはhtmlフォルダ内じゃなくて、ルートディレクトリ外に配置できる方が理想です。
    今回はどうしてもそれが出来ない環境の場合を例にしています。
    ↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑

    ここまで出来たら、サーバーに配置します。
    配置する場所はサーバーによって異なりますが、たいていはApacheのドキュメントルート直下に「html」フォルダ内のフォルダ、ファイル全てを配置します。

    データベースを作る

    EC-CUBEはデータベースを必要とするのでデータベースを事前に準備します。
    PostgreSQLかMySQLを使用することができます。私はphpMyAdminを使ってMySQLを作成しました。
    後で必要になるので、データベース名、MySQLユーザー名、MySQLパスワード、ホスト名をメモしておきます。

    EC-CUBEをインストールする

    「http://ドメイン/」にアクセスします。以下の画面が表示されたら「次へ進む」ボタンを押します。
    eccube-ins-02

    チェック結果が表示されます。成功していれば「次に進む」ボタンを押します。
    eccube-ins-03

    必要なファイルのコピーが開始されます。これも成功していれば「次に進む」ボタンを押します。
    eccube-ins-04

    ECサイトの設定をします。
    純国産のCMSというだけあって説明が丁寧です。さすがです。必要事項を入力して次へ進みましょう。
    eccube-ins-05

    データベースの設定です。
    事前に準備したデータベースの情報を入力します。DBの種類を間違えないようにしましょう。
    入力できたら「次へ進む」ボタンを押します。
    eccube-ins-07

    データベースの初期化です。
    eccube-ins-08
    eccube-ins-09

    デバッグのために情報提供を依頼されます。無難に「はい(推奨)」にしました。「いいえ」にしたらどうなるかは、試してないのでわかりません。
    eccube-ins-10

    インストール完了です。管理画面ログインにすすみます。
    eccube-ins-11

    ここで画面上部に警告が出ます。install/index.phpを削除しろと言っています。おとなしく従いましょう。
    eccube-ins-12

    ファイルを削除するとログイン画面から警告が消えるので、改めて管理画面にログインします。
    eccube-ins-13

    これにて終了です。

    Facebook [en]Comment 

  • Q: [CSS] CSS オブジェクトフィットプロパティ TheVOS 2019.12.04
    A:

    object-fit 속성은 IMG, VIDEO 태그의 크기를 컨테이너에 맞게 자정하는데 사용됩니다.


    브라우저 지원

    테이블의 숫자는 완전히 속성을 지원하는 최초의 브라우저 버전을 지정합니다.

    Propertyicon-chrome1.png icon-edge.png icon-firefox1.png icon-safari1.png icon-opera1.png
    object-fit31.016.036.07.119.0

    정의(Definition)

    • object-fit 속성은 <img>, <video> 태그의 크기를 정의합니다.

    문법(Syntax)

    object-fit: fill | contain | cover | scale-down | none

    속성(Property)

    속성값설명
    fill컨텐츠 사이즈 크기에 맞게 설정합니다.
    contain컨텐츠의 가로 값을 기준으로 맞게 설정합니다.
    cover컨텐츠 화면 사이즈에 맞게 설정합니다.
    scale-down컨텐츠 크기 보다 작게 설정합니다.


    Original

    FILL

    CONTAIN

    COVER

    NONE

    SCALE-DOWN




    object-fit: fill;
    object-fit: contain;
    object-fit: cover;
    object-fit: none;
    object-fit: scale-down;
    


    Facebook [en]Comment 

  • Q: [CSS] Css 텍스트 외곽선 처리하기, Stroke TheVOS 2019.11.28
    A:
    CSS를 사용하여 텍스트에 외곽선, stroke 효과를 주는 방법을 알아봅니다.

    외곽선은 텍스트를 강조하는 효과적인 방법입니다. 간단하게 css를 사용하여 사용하는 것이 가능한데 가장 간단한 방법은 아래처럼 -webkit-text-stroke를 사용하는 방법입니다.

    -webkit-text-stroke: 1px #000


    다만, 이 방법은 매우 편리한 방법이지만 아쉽게도 표준 방법은 아니라 웹킷 및 모질라 계열의 브라우저에서만 적용됩니다. 사용할 경우 아래처럼 css에 적용하시기 바랍니다.
    .text-stroke {
      -webkit-text-stroke: 1px #000;
    }

    이제 텍스트에 외곽선이 선명하게 나타납니다.

    그렇다면 또 다른 방법을 알아봅니다.


    # -webkit-text-stroke 크로스 브라우징 방법아래와 같은 방법을 사용하면 텍스트음영효과인 text-shadow를 이용하여 비슷한 효과를 만들 수 있습니다. 아래 코드를 봐주세요.

    .text-stroke {
        color: #f00;
        text-shadow:
        -1px -1px 0 #000,
        1px -1px 0 #000,
        -1px 1px 0 #000,
        1px 1px 0 #000;  
    }


    이 방법은 text-shadow가 적용되는 대부분의 브라우저에서 구현됩니다. 매우 효과적인 방법입니다.

    # 실제 외곽선 적용된 예제보기
    만약 아래와 같은 html에 위 css를 적용하여 외곽선을 직접 구현해보겠습니다.

    <span class="text-stroke">THEVOS</span>


    위 코드의 실행결과는 아래와 같습니다.

    THEVOS

    Facebook [en]Comment 

  • Q: [EC-CUBE 4.x] EC-CUBE 4를 설치했을 때 설정 한 데이터베이스 암호는 어디에 저장되는 것입니까? TheVOS 2019.11.14
    A:

    설치 한 디렉토리에 .env라는 파일이 있습니다.

    거기에 DATABASE_URL라는 항목이 있습니다.


    「 DATABASE_URL = mysql://사용자 이름:암호@호스트 이름/데이터베이스 이름 」 형식으로 저장되어 있습니다.

    Facebook [en]Comment 

  • Q: [EC-CUBE 2系] EC-CUBE2.13カスタマイズ:新しいページを追加する TheVOS 2019.11.11
    A:

    EC-CUBEで新しいページを追加する方法として、管理画面で追加して、そのページのURLを任意に変更する手順をメモ。

    管理画面からページを追加する

    管理画面でデザイン管理>PC>ページ詳細設定を開き、必要事項を入力して登録するボタンを押下。
    ※スマホ、モバイルもそれぞれ同様です。
    EC-CUBE-add-page-01

    これにより以下の追加が行われます。
    1)/html/user_data/sample.phpが生成される。
    ※sample.phpは登録した任意のファイル名
    ※処理はこのファイルに記述していきます
    2)/data/Smarty/templates/(テンプレート名)/user_data/sample.tplが生成される。
    ※管理画面から入力した内容が入ります。
    3)dtb_pagelayoutテーブルにこのページ情報が1レコード追加される。

    作成されたページのこの時点では以下のパスで確認できます。
    http://www.example.com/html/user_data/sample.php
    このままではイケテないので以下になるように変更していきたいと思います。
    http://www.example.com/html/sample/

    追加したページのURLを変更する

    phpファイルを移動する

    まず生成されたphpファイルを以下に移動します。フォルダを新規作成してファイル名も変更します。
    /html/sample/index.php

    DBを書き換える

    dtb_pagelayoutテーブルのurlフィールドをsample/index.phpに変更する。
    これで、URLの変更ができました。

    ちなみに、dtb_pagelayoutテーブルの中身ですが、おそらくこんな感じ。
    device_type_id・・・「10」はPC用のページという意味
    page_id・・・同じdevice_type_idで重複しないID
    page_name・・・ページ名(管理画面で表示している名前)
    url・・・ページのURL
    filename・・・tplファイルの保管場所
    edit_flg・・・削除可能フラグ

    注:インストールされた環境によってパスは異なります。一般的なパスで紹介しています。

    2014.09.08 追記
    追加したページのURLを変更した場合は、ページを更新するときに管理画面のデザイン管理>PC>ページ詳細設定から編集できなくなります。
    編集してしまうとdtb_pagelayoutテーブルのurlフィールドがデフォルトに戻ってしまうからです。
    更新はテンプレートを直接しなくてはなりません。
    んー、イマイチ?URLを変更しても管理画面から更新できる方法ないかなー?

    Facebook [en]Comment 

  • Q: [EC-CUBE 3系] 관리 화면의 사이드 메뉴에 항목 추가하는 방법 TheVOS 2019.11.11
    A:

    EC-CUBE3에서는 관리 화면의 사이드 메뉴에 쉽게 메뉴를 추가 할 수 있습니다.

    관리 화면에 메뉴 추가

    외형 수정이므로 템플릿 (twig)를 편집 ...라고 생각했는데, 수정할 필요가있는 것은 ServiceProvider입니다.
    실제로 ServiceProvider에서하지 않아도 좋다고 생각 합니다만,로드 된 적당한 ServiceProvider 다음의 설명합니다.

            $ app [ 'config'] = $ app-> share ($ app-> extend ( 'config', function ($ config) {
                $ nav = array (
                    'id'=> 'admin_new_menu'
                    'name'=> '새 메뉴'
                    'url'=> 'admin_new_menu'
                    'has_child'=> 'false'
                    'icon'=> 'cb-chart'
                    'child'=> array (
                        array (
                            'id'=> 'xx_submenu1'
                            'url'=> 'xx_submenu1'
                            'name'=> '하위 메뉴 1'
                        ),
                    ),
                );
    
                $ config [ 'nav'] [] = $ nav;
    
                return $ config;
            }));

    이렇게 app.config.nav 메뉴 배열을 추가하여 메뉴를 늘릴 수 있습니다.
    반대로 필요없는 항목이 배열로부터 삭제 해 주면 제거 할 수 있습니다.

    EC-CUBE3를 이용하시는 분은 꼭보세요.

    Facebook [en]Comment 

  • Q: [EC-CUBE 2.x] EC-CUBE에서 모든 페이지에서 로그인 체크하기 TheVOS 2019.11.11
    A:

    EC-CUBE는 Ver 2.12.6 환경입니다.


    지정 방법

    EC-CUBE는 로그인 판정 결과를 tpl_login라는 변수로 설정하고 일부 페이지가 기본적으로 존재합니다.

    예를 들어, 아래와 같이 소스를 grep하면 tpl_login에 값을 설정하는 부분을 찾을 수 있습니다.

    1
    2
    3
    4
    5
    6
    7
    $ grep -rn "\$this\->tpl_login =" *
    data/class/pages/products/LC_Page_Products_Detail.php:240:            $this->tpl_login = true;
    data/class/pages/frontparts/bloc/LC_Page_FrontParts_Bloc_Login.php:43:        $this->tpl_login = false;
    data/class/pages/frontparts/bloc/LC_Page_FrontParts_Bloc_Login.php:72:            $this->tpl_login = true;
    data/class/pages/shopping/LC_Page_Shopping_Payment.php:95:            $this->tpl_login = '1';
    data/class/pages/shopping/LC_Page_Shopping_Confirm.php:129:            $this->tpl_login = '1';
    data/class/pages/cart/LC_Page_Cart.php:200:            $this->tpl_login = true;

    위의 이름에서 짐작이 붙는 것처럼, 상품 상세 페이지 로그인 블록, 장바구니 페이지, ... 등 특정 페이지를 표시 할 때 사용되는 클래스인데,이 페이지에서는 변수 tpl_login에 설정된 로그인 있는지 (true) 아닌지 (false) 결과에 따라 다음과 같이 템플릿의 표시를 분리 할 수 ​​있습니다.

    1
    2
    3
    4
    5
    <!--{if $tpl_login}-->
    ログイン中です。
    <!--{else}-->
    ログインしていません。
    <!--{/if}-->

    그런데, 이것을 특정 페이지에 한정하지 않고 어떤 페이지에서도 사용할 수 있도록하자.

    페이지 볼 때마다 호출되는 LC_Page라는 기본 클래스 LC_Page (data/class/pages/LC_Page.php)가 있습니다. 그 확장 클래스인 LC_Page_Ex (data/class_extends/page_extends/LC_Page_Ex.php)에 다음과 같은 코드를 추가합니다.

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    public function init()
    {  
        parent::init();
        // ログイン判定
        $objCustomer = new SC_Customer_Ex();
        if ($objCustomer->isLoginSuccess() === true) {
            $this->tpl_login = true;
        }  

    이제 어떤 페이지에서나 tpl_login에 로그인 판정 결과가 저장 되도록 되었습니다.

    마찬가지로 LC_Page_Ex에 어떤 처리든 추가하면 전체 페이지 공통으로 정보를 설정하는 것이 가능합니다.  

    알아두면 유용한 곳이 많을 듯합니다.

    Facebook [en]Comment 

  • Q: [EC-CUBE 2系] イベントセット販売プラグインマニュアル TheVOS 2019.11.07
    A:
    • プラグイン登録
      1. ファイルの選択ボタンをクリックします。
      2. 登録するファイル(EventSetSale.tar.gz)を選択し、開くをクリックします。
      3. インストールのボタンをクリックして、待って、インストールを待ちます。
      4. 下の1-2画面の①の赤長方形のボックスのように表示されたら、通常のインストールがされました。
        1-2.インストール完了画面:通常のインストールが完了した画面
      5. プラグインの基本的な設定をするために②プラグインの設定をクリックして設定画面を開いて、各値を入力して設定します。
      6. インストールされてプラグインを動作させるために1-2画面の③有効チェックボックスをクリックしてチェック 表示をします。

    Facebook [en]Comment 

  • Q: [EC-CUBE 4系] EC-CUBE4系で管理画面に新規メニュー項目を追加する方法 TheVOS 2019.10.28
    A:

    今回は商品管理の一番下に新規メニュー項目を追加することを考えます。
    まずメニューから開けるページが必要ですのでコントローラーを作成し、新しいページを作った後でそのページをメニューに追加してみましょう。今回はeccube_nav.yamlを編集するもっとも簡単な方法をご紹介します。

    管理画面に新規ページを作る方法は下記URLで紹介しています。
    管理画面に2ステップで新規ページを作る方法

    それでは、このページを商品管理のメニューに追加してみます。

    初期状態での管理画面のメニュー一覧はapp/config/eccube/packages/eccube_nav.yamlに配列として記載されています。
    商品のメニュー部分は下記のようになっています。

    parameters:
        eccube_nav:
            product:
                name: admin.product.product_management
                icon: fa-cube
                children:
                    product_master:
                        name: admin.product.product_list
                        url: admin_product
                    product_edit:
                        name: admin.product.product_registration
                        url: admin_product_product_new
                    class_name:
                        name: admin.product.class_management
                        url: admin_product_class_name
                    class_category:
                        name: admin.product.category_management
                        url: admin_product_category
                    product_tag:
                        name: admin.product.tag_management
                        url: admin_product_tag
                    product_csv_import:
                        name: admin.product.product_csv_upload
                        url: admin_product_csv_import
                    category_csv_import:
                        name: admin.product.category_csv_upload
                        url: admin_product_category_csv_import
                    #商品管理に新規メニュー追加

    category_csv_importの下に次のように追記することでメニューを追加することができます。

    product_new_menu:
        name: 新メニュー
        url: admin_new_menu

    new_menuはメニューにつけるID名で、このメニューをアクティブにしたい時にtwigから指定します。
    nameは表示する名称
    urlはコントローラーのRouteで指定したURLの名前です。

    動作検証

    これで管理画面にアクセスするとカテゴリCSV登録の下に新規メニューが追加されました。twigでメニューの位置を指定しているのでアクティブ表示になっています。

    メニュー追加

    eccube_nav.yamlを編集するとバージョンアップの際に上書きされてしまう可能性があります。
    大きなカスタマイズをするとバージョンアップできない可能性も高いですが、バージョンアップをご検討の方はEccubeNav(NavCompilerPass)の仕組みを利用するか、app/config/eccube/packages/prodなどに複製して用いると良いかもしれません。

    Facebook [en]Comment 

  • Q: [EC-CUBE 2.x] EC CUBEで商品ごとに支払い方法を簡単に分ける TheVOS 2019.10.28
    A:
    EC CUBEで支払い方法を分けるのに大きなカスタマイズが必要だと思っていましたが、
    以下の設定で簡単に振り分けが出来ましたのでご紹介します。

    まずEC CUBE管理画面にログインし、システムデータ>マスターデータに進みます。
    マスターデータから「mtb_product_type」を選択します。

    ffd01.JPG
    デフォルトでは1と2が設定されていますので、追加のデータにIDと値を記載します。

    ffd02.JPG

    追加できたら基本情報>支払い方法に進み任意の設定を追加します。ffd03.JPG

    その後配送方法設定に進み、それぞれの取扱商品種別&取扱支払方法を設定した配送方法を作ります。
    同じ名称は設定できないようなので「ゆうパック」「郵パック」のようにしました。

    ffd04.JPG
    ffd05.JPG

    もし別々の商品を同じカゴにいれた場合は別々に決済をしてもらう形になります。
    カスタマイズなしでここまでできるのは便利だな~とおもいました!

    Facebook [en]Comment 

  • Q: [EC-CUBE 2系] 2.13系 ソフトウェア要件 TheVOS 2019.10.11
    A:
    分類 ソフトウェア 動作確認済み
    WEBサーバ IIS 7.0~
    Apache 2.0.x~ 2.2.x~
    言語 PHP 5.2~
    データベース PostgreSQL 8.1.4~ 9.x~
    MySQL 5.0.x~

    必須PHPライブラリ

    • pgsql / mysql
    • gd
    • freetype2
    • mbstring
    • zlib
    • ctype
    • spl (PHP 5.3.0 未満の場合)
    • session

    推奨PHPライブラリ

    • JSON(PHP5.2以降でオーナーズストアを使用する場合は必須)
    • xml(プラグイン機能を使用する場合は必須)
    • OpenSSL
    • cURL
    • hash
    • mhash (PHP 5.3.0 未満の場合)
    • mcrypt
    • zip

    Facebook [en]Comment 

  • Q: [EC-CUBE 2系] ECCUBE 2.13のインストール方法をスクリーンショット付きでわかりやすく徹底解説! TheVOS 2019.10.10
    A:

    EC-CUBE v2.13 インストール에 대한 이미지 검색결과


    EC-CUBE」とは、ECサイトに必要なカート機能や決済機能がパッケージ化されている、無料のツールです。ECサイトを運営したことがある人なら、きっと知っている人も多いはず。あとはWebサーバーさえあれば、わりと簡単にECサイトを立ち上げることができます。これからECサイトをはじめる方向けに、EC-CUBE バージョン2.13のインストール方法を、各画面のスクリーンショット付きでわかりやすく解説します。


    まずはダウンロード

    EC-CUBEサイトから、ZIPファイルをダウンロードしましょう。(この記事では、バージョンは2.13.2です。)

    なお、ダウンロードには会員登録が必要です。

    ECCUBEダウンロード

    つづいてメンバー登録

    ECCUBE 新規メンバー登録

    「eccube-2.13.2.zip」がダウンロードできたら、解凍してみましょう。
    すると、下記のようにいろいろなファイルが入っているはずです。
    このうち「data」と「html」の2つだけを、Webサーバーにアップロードしましょう。

    ECCUBE解凍フォルダ

    アップロード

    アップロードする前に、FTPソフトの設定でアップロード時のパーミッションを指定しておくことをおすすめします。
    ファイルは「644」、ディレクトリは「755」で設定しておきましょう。

    なお、data はセキュリティの面で、一般のユーザーから見えない階層にアップしたほうが良いです。

    私の場合はこんな感じ↓

    /root/data(=一般のユーザーは見れない領域)
    /root/www/html(=www配下は一般のユーザでも見れる領域)

    define.phpを編集

    私の場合は data と html が同階層でなくなったので、html 内の define.php を変更する必要があります。
    (data と html が同階層であれば、変更する必要はありませんので、このステップは飛ばして構いません)

    html ディレクトリから見た、dataディレクトリの相対パスを指定しましょう。

    [php]
    /** HTMLディレクトリからのDATAディレクトリの相対パス */
    define(‘HTML2DATA_DIR’, ‘../../data/’);
    [/php]


    データーベースを作成

    ECCUBEのインストール時にはデータベースの情報を求められますので、あらかじめ用意しておきましょう。

    ここでは私が利用しているさくらサーバーでのやり方をご紹介します。

    コントロールパネルにログイン。

    左ナビから「データベースの設定」を選択。

    データーベースの設定を選択

    「データベースの新規作成」を選択。

    データベースの新規作成を選択

     

    データーベースの情報を設定します。
    MySQLのバージョンは「5.5」、
    データベース名は、自由に命名してください。
    文字コードは「UTF-8」にします。

     

    データーベースの情報を入力

    これでデータベースが作成されました!


    ECCUBEのインストール画面

    先ほどアップした「html」ディレクトリにアクセスしてみましょう。

    パーミッションとdefine.phpのパスが正しく設定されていれば、次の画面が現れるはずです。

    ECCUBE インストール

    ECCUBE - インストール02

    ひとまず必須項目を入力していきます。
    これらの項目はインストール後でも管理画面から変更できます。

    ECCUBE - インストール04

    先ほど作成したデータベースの情報を入力していきます。
    さくらのコントロールパネルのデータベース一覧画面を参照してコピペしましょう。

    ECCUBE - インストール05

    つづいて、データベースの初期化を行います。(ちょっとドキドキ)

    ECCUBE - インストール06

    データベースの初期化に成功しました。

    ECCUBE - インストール07

    情報提供を送信するかをたずねられますが、これはどちらでも構いません。

    ECCUBE - インストール08

    以上でインストールが完了しました!

    ECCUBE - インストール09

    htmlディレクトリにアクセスすると、デフォルトのストアページが表示されるはずです。

    ECCUBE - 初期サイト

    次回は、管理画面から商品情報を変更してみます。

    Facebook [en]Comment 

  • Q: [Class] 클래스의 사용 TheVOS 2019.10.03
    A:

    인스턴스의 생성

    클래스가 선언되고 나면, 선언된 클래스로부터 인스턴스를 생성할 수 있습니다.

    PHP에서는 new 키워드를 사용하여 인스턴스를 생성할 수 있습니다.

     

    이때 클래스 이름을 통해 생성자로 필요한 인수를 전달할 수 있습니다.

    문법

    $객체이름 = new 클래스이름 ( 인수1, 인수2, ...);


    클래스 멤버에 접근

    클래스의 프로퍼티에 접근하거나 메소드를 호출할 때는 화살표 기호(->)를 사용합니다.

     

    객체의 이름 뒤에 화살표 기호(->)를 붙이고, 접근하려고 하는 프로퍼티나 호출하고자 하는 메소드의 이름을 사용하면 됩니다.

    문법

    $객체이름 -> 프로퍼티 이름;

    $객체이름 -> 메소드이름;

     

    PHP에서는 프로퍼티와 메소드의 접근 범위를 제한할 수 있으므로, 클래스 외부에서는 접근 제어자에 따라 접근이 가능할 수도 있고 또는 불가능할 수도 있습니다.

     

    또한, 객체 내부에서 해당 인스턴스의 프로퍼티에 접근하고 싶을 때는 특별한 변수인 $this를 사용할 수 있습니다.

    $this 변수는 해당 인스턴스가 바로 자기 자신을 가리키는 데 사용하는 변수입니다.

    문법

    $this -> 프로퍼티이름;


    접근 제어(access modifier)

    객체 지향 프로그래밍에서 정보 은닉(data hiding)이란 사용자가 굳이 알 필요가 없는 정보는 사용자로부터 숨겨야 한다는 개념입니다.

    그렇게 함으로써 사용자는 언제나 최소한의 정보만으로 프로그램을 손쉽게 사용할 수 있게 됩니다.

     

    PHP에서는 클래스 멤버에 public, private, protected 키워드를 사용하여 각각의 멤버에 대한 접근 제어를 명시할 수 있습니다.

     

    public으로 선언된 멤버는 외부로 공개되며, 해당 객체를 사용하는 어디에서나 직접 접근할 수 있게 됩니다.

    private로 선언된 멤버는 외부로 공개되지 않으며, 해당 클래스의 멤버에서만 접근할 수 있습니다.

    protected로 선언된 멤버는 상위 클래스에 대해서는 public 멤버처럼 취급되며, 외부에서는 private 멤버처럼 취급됩니다.

    즉, 해당 클래스의 멤버와 해당 클래스를 상속받은 자식 클래스에서만 접근할 수 있습니다.

     

    var 키워드를 사용하여 클래스의 프로퍼티를 정의하면, 해당 프로퍼티의 접근 제어는 public으로 자동 정의됩니다.

    또한, 메소드를 작성할 때 접근 제어자를 생략하면 public으로 자동 정의됩니다.

    예제

    class ClassName
    {
        public $publicVar;
        private $privateVar;

        protected $protectedVar;

     

        public function __constructor ( )
        {
            $this -> publicVar = "public property<br>";

            $this -> privateVar = "private property<br>";

            $this -> protectedVar = "protected property<br>";

        }

     

        public function publicMethod ( )
        {
            echo "public method<br>";

        }
        protected function protectedMethod( )
        {
            echo "protected method<br>";
        }
        private function privateMethod( )
        {
            echo "private method<br>";
        }
    }


    $object = new ClassName ( );


    echo $object -> publicVar;      // 접근 가능
    //echo $object->protectedVar; // 접근 불가능
    //echo $object->privatev;     // 접근 불가능


    $object -> publicMethod( );      // 호출 가능
    //$object->protectedMethod(); // 호출 불가능
    //$object->privateMethod();   // 호출 불가능

    코딩연습 ▶

     

    위의 예제처럼 외부에서는 접근 제어자가 public으로 명시된 프로퍼티와 메소드만을 호출할 수 있습니다.


    정보 은닉(data hiding)

    클래스 외부에서는 접근 제어 때문에 private 멤버나 protected 멤버로는 직접 접근할 수 없습니다.

    하지만 public 메소드를 사용하면 해당 클래스의 private 멤버나 protected 멤버에도 접근할 수 있습니다.

     

    이렇게 public 메소드는 private 멤버나 protected 멤버와 프로그램 사이의 인터페이스(interface) 역할을 수행합니다.

    이렇게 외부에서 바로 데이터로 접근하지 못하게 하는 것을 정보 은닉(data hiding)이라고 합니다.

     

    예제

    class ClassName
    {
        private $privateVar;

     

     

        public function __constructor ( )
        {
            $this -> privateVar = "private property";

        }


        public function getValue ( )
        {
            return $this -> privateVar;
        }


        public function setValue ( $value )
        {
            $this -> privateVar = $value;
        }
    }
    $object = new ClassName ( );
    $object -> setValue ( "hello" ); // setValue() 함수를 통해 $private의 값을 변경할 수 있음.
    echo $object ->getValue;     // getValue() 함수를 통해 $private의 값을 출력할 수 있음.

     

     

    위의 예제는 클래스의 외부에서 public 메소드인 getValue()와 setValue() 메소드를 사용하여 해당 클래스의 private 멤버에 접근할 수 있음을 보여주고 있습니다.

    Facebook [en]Comment 

  • Q: [Class] 클래스의 구조 TheVOS 2019.10.03
    A:

    클래스의 구조

    PHP에서 클래스는 class 키워드를 사용하여 다음과 같이 선언합니다.

    문법

    class 클래스이름
    {
        클래스의 프로퍼티과 메소드의 정의;
    }

     

    PHP에서 클래스의 이름을 생성할 때는 반드시 다음 규칙을 지켜야만 합니다.

     

    1. 클래스의 이름은 숫자와의 구분을 빠르게 하려고 숫자로 시작할 수 없습니다.

    2. 클래스의 이름은 영문자(대소문자), 숫자, 언더스코어(_)로만 구성됩니다.

    3. 클래스의 이름 사이에는 공백이 포함될 수 없습니다.

    4. 클래스의 이름은 대소문자를 구분합니다.

    5. PHP에서 미리 정의한 예약어(reserved word)는 클래스의 이름으로 사용할 수 없습니다.

     

    클래스는 클래스만의 상수와 변수를 가질 수 있으며, 이것을 프로퍼티(property)이라고 합니다.

    또한, 메서드(method)라고 불리는 연산을 정의할 수도 있습니다.


    생성자(constructor)

    클래스는 새로운 객체를 생성할 때마다 생성자(constructor)라는 메서드를 호출합니다.

     

    생성자는 객체가 생성될 때마다 호출되어 해당 객체의 프로퍼티를 초기화하거나, 필요한 다른 객체를 생성하는 등의 초기화 작업을 수행합니다.

    생성자는 다른 메소드와 같은 방식으로 선언되며, 매개변수를 가질 수도 있습니다. 

     

    PHP에서 생성자의 이름은 __construct()로 정해져 있습니다.

    이러한 생성자는 객체가 생성될 때마다 자동으로 호출되므로, 사용자가 직접 호출할 필요가 없습니다.

    문법

    class 클래스이름
    {
        function __construct ( 매개변수1매개변수2, ...)
        {
            생성자가 호출될  실행될 코드;
        }
    }


    소멸자(destructor)

    소멸자(destructor)는 생성자와는 반대로 해당 객체를 더는 사용하지 않아 삭제할 때 호출합니다. 

    PHP에서 소멸자의 이름은 __desturct()로 정해져 있으며, 매개변수를 가질 수 없습니다.

    문법

    class 클래스이름
    {
        function __desturct ( )
        {
            소멸자가 호출될  실행될 코드;
        }
    }


    Facebook [en]Comment 

Board Pagination Prev 1 2 Next
/ 2