Admin Admin
Сообщения : 74 Очки : 71 Дата регистрации : 2010-08-23
| Тема: Attachment файлов к записи (SugarCRM 5.0) Ср Сен 08, 2010 6:49 pm | |
| Бывает, что к записи необходимо прикрепить файл. Это можно сделать, если у модуля есть субпанель "Activities", которая позволяет прикрепить "Notes" к записи. Есть второй способ, разместить на форме стандартное поле загрузки файла с кнопкой "обзор". Конечно же описанный мною способ является лишь приблизительным, и уж он вовсе никак не окончательный...это лишь мои наработки в этом вопросе. Я рассчитываю что возможно он подтолкнет Вас к разработке своего, более оптимального решения. Тем более разработчики добавили прикрипление файлов в SugarCRM 5.1 Но лишь через студию. И так, для осуществления задуманного нам потребуется изменить следующие файлы: 1. /modules/module_name/vardefs.php; 2. /modules/module_name/module_name.php; 3. /modules/module_name/metadata/editviewdefs.php; 4. /modules/module_name/metadata/detailviewdefs.php; 5. /modules/module_name/language/*.lang.php; 6. Файл, лежащий в корневой директории: download.php; Vardefs.php Чтобы добавить в таблицу БД нужные поля, вставляем следующий код: - Код:
-
'document_name' => array ( 'name' => 'document_name', 'vname' => 'LBL_DOCUMENT_NAME', 'type' => 'varchar', 'len' => '255', 'required'=>true ), 'filename' => array ( 'name' => 'filename', 'vname' => 'LBL_FILENAME', 'type' => 'varchar', 'required'=>true, 'len' => '255', ), 'file_ext' => array ( 'name' => 'file_ext', 'vname' => 'LBL_FILE_EXTENSION', 'type' => 'varchar', 'len' => '25', ), 'file_mime_type' => array ( 'name' => 'file_mime_type', 'vname' => 'LBL_MIME', 'type' => 'varchar', 'len' => '100', ), 'uploadfile' => array ( 'name'=>'uploadfile', 'vname' => 'LBL_FILENAME', 'type' => 'file', 'source' => 'non-db', ), 'active_date' => array ( 'name' => 'active_date', 'vname' => 'LBL_DOC_ACTIVE_DATE', 'type' => 'date', ), Поле active_date необязательное. Module_name.php К свойствам класса добавить: - Код:
-
var $document_name; var $filename; var $file_ext; var $file_mime_type; var $uploadfile; var $active_date; var $file_url; var $file_url_noimage; Затем, к методам: - Код:
-
function save($check_notify=false){ $move=false; $upload_file = new UploadFile('uploadfile'); if (isset($_FILES['uploadfile']) && $upload_file->confirm_upload()) { $this->filename = $upload_file->get_stored_file_name(); $this->file_mime_type = $upload_file->mime_type; $this->file_ext = $upload_file->file_ext; $move=true; } parent::save($check_notify); if ($move) { $upload_file->final_move($this->id); } return $this->id; //handleRedirect($return_id, $this->object_name); } function fill_in_additional_detail_fields(){ global $theme; global $current_language; global $timedate; global $app_list_strings; $this->uploadfile = $this->filename; $mod_strings = return_module_language($current_language, $this->object_name); global $img_name; global $img_name_bare; if (!$this->file_ext) { $img_name = "themes/".$theme."/images/".strtolower($this->file_ext)."_image_inline.gif"; $img_name_bare = strtolower($this->file_ext)."_image_inline"; } //set default file name. if (!empty ($img_name) && file_exists($img_name)) { $img_name = $img_name_bare; } else { $img_name = "def_image_inline"; //todo change the default image. } //$this->file_url = "<a href='index.php?entryPoint=download&id=".basename(UploadFile :: get_url($this->filename, $this->id))."&type=file&module=".$this->table_name."target='_blank'>".get_image('themes/'.$theme.'/images/'.$img_name, 'alt="'.$mod_strings['LBL_LIST_VIEW_DOCUMENT'].'" border="0"')."</a>"; $this->file_url_noimage = basename(UploadFile :: get_url($this->filename, $this->id)); if(!empty($this->status_id)) { $this->status = $app_list_strings['document_status_dom'][$this->status_id]; } } editviewdefs.php Теперь разместим наши поля на форме редактирования и добавления записи. После - Код:
-
'templateMeta' => array( и перед - Код:
-
'maxColumns' => '2', добавить: - Код:
-
'form' => array('enctype'=>'multipart/form-data', 'hidden'=>array()), После массива 'widths' добавить массив: - Код:
-
'javascript' => '<script type="text/javascript" src="include/javascript/popup_parent_helper.js?s={$SUGAR_VERSION}&c={$JS_CUSTOM_VERSION}"> </script> <script type="text/javascript" src="include/jsolait/init.js?s={$SUGAR_VERSION}&c={$JS_CUSTOM_VERSION}"></script> <script type="text/javascript" src="include/jsolait/lib/urllib.js?s={$SUGAR_VERSION}&c={$JS_CUSTOM_VERSION}"></script> <script type="text/javascript" src="include/javascript/jsclass_base.js"></script> <script type="text/javascript" src="include/javascript/jsclass_async.js"></script> <script type="text/javascript" src="modules/Documents/documents.js?s={$SUGAR_VERSION}&c={$JS_CUSTOM_VERSION}"></script>', И потом, примерно на 65 строку: - Код:
-
array ( 'document_name', ), array ( array('name'=>'uploadfile', 'customCode' => '{if $fields.id.value!=""} {assign var="type" value="hidden"} {else} {assign var="type" value="file"} {/if} <<input name="uploadfile" type = {$type} size="30" maxlength="" onchange="setvalue(this);" value="{$fields.filename.value}">{$fields.filename.value}', 'displayParams'=>array('required'=>true), ), ), detailviewdefs.php Разместим ссылку для скачивания файла и имя файла на форме просмотра записи: - Код:
-
array ( array ( 'name' => 'document_name', 'label' => 'LBL_DOC_NAME', ), ), array ( array ( 'name' => 'uploadfile', 'displayParams' => array('link'=>'uploadfile', 'id'=>'id'), ), ),
*.lang.php Теперь необходимо для созданных полей добавить метки: - Код:
-
'LBL_DOCUMENT_ID' => 'Document ID', 'LBL_DOCUMENT_NAME' => 'Document Name', 'LBL_MIME' => 'Mime Type', 'LBL_REVISION' => 'Revision', 'LBL_DOCUMENT' => 'Related Document', 'LBL_LATEST_REVISION' => 'Latest Revision', 'LBL_CHANGE_LOG'=> 'Change Log', 'LBL_FILE_EXTENSION' => 'File Extension', donwload.php И наконец, чтобы мы могли скачать добавленный файл, примерно после 66-ой строки, после - Код:
-
} elseif(strtolower($_REQUEST['type']) == 'notes') { $query = "SELECT filename name FROM notes WHERE id = '" . $_REQUEST['id'] ."'"; добавляем: - Код:
-
} elseif(strtolower($_REQUEST['type']) == 'module_name') { $query = "SELECT filename name FROM module_name WHERE id = '" . $_REQUEST['id'] ."'"; Repair модуля. Соглашаемся на предложение добавить в базу поля. Готово. | |
|