Attachment файлов к записи

Версия: SugarCRM 5.0

Бывает, что к записи необходимо прикрепить файл. Это можно сделать, если у модуля есть субпанель "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 модуля. Соглашаемся на предложение добавить в базу поля. Готово.


Раздел: Веб-Разработка Рубрика: SugarCRM


Добавлена: 23-01-2009 | Изменена: 23-01-2009 | Пользователем: olga | Просмотров: 17765


Оставить комментарий



        
        

Капча *

                 Captcha
                          

        

Комментарий будет опубликован после проверки модератором

Для подсветки синтаксиса исходный код следует обрамлять следующими тэгами
<pre><code class="синтаксис" >код</code></pre>
Подерживаются следующие: cpp php javascript sql html-xml css ini