テンプレートヘルパー

テンプレートヘルパー #

この章では、テンプレートヘルパーについて説明します。

テンプレートヘルパーはサイトテンプレートもしくはカートテンプレートで使用できるAPI関数です。

テンプレートヘルパーは標準でいくつかのAPI関数が利用できますが、 オーダーカスタムで作成することもできます。

SystemTime #

型:() => DateTime #

例: #

@{
    var now = Page.Template.SystemTime();
}

Now #

SystemTimeを取得します。

型:DateTime #

例: #

@{
    var now = Page.Template.Now; // Page.Template.SystemTime()と等価
}

TruncateNow #

端数処理を行った日時を取得します。

型:(int? = null) => DateTime #

例: #

@{
    var defaultTruncated = Page.Template.TruncateNow(); // 標準設定 1分刻み
    var specificTruncated = Page.Template.TruncateNow(300); // 5分刻み
}

RestartCounter #

再起動カウンタ値を取得します。

型:int #

例: #

@{
    var rc = Page.Template.RestartCounter;
}

SecuredHost #

セキュアホストを取得します。
商品ページはhttp://www.example.comで提供し、カート以降をhttps://ssl.example.comなどのサブドメインで提供する時代がありました。
SecuredHostという名称はHTTPページとHTTPSページが別ドメインで混在していたこの時代の名残です。
この時代ではホストとSSLを使用するセキュアホストを区別する必要がありましたが、現代ではHTTPSのみで提供することが一般的でホストとセキュアホストが区別されることはありません。

型:(bool isSecure) => string #

SSLを使用するかを真偽値で渡し、ホストURLを取得します。

例: #

@{
    string host;
    host = Page.Template.SecuredHost(false); // http://www.example.com
    host = Page.Template.SecuredHost(true);  // https://www.example.com
}

型:(string routeName) => string #

指定したルート情報のSSL必須フラグに基づきホストURLを取得します。

例: #

@{
    string host;
    host = Page.Template.SecuredHost("ModdErrors");  // http://www.example.com
    host = Page.Template.SecuredHost("ModdDefault"); // https://www.example.com
}

型:(HttpContextBase context, bool isSecure) => string #

現在使用しているポート番号を引き継いでホストURLを取得します。

例: #

@{
    string host;
    host = Page.Template.SecuredHost(Page.Context, false); // http://www.example.com:80
    host = Page.Template.SecuredHost(Page.Context, true);  // https://www.example.com:443
}

ルート名とルートパラメータを指定して絶対URLを生成します。

型:(string routeName, object parameters) => string #

例: #

@{
    var action = Page.Template.SecuredLink("ModdPurchase", new { cart=cart.CartDefinition.CartId, action="Index"} );
}

Cache #

キャッシュデータがある場合はそれを取得し、ない場合はデータを生成します。

型: (string cacheKey, int expireSeconds, Func cacheGetter) => TResult #

キャッシュ時間(秒)を指定してキャッシュします。

例: #

@{
    var cachedRandom = Page.Template.Cache("cachekey", 300, () => {
        var rand = new Random();
        return rand.Next();
    });
}

型: (string cacheKey, DateTime expireTime, Func cacheGetter) => TResult #

指定日時までキャッシュします。

例: #

@{
    var next = Page.Template.TruncateNow(300).AddSeconds(300);
    var cachedRandom = Page.Template.Cache("cachekey", next, () => {
        var rand = new Random();
        return rand.Next();
    });
}

型: (TCache cacheKey, int expireSeconds, Func cacheGetter) => TResult #

キャッシュ時間(秒)を指定してキャッシュします。

例: #

@{
    var keyword = "keyword";
    var page = 0;
    var cachedRandom = Page.Template.Cache(new { keyword, page }, 300, () => {
        var rand = new Random();
        return rand.Next();
    });
}

型: (TCache cacheKey, DateTime expireTime, Func cacheGetter) => TResult #

指定日時までキャッシュします。

例: #

@{
    var keyword = "keyword";
    var page = 0;
    var next = Page.Template.TruncateNow(300).AddSeconds(300);
    var cachedRandom = Page.Template.Cache(new { keyword, page }, next, () => {
        var rand = new Random();
        return rand.Next();
    });
}

型:(TCache cacheKey) => TResult #

キャッシュした値を取得します。存在しない場合はdefault(TResult)を返します。

例: #

@{
    var keyword = "keyword";
    var page = 0;
    var data = Page.Template.Cache(new { keyword, page });
}

GetModdUser #

