Обрабатывать контент в usercontrols через CMS? - PullRequest
3 голосов
/ 28 ноября 2011

Есть ли способ в Composite C1 управлять статическим текстом в пользовательских контролах ASP.NET, используемых на страницах через бэкэнд?

1 Ответ

3 голосов
/ 28 ноября 2011

В этом ответе я предполагаю, что вы хотели бы, чтобы «статический текст» поддерживался с помощью визуального редактора (HTML-документ), позволяя вашим пользователям выполнять заголовки, стилизацию, полужирный и т. Д. Если вы просто хотите простобольшое текстовое поле, которое можно упростить.

Начните с создания нового глобального типа данных в перспективе Data - назовите его (в приведенном ниже примере кода я назвал его Maw.Content) и задайте ему два поля:

  • FieldKey string (32) (виджет: текстовое поле по умолчанию)
  • FieldContent строка (неограниченно) (Widget: Composite.Widgets.String.VisualXhtmlEditor)

После сохранения нового типа данных вы можете добавить в него «записи» - и указать ключ поля и связанный контент.

Это должно позаботиться об управлении контентом - пользовательский интерфейс должен быть довольно удобным для пользователя.Вы можете щелкнуть правой кнопкой мыши тип данных в дереве и использовать команду «Показать в перспективе содержимого», которая отобразит ваш тип данных в Content |Элементы сайта.Таким образом, ваши пользователи вообще не должны использовать перспективу данных.

Попробуйте ограничить доступ пользователей к папке данных просто «Редактировать», если вам не нужны пользователи для добавления / удаления элементов.Щелкните правой кнопкой мыши папку, содержащую элементы данных, и выберите «Редактировать разрешения».

Вывод XHTML из именованного поля В ваших пользовательских элементах управления вы можете получить HTML, связанный с конкретным FieldKey, например так:

using System;
using System.Linq;
using System.Xml.Linq;
using System.Web.UI;
using Composite.Data;
using Composite.Core.Xml;

public partial class Default2 : System.Web.UI.Page
{
    protected void Page_Load(object sender, EventArgs e)
    {
        string fieldKey = "SomeKeyHere";
        string xhtmlString;

        using( var connection = new DataConnection())
        {
            xhtmlString = connection.Get<Maw.Content>().Where(f => f.FieldKey == fieldKey).Select(f => f.FieldContent).FirstOrDefault();
        }

        if (xhtmlString != null)
        {
            XhtmlDocument htmlDoc = XhtmlDocument.Parse(xhtmlString);
            foreach (XNode bodyNode in htmlDoc.Body.Nodes())
            {
                this.Controls.Add( new LiteralControl(bodyNode.ToString()));
            }
        }
        else
        {
            this.Controls.Add(new LiteralControl("Unknown FieldKey: " + fieldKey));            
        }

    }
}
...