2012-06-13 27 views
9

Có ai biết nếu có thể trong một mẫu ghép để sử dụng một mục chuỗi trong gói và thực thi nó như thể là một mẫu dreamweaver? Và liệu bạn có áp dụng cùng một phương pháp cho các trung gian khác (như dao cạo) không?Thực hiện một mục trong gói dưới dạng mẫu Dreamweaver

Cảm ơn Đánh dấu

+0

Lớp gói có phương thức 'package.EvaluateExpression (biểu thức chuỗi)' có thể đáng để điều tra. –

Trả lời

5

Tôi sợ rằng sẽ không thể về chỉ cần bất kỳ mục trong Package, kể từ khi Engine hy vọng Template s phải dựa vào các mặt hàng Tridion.

Nếu mặt hàng mẫu của bạn dựa trên một mục Tridion, bạn có thể có thể nhận được khá xa bằng cách bắt đầu tại phương pháp Engine.GetMediator. Nếu không, bạn sẽ phải tìm cách nào đó để biến nó thành đối tượng Template hợp lệ.

Template template = ... 
IMediator mediator = engine.GetMediator(template); 
mediator.Transform(engine, template, package); 

Khi tôi có để tạo ra một đối tượng Component từ một khoản Tridion-có trụ sở tại Package, tôi thường làm một cái gì đó như thế này:

Component component = new Component(item.GetAsXmlDocument().DocumentElement, 
            engine.GetSession); 

tôi đã không cố gắng, nhưng hy vọng rằng bạn có thể làm tương tự cho một số Template - với điều kiện bạn bắt đầu với một Mục hợp lệ từ Gói đại diện cho một Mẫu để bắt đầu. Bạn có thể sao chép XML từ một mục hiện có hoặc tìm một số cách khác để giả mạo nó.

Nếu bạn làm việc này, nó sẽ hoạt động trên tất cả các loại mẫu đã đăng ký. Các Engine cung cấp không có điều trị đặc biệt cho các loại đi kèm với Tridion.

+1

Cảm ơn Frank vì con trỏ. Sẽ nhìn vào đó. Yours –

+0

Tôi phát hiện ra ngày hôm nay rằng 'engine.GetMediator' không được công khai, do đó bạn không thể tiếp cận nó. Tôi đã chỉ đơn giản là instantiating 'DreamweaverMediator' trong TBB của tôi và đi qua trong đối tượng' TemplateBuildingBlock' được xây dựng trước của tôi. Tôi sẽ cập nhật mã ở trên nếu nhiều người thấy nó hữu ích. –

5

Tôi nghi ngờ điều này là không thể.

Package.EvaluateExpression có thể hữu ích, nhưng như tên cho thấy nó sẽ chỉ làm việc trên các biểu thức, không đoạn lớn của mã với các biểu thức nhúng (ví dụ: TEL)

Engine.GetMediator hy vọng một Template và trả về phù hợp Mediator cho nó. Vấn đề của bạn là giao diện IMediator chỉ xác định phương thức Transform, yêu cầu Engine, một số TemplatePackage.

Tôi không thể nghĩ ra bất kỳ cách thanh lịch nào xung quanh những điều này. Có thể viết Mediator của riêng bạn, nhưng điều đó vẫn sẽ mong đợi một gói, không phải là một chuỗi, vì vậy bạn phải lưu trữ đầu tiên chuỗi dựa trên Item từ một TBB khác.

Lời khuyên của tôi: Có vẻ như bạn cần quay lại bảng vẽ và tìm giải pháp thay thế cho vấn đề của bạn.

+1

Tôi đã giả định rằng Mark muốn gọi "string as a DWT" từ bên trong một ITemplate hoặc Mediator hiện có, vì anh ta đang đề cập đến nó là một mục trong gói. Nếu đúng như vậy, anh ta có thể đơn giản truyền đối tượng Engine và Package hiện có của mình cho phương thức Mediator.Transform. Vấn đề chính mà tôi có thể thấy là trong việc biến Item string đó thành một cá thể Template.Nhưng đó là một điểm tốt, vì vậy tôi sẽ cập nhật câu trả lời của tôi để xây dựng. –

+1

Tôi nghĩ rằng có thể tạo một đối tượng ComponentTemplate hoặc PageTemplate mới và chuyển qua một biểu diễn XML hợp lệ của mẫu. Tuy nhiên, bạn vẫn không thể tạo ra một TBB mới từ mục chuỗi và thêm nó vào XML của mẫu mới của bạn. Tôi hy vọng rằng TBB sẽ cần phải được cứu. –

Các vấn đề liên quan