ユーザ情報を取得します。 認証情報等を持つため、本番環境でModdMembershipUserをそのままJSON等にシリアライズすることは避ける必要があります。

型:() => ModdMembershipUser #

例: #

@{
    var user = Page.Template.GetModdUser();
    /* ModdMembershipUserの構造
    {
        IsAnonymous: bool,
        IsApproved: bool,
        LastLoginDate: DateTime,
        LastActivityDate: DateTime,
        CreationDate: DateTime,
        Account: {
            IsActive: bool,
            IsAnonymous: bool,
            UserNo: long,
            ExternalKeys: [
                {
                    RelateDate: DateTime,
                    UserNo: long,
                    AuthenticateType: Crosswarp.Modd.Account.ExternalAuthType(Local|CustomApi|OpenID),
                    LastLoginDate: DateTime?,
                    ExternalKey: string
                }
            ],
            Credential: {
                PasswardHashType: Crosswarp.Modd.Account.HashType(Clear|Encrypted|Hashed),
                Password: string
            },
            ExtendProperties: {
                Subscribe: true,
                AddressId: 3,
                MemberStatus: Crosswarp.Modd.Account.MemberStatus(Normal|Attention|Warning|Critical),
                Sex: Crosswarp.Modd.Account.HumanSexes(NotKnown|Male|Female|NotApplicable),
                Birthday: DateTime?,
                Token: string,
                FirstNameKana: string,
                LastNameKana: string,
                FirstName: string,
                LastName: string,
                Email: string
            },
            GetCustomApiExternalKey: string,
            QuitDate: DateTime?,
            ActivateDate: DateTime?,
            UserName: string
        },
        ProviderUserKey: object,
        UserName: string,
        Email: string
    }
    */
}

GetProduct #

内部商品IDを指定し、商品情報の取得します。

型:(int productId) => Product #

例: #

@{
    var product = Page.Template.GetProduct(1);
    /* Product
    {
        ProductId: int,
        Name: string,
        ExternalId: string, // ExternalId1と等価
        ExternalId1: string,
        ExternalId2: string,
        ExternalId3: string,
        ExternalId4: string,
        UnitPrice: decimal,
        TaxationPrice: decimal,
        SalesPatternID: int,
        SalesPattern: {
            SalesPatternId: int,
            PatternName: string
            CansetDeliveryHour: bool,
            CansetDeliveryDate: bool,
            CanGuestPurchase: bool,
            SinglePurchaseOnly: bool,
            StockControlMode: int,
            PointChargeRate: int,
            CartId: int,
            CartDefinition: {
                CartId: int
            },
            TaxRoundMode: Crosswarp.Modd.Models.TaxRoundMode,
            PaymentMethodBits: int,
            PaymentMethods: Flags,
            MaxMailDeliveryPerOrder: int?,
            InternalStockPriority: int,
            MaxPurchasePerOrder: int?,
            MaxPurchasePerAccount: int?,
            MaxReserveRequestAmount: int?,
            EnableReserveOrder: bool,
            UserCancelEnable: bool,
            MemberRank: int?,
        },
        SetOnly: false,
        SetProductChildren: [],
        SalesStatus: 0,
        ProductSalesStatus: "Sale",
        SalesEnd: null,
        SalesStart: "/Date(1603724400000)/",
        ReleaseDate: "/Date(1603724400000)/",
        ReReleaseDate: null,
        Cero: null,
        Categories: [
            {
                CategoryID: int,
                CategoryGroupID: int,
                Name: string,
                ExternalCategoryName1: string,
                ExternalCategoryName2: string,
            },
        ]
    }
    */
}

GetProductAmount #

内部商品IDを指定し、商品の販売可能数を取得します。

型:(int productId) => int #

例: #

@{
    var stock = Page.Template.GetProductAmount(1);
}

GetProductSalesPattern #

内部商品IDを指定し、販売パターンの取得します。

型:(int productId) => SalesPattern #

例: #

@{
    var salesPattern = Page.Template.GetProductSalesPattern(1);
    /* SalesPattern
    {
        SalesPatternId: int,
        PatternName: string
        CansetDeliveryHour: bool,
        CansetDeliveryDate: bool,
        CanGuestPurchase: bool,
        SinglePurchaseOnly: bool,
        StockControlMode: int,
        PointChargeRate: int,
        CartId: int,
        CartDefinition: {
            CartId: int
        },
        TaxRoundMode: Crosswarp.Modd.Models.TaxRoundMode,
        PaymentMethodBits: int,
        PaymentMethods: Flags,
        MaxMailDeliveryPerOrder: int?,
        InternalStockPriority: int,
        MaxPurchasePerOrder: int?,
        MaxPurchasePerAccount: int?,
        MaxReserveRequestAmount: int?,
        EnableReserveOrder: bool,
        UserCancelEnable: bool,
        MemberRank: int?,
    }
    */
}

