[TUTORIAL] Módulo Rapid Image Uploader (1.5.1)
Enviado: 03 Ago 2011, 12:59
Procurei um Módulo gratuito que facilitasse a seleção e a inclusão de várias fotos ao cadastrar um produto e encontrei o Rapid Image Uploader (1.5.1). O donwload dele pode ser feito na página http://www.opencart.com/index.php?route ... order=DESC, porém, o desenvolvedor adverte que alguns arquivos são alterados e se você tiver algum Módulo instalado poderá ter problemas. Se estiver com a loja "limpa", sem nenhum Módulo instalado aí não terá problemas, tendo apenas que fazer o upload dos arquivos para as respectivas pastas da loja.
Como eu já tinha feito várias alterações em vários arquivos, então, com receio de perdê-las eu fui verificando cada arquivo do Módulo com o original da loja para ver quais e onde as alterações foram realizadas. Assim, pude alterar os arquivos modificados que eu tenho sem perder as alterações que já realizei nos arquivos.
Bem, este Módulo basicamente faz o seguinte:
1- Lhe dá a opção de escolher e inserir várias fotos de uma só vez(usando o Ctrl ou o Shift pressionados) ao cadastrar um novo produto ou ao editar um que já existe na loja. A pasta padrão onde as fotos, ou imagens, são salvas na loja é a image/data. Para alterar o endereço da pasta onde as fotos, ou imagens, serão salvas na loja é preciso alterar o arquivo agile_uploader.php, mas depois falamos sobre isso.
2- As fotos são redimensionadas antes de serem enviadas à loja. O redimensionamento padrão é 500x375 mas também pode ser alterado, e veremos isso depois.
3- Você pode escolher qualquer foto diretamente da lista de fotos para ser a "principal" do produto.
Vamos então a lista dos arquivos que são incluídos e os que são editados:
Arquivos incluídos:
1º) Fazer backup de todos os arquivos a serem editados, porque se tiver algum problema é só restaurá-los.
2º) Utilizar o programa notepad++ para realizar a edição dos arquivos, porque o Dreamweaver altera a codificação de alguns arquivos fazendo aparecer caracteres nas páginas.
Se você não tem o notepad++, baixe-o no link http://download.tuxfamily.org/notepadpl ... .1.bin.zip e após descompactar o arquivo, abra o executável notepad++.exe da pasta "unicode", porque esta versão lhe dá a opção de alterar o idioma do programa para o português.
Vamos às edições, prestando bastante atenção nas instruções de Adicione Depois, Adicione Antes e Substituir:
>>> Abra o arquivo admin\controller\catalog\category.php e ache:
Espero ter ajudado.
Abraço.
Como eu já tinha feito várias alterações em vários arquivos, então, com receio de perdê-las eu fui verificando cada arquivo do Módulo com o original da loja para ver quais e onde as alterações foram realizadas. Assim, pude alterar os arquivos modificados que eu tenho sem perder as alterações que já realizei nos arquivos.
Bem, este Módulo basicamente faz o seguinte:
1- Lhe dá a opção de escolher e inserir várias fotos de uma só vez(usando o Ctrl ou o Shift pressionados) ao cadastrar um novo produto ou ao editar um que já existe na loja. A pasta padrão onde as fotos, ou imagens, são salvas na loja é a image/data. Para alterar o endereço da pasta onde as fotos, ou imagens, serão salvas na loja é preciso alterar o arquivo agile_uploader.php, mas depois falamos sobre isso.
2- As fotos são redimensionadas antes de serem enviadas à loja. O redimensionamento padrão é 500x375 mas também pode ser alterado, e veremos isso depois.
3- Você pode escolher qualquer foto diretamente da lista de fotos para ser a "principal" do produto.
Vamos então a lista dos arquivos que são incluídos e os que são editados:
Arquivos incluídos:
- admin/controller/common/agile_uploader.php
- admin/view/image/file-icon.png
- admin/view/image/trash-icon.png
- admin/view/image/add-images.jpeg
- admin/view/javascriptjquery/agile-uploader-3.0.js
- admin/view/javascriptjquery/jquery.flash.min.js
- admin/view/javascriptjquery/agile-uploader.swf
- admin/controller/catalog/category.php
- admin/controller/catalog/product.php
- admin/language/portuguese-br/catalog/category.php
- admin/language/portuguese-br/catalog/product.php
- admin/view/javascript/jquery/agile-uploader-3.0.js
- admin/view/stylesheet/stylesheet.css
- admin/view/template/catalog/category_form.tpl
- admin/view/template/catalog/product_form.tpl
- catalog/controller/product/product.php
- catalog/view/theme/default/template/product/product.tpl
1º) Fazer backup de todos os arquivos a serem editados, porque se tiver algum problema é só restaurá-los.
2º) Utilizar o programa notepad++ para realizar a edição dos arquivos, porque o Dreamweaver altera a codificação de alguns arquivos fazendo aparecer caracteres nas páginas.
Se você não tem o notepad++, baixe-o no link http://download.tuxfamily.org/notepadpl ... .1.bin.zip e após descompactar o arquivo, abra o executável notepad++.exe da pasta "unicode", porque esta versão lhe dá a opção de alterar o idioma do programa para o português.
Vamos às edições, prestando bastante atenção nas instruções de Adicione Depois, Adicione Antes e Substituir:
>>> Abra o arquivo admin\controller\catalog\category.php e ache:
Código: Selecionar todos
Adicione Depois, em uma nova lina:
$this->data['tab_design'] = $this->language->get('tab_design'); Código: Selecionar todos
>>> Abra o arquivo admin\controller\catalog\product.php e ache:
$this->data['text_add_image'] = $this->language->get('text_add_image');
$this->data['text_upload_server'] = $this->language->get('text_upload_server');
$this->data['image_path'] = HTTP_IMAGE; Código: Selecionar todos
Adicione Depois, em uma nova linha:
$this->data['entry_layout'] = $this->language->get('entry_layout'); Código: Selecionar todos
Ache:
$this->data['entry_main_image'] = $this->language->get('entry_main_image');
$this->data['text_add_images'] = $this->language->get('text_add_images');
$this->data['text_upload_server'] = $this->language->get('text_upload_server'); Código: Selecionar todos
Substitua por:
} else {
$this->data['weight_class_id'] = $this->config->get('config_weight_class_id');
} Código: Selecionar todos
Ache:
} elseif (isset($weight_info)) {
$this->data['weight_class_id'] = $this->config->get('config_weight_class_id');
} else {
$this->data['weight_class_id'] = '';
} Código: Selecionar todos
Substitua por:
} else {
$this->data['length_class_id'] = $this->config->get('config_length_class_id');
} Código: Selecionar todos
Ache:
} elseif (isset($length_info)) {
$this->data['length_class_id'] = $this->config->get('config_length_class_id');
} else {
$this->data['length_class_id'] = '';
} Código: Selecionar todos
Adicione Depois, em uma nova linha:
$this->data['no_image'] = $this->model_tool_image->resize('no_image.jpg', 100, 100); Código: Selecionar todos
>>> Abra o arquivo admin/language/portuguese-br/catalog/category.php e Adicione no final da seção // Text as linhas:
$this->data['image_path'] = HTTP_IMAGE; Código: Selecionar todos
>>> Abra o arquivo admin/language/portuguese-br/catalog/product.php e Adicione no final da seção // Text as linhas:
$_['text_add_image'] = 'Adicionar Imagem';
$_['text_upload_server'] = 'Upload para a Loja'; Código: Selecionar todos
Adicione no final da seção // Entry a linha:
$_['text_add_images'] = 'Adicionar Imagem(ns)';
$_['text_upload_server'] = 'Upload para a Loja'; Código: Selecionar todos
>>> Abra o arquivo admin/view/javascript/jquery/agile-uploader-3.0.js e ache:
$_['entry_main_image'] = 'Imagem Principal'; Código: Selecionar todos
Substitua pelo texto traduzido de sua preferência. Sugestão:
maxPostSizeMessage: 'Attachments exceed maximum size limit.',
maxFileMessage: 'Μέγιστο όριο αρχείων, try removing a file first.',
duplicateFileMessage: 'This file has already been attached.',
notReadyMessage: 'The form can not be submitted yet because there are still files being resized.',
removeAllText: 'remove all' Código: Selecionar todos
>>> Abra o arquivo admin\view\stylesheet\stylesheet.css, e na última linha ache:
maxPostSizeMessage: 'O(s) arquivo(s) anexado(s) excede(m) a capacidade máxima permitida.',
maxFileMessage: 'A quantidade máxima de arquivos anexados foi excedida. Remova alguns arquivos e tente novamente.',
duplicateFileMessage: 'Este arquivo já foi anexado.',
notReadyMessage: 'O upload não pode ser feito porque ainda existem arquivos sendo redimensionados',
removeAllText: 'Remover Tudo' Código: Selecionar todos
Adicione Depois, em uma nova linha:
} Código: Selecionar todos
>>> Abra o arquivo admin\view\template\catalog\category_form.tpl e ache:
.agileUploaderFilePreview {
float: left;
width: 20%;
height: 50px;
margin: 0px;
text-align: left;
}
.agileUploaderFileSize {
float: left;
width: 10%;
margin: 0px;
text-align: left;
}
.agileUploaderFileName {
float: left;
width: 50%;
text-align: left;
margin: 0px;
}
.agileUploaderRemoveFile {
width: 20%;
float: left;
text-align: right;
margin: 0px;
display: block;
}
#agileUploaderInfo {
width: 100%;
font-size: 11px;
font-family: Helvetica, sans-serif;
display: block;
height: 200px;
padding: 0px;
margin: 0px 0px 4px 0px;
overflow: auto;
/* background: #444;*/
border: 1px solid #ddd;
}
#agileUploaderFileList {
list-style: none;
margin: 0px;
padding: 0px;
text-indent: 0px;
display: block;
}
#agileUploaderFileList li {
list-style: none;
clear: left;
margin: 0px;
padding: 2px 6px 2px 2px;
display: block;
overflow: hidden;
text-indent: 0px;
background: #ccc;
border-bottom: solid 1px #444;
}
#agileUploaderFileList li.alt {
background: #eee;
}
.agileUploaderCurrentProgress {
height: 50px;
width: 1%;
background: #000;
}
.agileUploaderRemoveFile a, .agileUploaderRemoveFile a:hover {
text-decoration: none;
border: 0px;
}
.agileUploaderRemoveFile a img {
border: 0px;
}
#agileUploaderAttachArea {
width: 100%;
height: 10px;
}
#agileUploaderMessages {
font-size: 12px;
color: #bf0000;
font-family: Helvetica, sans-serif;
width: 350px;
float: left;
margin: 0px 0px 0px 4px;
text-align: right;
}
#agileUploaderSWF, #agileUploaderEMBED {
float: left;
width:50px;
height:45px;
}
#agileUploaderRemoveAll {
height: 14px;
text-align: right;
width: 100%;
font-family: Helvetica, sans-serif;
}
#agileUploaderRemoveAll a {
color: #555;
font-size: 11px;
}
#agileUploaderRemoveAll a:hover {
color: #000;
}
.agileUploaderSingleMessages {
clear: left !important;
text-align: left !important;
}
#agileUploaderInfoContainer {
float: left;
width: 148px;
margin-right: 5px;
}
#agileUploaderProgressBar {
clear: left;
width: 0px;
height: 2px;
margin: 0px;
padding: 0px;
}
#agileUploaderFileInputText {
width: 100%;
} Código: Selecionar todos
Adicione Antes, em uma nova linha:
<div id="tab-data">Código: Selecionar todos
Ache:
<div id="tab-design">
<table class="list">
<thead>
<tr>
<td class="left"><?php echo $entry_store; ?></td>
<td class="left"><?php echo $entry_layout; ?></td>
</tr>
</thead>
<tbody>
<tr>
<td class="left"><?php echo $text_default; ?></td>
<td class="left"><select name="category_layout[0][layout_id]">
<option value=""></option>
<?php foreach ($layouts as $layout) { ?>
<?php if (isset($category_layout[0]) && $category_layout[0] == $layout['layout_id']) { ?>
<option value="<?php echo $layout['layout_id']; ?>" selected="selected"><?php echo $layout['name']; ?></option>
<?php } else { ?>
<option value="<?php echo $layout['layout_id']; ?>"><?php echo $layout['name']; ?></option>
<?php } ?>
<?php } ?>
</select></td>
</tr>
</tbody>
<?php foreach ($stores as $store) { ?>
<tbody>
<tr>
<td class="left"><?php echo $store['name']; ?></td>
<td class="left"><select name="category_layout[<?php echo $store['store_id']; ?>][layout_id]">
<option value=""></option>
<?php foreach ($layouts as $layout) { ?>
<?php if (isset($category_layout[$store['store_id']]) && $category_layout[$store['store_id']] == $layout['layout_id']) { ?>
<option value="<?php echo $layout['layout_id']; ?>" selected="selected"><?php echo $layout['name']; ?></option>
<?php } else { ?>
<option value="<?php echo $layout['layout_id']; ?>"><?php echo $layout['name']; ?></option>
<?php } ?>
<?php } ?>
</select></td>
</tr>
</tbody>
<?php } ?>
</table>
</div>Código: Selecionar todos
Substitua por:
</div>
<div id="tab-design">
<table class="list">
<thead>
<tr>
<td class="left"><?php echo $entry_store; ?></td>
<td class="left"><?php echo $entry_layout; ?></td>
</tr>
</thead>
<tbody>
<tr>
<td class="left"><?php echo $text_default; ?></td>
<td class="left"><select name="category_layout[0][layout_id]">
<option value=""></option>
<?php foreach ($layouts as $layout) { ?>
<?php if (isset($category_layout[0]) && $category_layout[0] == $layout['layout_id']) { ?>
<option value="<?php echo $layout['layout_id']; ?>" selected="selected"><?php echo $layout['name']; ?></option>
<?php } else { ?>
<option value="<?php echo $layout['layout_id']; ?>"><?php echo $layout['name']; ?></option>
<?php } ?>
<?php } ?>
</select></td>
</tr>
</tbody>
<?php foreach ($stores as $store) { ?>
<tbody>
<tr>
<td class="left"><?php echo $store['name']; ?></td>
<td class="left"><select name="category_layout[<?php echo $store['store_id']; ?>][layout_id]">
<option value=""></option>
<?php foreach ($layouts as $layout) { ?>
<?php if (isset($category_layout[$store['store_id']]) && $category_layout[$store['store_id']] == $layout['layout_id']) { ?>
<option value="<?php echo $layout['layout_id']; ?>" selected="selected"><?php echo $layout['name']; ?></option>
<?php } else { ?>
<option value="<?php echo $layout['layout_id']; ?>"><?php echo $layout['name']; ?></option>
<?php } ?>
<?php } ?>
</select></td>
</tr>
</tbody>
<?php } ?>
</table>
</div>
</form>
</div>
</div>
</div>
<script type="text/javascript" src="view/javascript/ckeditor/ckeditor.js"></script>Código: Selecionar todos
>> Abra o arquivo admin\view\template\catalog\product_form.tpl, ache e EXCLUA:
</form>
<form id="multipleDemo" enctype="multipart/form-data">
<h2><?php echo $text_add_image; ?></h2>
<div id="multiple"></div>
</form>
<a class="button" onClick="document.getElementById('agileUploaderSWF').submit();"><span><?php echo $text_upload_server; ?></span></a>
</div>
</div>
</div>
</div>
<script type="text/javascript" src="view/javascript/ckeditor/ckeditor.js"></script>
<script type="text/javascript" src="view/javascript/jquery/jquery.flash.min.js"></script>
<script type="text/javascript" src="view/javascript/jquery/agile-uploader-3.0.js"></script>
<script type="text/javascript">
$('#multiple').agileUploader({
flashSrc: 'view/javascript/jquery/agile-uploader.swf',
formId: 'multipleDemo',
flashVars: {
firebug: false,
return_submit_response: true,
form_action: 'controller/common/agile_uploader.php',
file_limit: 1,
file_filter: '*.jpg;*.jpeg;*.gif;*.png;*.JPG;*.JPEG;*.GIF;*.PNG',
file_filter_description: 'Image Files',
max_width: 500,
max_height: 375,
max_post_size: (500 * 375),
preview_max_height: 80,
preview_max_width: 80,
button_up:'view/image/add-images.jpeg',
button_over:'view/image/add-images.jpeg',
button_down:'view/image/add-images.jpeg'
},
removeIcon: 'view/image/trash-icon.png',
genericFileIcon: 'view/image/file-icon.png'
});
</script>
<script type="text/javascript"><!--
function addImages(image_name) {
var ext = image_name.substr(image_name.lastIndexOf('.'));
var name = image_name.substr(0, image_name.lastIndexOf('.'));
var im_thumb = name + '-100x100' + ext;
$('#image').val('data/' + image_name);
$('#preview').replaceWith('<img src="<?php echo $image_path; ?>' + 'cache/data/' + im_thumb + '" alt="" id="preview" class="image" onclick="image_upload(\'image\', \'preview\');" />');
}
//--></script>Código: Selecionar todos
Ache:
<div id="tab-image">
<table id="images" class="list">
<thead>
<tr>
<td class="left"><?php echo $entry_image; ?></td>
<td></td>
</tr>
</thead>
<?php $image_row = 0; ?>
<?php foreach ($product_images as $product_image) { ?>
<tbody id="image-row<?php echo $image_row; ?>">
<tr>
<td class="left"><img src="<?php echo $product_image['preview']; ?>" alt="" id="preview<?php echo $image_row; ?>" class="image" onclick="image_upload('image<?php echo $image_row; ?>', 'preview<?php echo $image_row; ?>');" />
<input type="hidden" name="product_image[<?php echo $image_row; ?>]" value="<?php echo $product_image['image']; ?>" id="image<?php echo $image_row; ?>" /></td>
<td class="left"><a onclick="$('#image-row<?php echo $image_row; ?>').remove();" class="button"><span><?php echo $button_remove; ?></span></a></td>
</tr>
</tbody>
<?php $image_row++; ?>
<?php } ?>
<tfoot>
<tr>
<td></td>
<td class="left"><a onclick="addImage();" class="button"><span><?php echo $button_add_image; ?></span></a></td>
</tr>
</tfoot>
</table>
</div>Código: Selecionar todos
Substitua por:
</form>
</div>
</div>
</div>
<script type="text/javascript" src="view/javascript/ckeditor/ckeditor.js"></script> Código: Selecionar todos
Ache:
<div id="tab-image">
<table id="images" class="list">
<thead>
<tr>
<td class="left"><?php echo $entry_image; ?></td>
<td><?php echo $entry_main_image; ?></td>
<td></td>
</tr>
</thead>
<?php $image_row = 0; ?>
<?php foreach ($product_images as $product_image) { ?>
<tbody id="image-row<?php echo $image_row; ?>">
<tr>
<td class="left"><img src="<?php echo $product_image['preview']; ?>" alt="" id="preview<?php echo $image_row; ?>" class="image" onclick="image_upload('image<?php echo $image_row; ?>', 'preview<?php echo $image_row; ?>');" />
<input type="hidden" name="product_image[<?php echo $image_row; ?>]" value="<?php echo $product_image['image']; ?>" id="image<?php echo $image_row; ?>" />
</td>
<td class="left">
<?php if ($product_image['image'] == $image) { ?>
<input type="radio" name="image" value="<?php echo $product_image['image']; ?>" id="image" checked />
<?php }else{ ?>
<input type="radio" name="image" value="<?php echo $product_image['image']; ?>" id="image" />
<?php } ?>
</td>
<td class="left"><a onclick="$('#image-row<?php echo $image_row; ?>').remove();" class="button"><span><?php echo $button_remove; ?></span></a></td>
</tr>
</tbody>
<?php $image_row++; ?>
<?php } ?>
<tfoot>
<tr>
<td></td>
<td class="left"><a onclick="addImage();" class="button"><span><?php echo $button_add_image; ?></span></a></td>
</tr>
</tfoot>
</table>
</form>
<form id="multipleDemo" enctype="multipart/form-data">
<h2><?php echo $text_add_images; ?></h2>
<div id="multiple"></div>
</form>
<a class="button" onClick="document.getElementById('agileUploaderSWF').submit();"><span><?php echo $text_upload_server; ?></span></a>
</div>
</div>
</div>
</div>
<script type="text/javascript" src="view/javascript/ckeditor/ckeditor.js"></script>
<script type="text/javascript" src="view/javascript/jquery/jquery.flash.min.js"></script>
<script type="text/javascript" src="view/javascript/jquery/agile-uploader-3.0.js"></script>
<script type="text/javascript">
$('#multiple').agileUploader({
flashSrc: 'view/javascript/jquery/agile-uploader.swf',
formId: 'multipleDemo',
flashVars: {
firebug: false,
return_submit_response: true,
form_action: 'controller/common/agile_uploader.php',
file_limit: 20,
file_filter: '*.jpg;*.jpeg;*.gif;*.png;*.JPG;*.JPEG;*.GIF;*.PNG',
file_filter_description: 'Image Files',
max_width: 500,
max_height: 375,
max_post_size: (500 * 375),
preview_max_height: 80,
preview_max_width: 80,
button_up:'view/image/add-images.jpeg',
button_over:'view/image/add-images.jpeg',
button_down:'view/image/add-images.jpeg'
},
removeIcon: 'view/image/trash-icon.png',
genericFileIcon: 'view/image/file-icon.png'
});
</script>Código: Selecionar todos
Acicione Depois, em uma nova linha:
$('#images tfoot').before(html);
image_row++;
}Código: Selecionar todos
>>> Abra o arquivo catalog\controller\product\product.php e ache:
//--></script>
<script type="text/javascript"><!--
var image_row = <?php echo $image_row; ?>;
function addImages(image_name) {
var ext = image_name.substr(image_name.lastIndexOf('.'));
var name = image_name.substr(0, image_name.lastIndexOf('.'));
var im_thumb = name + '-100x100' + ext;
html = '<tbody id="image_row' + image_row + '">';
html += '<tr>';
html += '<td class="left"><input type="hidden" name="product_image[' + image_row + ']" value="data/' + image_name +'" id="image' + image_row + '" /><img src="<?php echo $image_path; ?>' + 'cache/data/' + im_thumb + '" alt="" id="preview' + image_row + '" class="image" onclick="image_upload(\'image' + image_row + '\', \'preview' + image_row + '\');" /></td>';
html += '<td class="left"><input type="radio" name="image" value="data/' + image_name +'" id="image" /></td>'
html += '<td class="left"><a onclick="$(\'#image_row' + image_row + '\').remove();" class="button"><span><?php echo $button_remove; ?></span></a></td>';
html += '</tr>';
html += '</tbody>';
$('#images tfoot').before(html);
image_row++;
}Código: Selecionar todos
Adicione Antes, em uma nova linha:
$this->data['images'] = array(); Código: Selecionar todos
>>> Abra o arquivo catalog\view\theme\default\template\product\product.tpl e ache:
if ($product_info['image']) {
$this->data['extra'] = $this->model_tool_image->resize($product_info['image'], $this->config->get('config_image_additional_width'), $this->config->get('config_image_additional_height'));
} else {
$this->data['extra'] = '';
} Código: Selecionar todos
Substitua por:
<?php foreach ($images as $image) { ?>
<a href="<?php echo $image['popup']; ?>" title="<?php echo $heading_title; ?>" class="fancybox" rel="fancybox"><img src="<?php echo $image['thumb']; ?>" title="<?php echo $heading_title; ?>" alt="<?php echo $heading_title; ?>" /></a>Código: Selecionar todos
Estou usando este Módulo e funciona perfeitamente.<?php foreach ($images as $image) { ?>
<?php if ($image['thumb'] != $extra) { ?>
<a href="<?php echo $image['popup']; ?>" title="<?php echo $heading_title; ?>" class="fancybox" rel="fancybox"><img src="<?php echo $image['thumb']; ?>" title="<?php echo $heading_title; ?>" alt="<?php echo $heading_title; ?>" /></a>
<?php } ?>Espero ter ajudado.
Abraço.
