Как добавить средство выбора загрузки файлов/данных в мою форму в Alfresco Share? Мне нужно нажать на мою кнопку, после чего должно появиться средство выбора файлов. Кто-нибудь может помочь?
Как добавить средство выбора загрузки файлов в мою форму Alfresco
Ответы (3)
Ознакомьтесь с кодом консоли управления пользователями, определенным в users.js. , который позволяет загружать CSV-файл, содержащий сведения о пользователе.
Сначала вам нужно определить элемент управления кнопки HTML, а затем добавить некоторый скрипт на стороне клиента, чтобы привязать его к элементу управления загрузкой.
Определите кнопку в HTML-шаблоне вашего компонента
<span class="yui-button yui-push-button" id="${args.htmlid?html}-uploadusers-button">
<span class="first-child"><button>${msg("button.uploaduser")}</button></span>
</span>
Затем создайте кнопку YUI в коде на стороне клиента (например, в вашей функции onReady()
)
var uploadUsersButton = Alfresco.util.createYUIButton(this, "uploadusers-button", this.onUploadUsersClick);
Затем определите обработчик нажатия кнопки как новую функцию прототипа вашего компонента - следующий пример взят из функции ConsoleUsers_onUploadUsersClick()
в users.js
, которую вам нужно будет изменить в соответствии с вашими потребностями.
onUploadUsersClick: function onUploadUsersClick()
{
// Force the use of the HTML (rather than Flash) uploader because there are issues with the
// Flash uploader in these circumstances when Sharepoint is being used. The Flash uploader
// picks up the wrong JSESSIONID cookie which causes the upload to fail.
if (!this.fileUpload)
{
this.fileUpload = Alfresco.util.ComponentManager.findFirst("Alfresco.HtmlUpload")
}
// Show uploader for single file select - override the upload URL to use appropriate upload service
var uploadConfig =
{
uploadURL: "api/people/upload.html",
mode: this.fileUpload.MODE_SINGLE_UPLOAD,
onFileUploadComplete:
{
fn: this.onUsersUploadComplete,
scope: this
}
};
this.fileUpload.show(uploadConfig);
// Make sure the "use Flash" tip is hidden just in case Flash is enabled...
var singleUploadTip = Dom.get(this.fileUpload.id + "-singleUploadTip-span");
Dom.addClass(singleUploadTip, "hidden");
Event.preventDefault(e);
}
Обратите внимание на использование параметра uploadURL
в объекте конфигурации. Вы должны установить это на URL-адрес пользовательского веб-скрипта репозитория, который вы создаете, который знает, как обрабатывать содержимое загруженного файла.
Пример загрузки пользователя также определяет метод onUsersUploadComplete()
, на который вы увидите ссылку. Вы можете реализовать здесь свой собственный метод компонента, чтобы предпринять соответствующие действия, такие как обновление пользовательского интерфейса на основе результатов загрузки.
Для создания формы необходимо поместить в путь три файла:
/Alfresco/Tomcat/shared/classes/alfresco/site-webscript/org/alfresco/components/dashlets
Там у вас должно быть:
yourCustomForm.get.desc.xml
yourCustomForm.get.html.ftl
yourCustomForm.get.js
в XML вы должны поместить что-то вроде этого:
<webscript>
<shortname>My Form</shortname>
<description>Form to upload new doc</description>
<family>dashlet</family>
<url>/components/dashlets/yourCustomForm</url>
<authentication>user</authentication>
</webscript>
FTL-файл:
<!-- Pre-requisite: flash-upload and html-upload components are also included on the page -->
<#assign fileUploadConfig = config.scoped["DocumentLibrary"]["file-upload"]!>
<#if fileUploadConfig.getChildValue??>
<#assign adobeFlashEnabled = fileUploadConfig.getChildValue("adobe-flash-enabled")!"true">
</#if>
<script type="text/javascript">//<![CDATA[
new Alfresco.getFileUploadInstance().setOptions(
{
adobeFlashEnabled: ${((adobeFlashEnabled!"true") == "true")?string}
});
//]]>
</script>
этот файл включает Flash- или HTML-версию формы загрузки в Share. (он уже существует, код представляет собой файлы с именем file-upload.get* в
/Alfresco/Tomcat/webapps/share/classes/alfresco/site-webscript/org/alfresco/components/upload directory
там вы также можете найти flash и HTML-код по умолчанию.
JS должен включать файл js для загрузки файла, поэтому:
<#include "../component.head.inc">
<!-- File-Upload -->
<@script type="text/javascript" src="${page.url.context}/res/components/upload/file-upload.js">
</@script>
очевидно, исходный файл-upload.js должен иметь правильный путь, поэтому, если вы работаете в общем каталоге, вы должны скопировать туда также файлы, упомянутые выше.
Надеюсь, это поможет. Я имею в виду Alfresco 4 Enterprise на RHEL 5.5, где мы реализовали аналогичную форму (на самом деле мы сделали дашлет, который создает контент, а не загрузку, но это почти та же концепция. Взгляните сюда: https://forums.alfresco.com/en/viewtopic.php?f=48&t=41486
Чтобы отобразить новый блок в блоке действий с документом на странице сведений о документе, вам необходимо добавить новый компонент на страницу сведений о документе. В site-data\template-instances\document-details.xml
добавьте
<component>
<region-id>document-uploadcustom</region-id>
<url>/components/documentUploadCustom</url>
</component>
Пусть /components/documentUploadCustom
будет вашим URL-адресом веб-скрипта.
В templates\org\alfresco\document-details.ftl
добавьте регион для нового компонента, например <@region id="document-uploadcustom" scope="template"/>
Ваш код может быть следующим:
<@region id="document-actions" scope="template"/>
<@region id="document-tags" scope="template"/>
<@region id="document-links" scope="template"/>
<@region id="document-metadata" scope="template"/>
<@region id="document-uploadcustom" scope="template"/>
<@region id="document-permissions" scope="template"/>
<@region id="document-workflows" scope="template"/>
<@region id="document-versions" scope="template"/>
<@region id="document-publishing" scope="template"/>
Как загрузить файл, можно узнать из repo-toolbar.js
, onFileUpload
и file-upload.js
.