извлечение данных из многозначного типа данных в umbraco - PullRequest
0 голосов
/ 23 февраля 2019

Я использую Umbraco 7.13.1

Я создал пользовательский тип данных, и он работает хорошо.Но теперь мне нужно отобразить данные в шаблон для страницы.

Файл app_pluggin

js

angular.module('umbraco').controller('IBD_HeaderController', function ($scope) {

    $scope.model.value.Tag = $scope.model.value.Tag || "default value";
    $scope.model.value.HeadingText = $scope.model.value.HeadingText || "default value";

    console.log($scope.model);

    $scope.SetTag = function () {
        $scope.model.value.Tag = $scope.value.Tag
    };
});

html файл

<div class="IBD_CMS" ng-controller="IBD_HeaderController">
    <div>
        <input class="headingTextBox" type="text" ng-model="model.value.HeadingText" ng-change="SetHeading()">
    </div>
    <div class="HeadingTag">
        <label class="TagOption">
            <input type="radio" name="HeadingTag" value="h1" ng-model="model.value.Tag" ng-click="SetTag()">
            <span>H1</span>
        </label>
        <label class="TagOption">
            <input type="radio" name="HeadingTag" value="h2" ng-model="model.value.Tag" ng-click="SetTag()">
            <span>H2</span>
        </label>
        <label class="TagOption">
            <input type="radio" name="HeadingTag" value="h3" ng-model="model.value.Tag" ng-click="SetTag()">
            <span>H3</span>
        </label>
        <label class="TagOption">
            <input type="radio" name="HeadingTag" value="h4" ng-model="model.value.Tag" ng-click="SetTag()">
            <span>H4</span>
        </label>
        <label class="TagOption">
            <input type="radio" name="HeadingTag" value="h5" ng-model="model.value.Tag" ng-click="SetTag()">
            <span>H5</span>
        </label>
        <label class="TagOption">
            <input type="radio" name="HeadingTag" value="h6" ng-model="model.value.Tag" ng-click="SetTag()">
            <span>H6</span>
        </label>
    </div>
</div>

manifest

{
  propertyEditors:[
    {
      alias: "IBD.Heading",
      name: "Intelligence By Design Heading",
      editor: {
        view: "~/App_Plugins/IBD.Heading/IBD.Heading.View.html",
        valueType: "JSON"
      }
    }
  ],
  javascript: [
    "~/App_Plugins/IBD.Heading/IBD.Heading.js"
  ],
  css: [
    "~/App_Plugins/IBD.Heading/style.css"
  ]
}

Я могу установить информацию в редакторе содержимого, и она все сохраняется.

Моя проблема заключается в том, как вернуть ее в файл cshtml в виде 2 отдельных значений

т.е. Model.content.ComponentName.HeadingText Model.content.ComponentName.Tag

В настоящее время у меня есть

pageHeading = Model.Content.GetPropertyValue<string>("cartName");

, это возвращает

{"TAG": "H3", "HEADINGTEXT": "МОЯ КОРЗИНА"}

Я хочу это

pageHeading = Моя корзина pageHeadingTag = h3

Ответы [ 2 ]

0 голосов
/ 26 февраля 2019

Спасибо, eyecream решил, что прошлой ночью создал модель и контроллер, а затем вызвал функцию, которая десериализует строку в модель, которая будет возвращена обратно в файл cshtml.Ваш выглядит намного проще, но я хочу добавить больше переменных в плагин, чтобы сделать трек, так что я думаю, что мой будет делать работу в долгосрочной перспективе

0 голосов
/ 25 февраля 2019

Вы должны создать свой собственный класс C #, который представляет ваш объект, такой как

public class TagClass {
    public string TAG{get;set;}
    public string HEADINGTEXT{get;set;}
}

, а затем вы можете реализовать свой собственный конвертер значений свойств https://our.umbraco.com/documentation/extending/property-editors/value-converters https://skrift.io/articles/archive/custom-property-value-converters/

иливозможно просто десериализовать это:

var tagClass = JsonConvert.DeserializeObject<YourClass>(Model.Content.GetPropertyValue<string>("cartName"));
...