GetPointChargeRate #

内部商品IDを指定し、商品のポイント還元率を取得します。

型:(int productId) => int #

例: #

@{
    var rate = Page.Template.GetPointChargeRate(1);
}

CanReserveRequest #

内部商品IDを指定し、仮予約可能な商品かを判定します。

型:(int productId) => bool #

例: #

@{
    var reservable  = Page.Template.CanReserveRequest(1);
}

GetUnitPriceWithTax #

内部商品IDを指定し、商品の税込価格を計算します。

型:(int productId) => decimal #

例: #

@{
    var price = Page.Template.GetUnitPriceWithTax(1);
}

GetDiscountPriceWithTax #

内部商品IDと割引率(%)を指定し、商品の税込割引額を計算します。

型:(int productId, int discountRate) => decimal #

例: #

@{
    var discount = Page.Template.GetDiscountPriceWithTax(1, 30);
}

GetDiscountedPriceWithTax #

内部商品IDと割引率(%)を指定し、割引後の税込価格を計算します。

型:(int productId, int discountRate) => decimal #

例: #

@{
    var price = Page.Template.GetDiscountPriceWithTax(1, 30); // 3割引、30%オフ
}

GetMakerPriceWithTax #

内部商品IDと商品のメーカー希望小売価格を指定し、税込額を計算します。

型:(int productId, decimal price) => decimal #

例: #

@{
    var price = Page.Template.GetMakerPriceWithTax(1, 1000m);
}

GetProductPaymentMethods #

内部商品IDを指定し、商品の利用可能な決済方法一覧を取得します。

型:(int productId) => IEnumerable #

例: #

@{
    var now = Page.Template.GetProductPaymentMethods(1);
}

UnavailableCashOnDeliveryByZipCode #

郵便番号を指定し、代引き不可地域か判定します。

型:(string zipCode) => bool #

例: #

@{
    var disallowed = Page.Template.UnavailableCashOnDeliveryByZipCode("1030014");
}

UnavailableSetHourByZipCode #

郵便番号を指定し、時間帯指定不可地域か判定します。

型:(string zipCode) => bool #

例: #

@{
    var disallowed = Page.Template.UnavailableSetHourByZipCode("1030014");
}

UserIsInRole #

ログインしているユーザがロールを保持しているか判定します。

型:(string roleName) => bool #

例: #

@{
    var hasRole = Page.Template.UserIsInRole("GoldMember");
}

AppendUserToRole #

ログインしているユーザにロールを付与します。

型:(string roleName, string roleParameter) => bool #

例: #

@{
    var result = Page.Template.AppendUserToRole("Campaign1", null);
}

RemoveUserFromRole #

ログインしているユーザからロールを取り除きます。

型:(string roleName) => bool #

例: #

@{
    var result = Page.Template.RemoveUserFromRole("Campaign1");
}

GetRoleParameter #

ログインしているユーザのロールパラメータ値を取得します。

型:(string roleName) => string #

例: #

@{
    var value = Page.Template.GetRoleParameter("Campaign1");
}

GetProductCampaigns #

内部商品IDを指定し、商品に紐づいている現在アクティブなキャンペーン情報を取得します。

型:(int productId) => IEnumerable #

例: #

@{
    var campaigns = Page.Template.GetProductCampaigns(1);
    /*
    {
        CampaignId: int,
        CampaignName: string,
        StartDate: DateTime,
        EndDate: DateTime,
        CampaignType: int,
        ApplyPrice: decimal?,
        BenefitItemCount: int,
        RemainItemCount: int,
        ConfigParameter: string
    }
    */
}

UserHasBacklog: #

ログインしているユーザに進行中の受注が残っているか判定します。

型:() => bool #

例: #

@{
    var hasBacklog = Page.Template.UserHasBacklog();
}

ZipCodeSearch #

郵便番号を検索します。存在しない場合はnullを返却します。

型:(string zipCode) => IEnumerable #

例: #

@{
    var address = Page.Template.ZipCodeSearch("1030014");
}

GetLoginUrl #

システム指定しているログインURLを取得します。

型:() => string #

例: #

@{
    var url = Page.Template.GetLoginUrl();
}

GetPrefecture #

都道府県名を番号から取得します。

型:(int prefId) => string #

例: #

@{
    var tokyo = Page.Template.GetPrefecture(13); // 東京都
}