在内容树中手动添加新文件(cms.file)时,我希望能够使用上传文件的名称填充文档名称和标题。这可能吗 ?如果是这样,任何人都可以指出我在如何实施方面的正确方向。感谢。
答案 0 :(得分:0)
您可以附加到例如。 DocumentEvents.Insert.Before
事件并检查页面类型是否为cms.file
并执行自定义操作。您可以了解有关处理全局事件here的更多信息。
您的代码可能类似于:
using System;
using CMS.Base;
using CMS.DocumentEngine;
[ChangeFileNameAttibute]
public partial class CMSModuleLoader
{
private class ChangeFileNameAttibute : CMSLoaderAttribute
{
public override void Init()
{
DocumentEvents.Insert.Before += Insert_Before;
}
void Insert_Before(object sender, DocumentEventArgs e)
{
if (e.Node.ClassName.ToLower() == "cms.file")
{
e.Node.doSomething(); // You can edit document here
}
}
}
}
答案 1 :(得分:0)
这可以通过克隆用于在Kentico实例中创建位于此处/CMSModules/Content/CMSDesk/New/NewFile.aspx
的新文件的页面来完成。最佳实践状态是将其克隆到您自己的目录并进行所需的更改。
我过去所做的是修改ProcessFileUploader()
和ProcessDirectUploader()
方法,将值设置提取到单个函数中。然后更新上面的那些方法,使用新调用的方法设置那些重要的值。
新功能:
private void SetFileFieldValues(ref TreeNode node, string fileName)
{
int maxFileNameLength = FileNameFieldInfo.Size;
if (fileName.Length > maxFileNameLength)
{
fileName = fileName.Substring(0, maxFileNameLength);
}
node.DocumentName = fileName;
if (node.ContainsColumn("FileName"))
{
node.SetValue("FileName", fileName);
}
if (node.ContainsColumn("FileLongName"))
{
string fileLongName = txtFileLongName.Text.Trim();
fileLongName = TextHelper.LimitLength(fileLongName, txtFileLongName.MaxLength);
node.SetValue("FileLongName", fileLongName);
}
if (node.ContainsColumn("FileShortName"))
{
string fileShortName = txtFileShortName.Text.Trim();
fileShortName = TextHelper.LimitLength(fileShortName, txtFileShortName.MaxLength);
node.SetValue("FileShortName", fileShortName);
}
if (node.ContainsColumn("FileDescription"))
{
string fileDescription = txtFileDescription.Text.Trim();
fileDescription = TextHelper.LimitLength(fileDescription, txtFileDescription.MaxLength);
node.SetValue("FileDescription", fileDescription);
}
if(node.ContainsColumn("DocumentSearchExcluded"))
{
bool excludeFromSearch = ValidationHelper.GetBoolean(cbxExcludeFromSearch.Checked, false);
node.SetValue("DocumentSearchExcluded", excludeFromSearch);
}
}
更新方法:
protected void ProcessFileUploader()
{
TreeNode node = DocumentManager.Node;
// Create new document
string fileName = Path.GetFileNameWithoutExtension(FileUpload.FileName);
SetFileFieldValues(ref node, fileName);
node.SetValue("FileAttachment", Guid.Empty);
// Set default template ID
node.SetDefaultPageTemplateID(DataClass.ClassDefaultPageTemplateID);
// Ensures documents consistency (blog post hierarchy etc.)
DocumentManager.EnsureDocumentsConsistency();
// Insert the document
DocumentHelper.InsertDocument(node, DocumentManager.ParentNode, DocumentManager.Tree);
// Add the file
DocumentHelper.AddAttachment(node, "FileAttachment", FileUpload.PostedFile, DocumentManager.Tree, ResizeToWidth, ResizeToHeight, ResizeToMaxSideSize);
}
另一个
protected void ProcessDirectUploader()
{
TreeNode node = DocumentManager.Node;
// Create new document
string fileName = Path.GetFileNameWithoutExtension(ucDirectUploader.AttachmentName);
SetFileFieldValues(ref node, fileName);
node.SetValue("FileAttachment", Guid.Empty);
// Set default template ID
node.SetDefaultPageTemplateID(DataClass.ClassDefaultPageTemplateID);
// Ensures documents consistency (blog post hierarchy etc.)
DocumentManager.EnsureDocumentsConsistency();
// Insert the document
DocumentHelper.InsertDocument(node, DocumentManager.ParentNode, DocumentManager.Tree);
// Set the attachment GUID later - important when document is under workflow and using check-in/check-out
node.SetValue("FileAttachment", ucDirectUploader.Value);
}
然后最后但并非最不重要的是,您需要更新文件页面类型(或创建自己的克隆)并在页面类型定义中添加新页面的文件位置。
这可能不是您需要的,但应该让您非常接近您需要做的事情。