Bien, lo que pasa es que tu subida de imágenes que tenias es para
subir múltiples archivos... no estoy viendo la logica para subir los
archivos, tal vez esta en un plugin o component, pero igual te paso una
manera pero para subir un único archivo:
view/Presses/admin_add.ctp
<div class="presses form">
<?php echo $this->Form->create('Presse', array('type'=>'file', 'url' =>
'/admin/presses/add));?>
<h2><?php __('Admin Add Press'); ?></h2>
<fieldset>
<div class="tabs">
<ul>
<li><a href="#Suit-main"><span><?php __('General');
?></span></a></li>
<li><a href="#Suit-meta"><span><?php __('Meta');
?></span></a></li>
<li><a href="#Suit-image"><span><?php __('Images');
?></span></a></li>
</ul>
<div id="Suit-main">
<?php
echo $this->Form->input('title'); //No tengo idea para que sirbe
echo $this->Form->input('status'); //No tengo idea para que sirbe
?>
</div>
<div id="Suit-meta">
<?php
echo $this->Form->input('foreign_key'); //Desconozco como es la relación
para esta clave foranea
echo $this->Form->input('owner'); //Debe ser el propietario, lo podes
modificar desde el metodo admin_add del controlador de acuerdo a la
veriable de session $this->data['Presse']['owner'] = 'fulano';
echo $this->Form->input('title');
echo $this->Form->input('epigraph');
?>
</div>
</div>
</fieldset>
<div class="buttons">
<?php echo $this->Form->end(__('Save', true)); ?>
PressesController.php
<?php
class PressesController extends AppController {
var $name = 'Presses';
function beforeFilter(){
parent::beforeFilter();
// CSRF Protection
if (in_array($this->params['action'], array('admin_add',
'admin_edit'))) {
$this->Security->validatePost = false;
}
}
public function index(){
$this->set('bodyClass', 'accomodation accomodation-detail');
$press = $this->Press->find('first', array(
'contain' => array(
'Photo',
'File'
),
'conditions'=> array(
'Press.slug' => $this->params['slug'],
'Press.status' => true
),
'cache' => array(
'prefix' => 'presses_' . $this->params['slug'],
'config' => 'presses',
)
));
$this->set('metaForLayout',array(
'title' => $press['Press']['meta_title'],
'keywords' => $press['Press']['meta_keywords'],
'description' => $press['Press']['meta_description']
));
$this->set('press',$press);
}
function admin_index() {
if (isset($this->params['named']['q'])) {
App::import('Core', 'Sanitize');
$q = Sanitize::clean($this->params['named']['q']);
$this->data['Filter']['q'] = $this->params['named']['q'];
$this->paginate['Press']['conditions']['OR'] = array(
'Press.title LIKE' => '%' . $q . '%',
'Press.slug LIKE' => '%' . $q . '%',
'Press.excerpt LIKE' => '%' . $q . '%',
'Press.body LIKE' => '%' . $q . '%',
);
}
$this->Press->recursive = 0;
$this->set('presses', $this->paginate());
}
function admin_add() {
if (!empty($this->data)) {
$arch = $this->subir($this->data['Presse']['file'], 'files');
$this->data['Presse']['file_name'] = $arch['nom_guardar'];
$this->data['Presse']['file_type'] = $arch['tipo'];
$this->data['Presse']['file_size'] = $arch['tamanio'];
$this->Presse->create();
if ($this->Presse->save($this->data)) {
$this->Session->setFlash(__('The press has been saved', true));
$this->redirect(array('action' => 'index'));
} else {
$this->Session->setFlash(__('The press could not be saved. Please, try
again.', true));
}
}
}
function admin_edit($id = null) {
if (!$id && empty($this->data)) {
$this->Session->setFlash(__('Invalid press', true));
$this->redirect(array('action' => 'index'));
}
if (!empty($this->data)) {
if ($this->Press->saveAll($this->data)) {
$this->Session->setFlash(__('The press has been saved', true));
$this->redirect(array('action' => 'index'));
} else {
$this->Session->setFlash(__('The press could not be saved. Please, try
again.', true));
}
}
if (empty($this->data)) {
$this->data = $this->Press->read(null, $id);
}
}
function admin_delete($id = null) {
if (!$id) {
$this->Session->setFlash(__('Invalid id for press', true));
$this->redirect(array('action'=>'index'));
}
if ($this->Press->delete($id)) {
// Borra todas las Imágenes y activa los callbacks.
$this->Press->Photo->deleteAll(array('foreign_key' => $id, 'owner' =>
'presses'), true, array('beforeDelete','afterDelete'));
$this->Press->File->deleteAll(array('foreign_key' => $id, 'owner' =>
'presses'), true, array('beforeDelete','afterDelete'));
$this->Session->setFlash(__('Press deleted', true));
$this->redirect(array('action'=>'index'));
}
$this->Session->setFlash(__('Press was not deleted', true));
$this->redirect(array('action' => 'index'));
}
function admin_toggle_status($id){
$model = $this->Press;
$model->contain();
$row = $model->read(null, $id);
$row[$model->name]['status'] = $row[$model->name]['status'] ? false
: true;
$result = $model->save($row);
$this->set(compact('result'));
$this->set('rank', 'status_toggle');
$this->set('option',$row[$model->name]['status']);
$this->set('option_id', $id);
$this->render('/elements/admin/admin_toggle');
}
public function admin_moveup($id, $step = 1) {
if( $this->Press->moveup($id, $step) ) {
$this->Session->setFlash(__('Moved up successfully', true),
'default', array('class' => 'success'));
} else {
$this->Session->setFlash(__('Could not move up', true),
'default', array('class' => 'error'));
}
$this->redirect($this->referer());
}
public function admin_movedown($id, $step = 1) {
if( $this->Press->movedown($id, $step) ) {
$this->Session->setFlash(__('Moved down successfully', true),
'default', array('class' => 'success'));
} else {
$this->Session->setFlash(__('Could not move down', true),
'default', array('class' => 'error'));
}
$this->redirect($this->referer());
}
function subir($archivo = null, $carpeta = 'files') {
if ($archivo != null) {
// obtenemos los datos del archivo
$retorno['tamanio'] = $archivo['size'];
$retorno['tipo'] = $archivo['type'];
$arch = $archivo['name'];
$prefijo = date('dmYHis');
$retorno['extension'] = $this->getFileExtension($archivo['name']);
if ($arch != "") {
// guardamos el archivo a la carpeta
$destino =
WWW_ROOT."/".$carpeta."/".$prefijo.'.'.$extension;
if (copy($archivo['tmp_name'],$destino)) {
unlink($archivo['tmp_name']);
$retorno['nom_guardar'] = $prefijo.'.'.$extension;
return $retorno;
} else {
return;
}
} else {
return;
}
}
}
function getFileExtension($str) {
$i = strrpos($str,".");
if (!$i) { return ""; }
$l = strlen($str) - $i;
$ext = substr($str,$i+1,$l);
return $ext;
}
}
Lo que ahora veo es que no estas siguiendo las convensiones de cake, ya que
tu tabla se llama "files" y tu controlador se llama "Presses",
en teoría esto así no te debería guardar ya que va a querer guardar en la
tabla "presses", te recomiendo leer las convenciones de cakephp (
http://book.cakephp.org/1.3/es/view/892/Basic-Principles-of-CakePHP/CakePHP-Conventions.html
)
Saludos!!
El 14 de diciembre de 2012 13:55, Woodstock DG <[email protected]>escribió:
> La idea es la siguiente. Cree una seccion "Prensa" con post
> administrables, se trata de subir una imagen y un archivo pdf para que se
> listen dentro de la seccion en el frontend. Practicamente para esta seccion
> saque todo en base a otras que ya estaban las cuales ya tenian un upload de
> imagenes. Entonces el desafio era agregar otro upload para un archivo pdf.
> Para esto tome de base este upload de imagenes y trate de replicarlo para
> que suba pdfs.
> La idea es que subas el archivo, lo guarde en la base de datos
> relacionandolo con el post, tiene esta estructura (la misma que usa para
> guardar las fotos):
>
> CREATE TABLE IF NOT EXISTS `files` (
> `id` int(11) NOT NULL AUTO_INCREMENT,
> `foreign_key` int(11) NOT NULL,
> `owner` varchar(255) COLLATE utf8_unicode_ci NOT NULL,
> `title` varchar(255) COLLATE utf8_unicode_ci NOT NULL,
> `epigraph` text COLLATE utf8_unicode_ci NOT NULL,
> `file_name` varchar(255) COLLATE utf8_unicode_ci NOT NULL,
> `file_type` varchar(255) COLLATE utf8_unicode_ci NOT NULL,
> `file_size` int(11) NOT NULL,
> `weight` int(11) NOT NULL,
> `created` datetime NOT NULL,
> `modified` datetime NOT NULL,
> PRIMARY KEY (`id`),
> KEY `foreign_key` (`foreign_key`,`owner`)
> ) ENGINE=MyISAM DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci
> AUTO_INCREMENT=40 ;
>
>
> Cuando subo un archivo me guarda este registro:
>
> (37, 13, 'presses', '', '', '', '', 0, 1, '2012-12-12 20:57:27',
> '2012-12-12 20:57:27'),
>
> Como ves guarda con el owner bien y el id del post, pero los datos del
> archivo no, ni tampoco sube el archivo a la carpeta "files" en el webroot,
> que tiene permisos 777.
>
>
> Espero que me haya explicado bien!
> Muchas gracias por sus aportes y su ayuda.
>
>
> El 14 de diciembre de 2012 12:17, Guillermo Rohde
> <[email protected]>escribió:
>
>> Lo que esta pasando es que estas mezclando varias formas de subir
>> archivos aparentemente empesaste a utilizar el swfupload y lo que te pase
>> yo es para subir un archivo en un formulario simple... vas a tener arreglar
>> todo eso, podes empesar a contarnos como queres subir losa rchivos si lo
>> queres guardar en base de datos si es solamente subir y despues leer la
>> carpeta, como son las tablas en la base de datos.
>>
>> Saludos!!
>>
>> El 14 de diciembre de 2012 12:02, Woodstock DG
>> <[email protected]>escribió:
>>
>>> isset($model
>>
>>
>> --
>> Has recibido este mensaje porque estás suscrito al grupo "CakePHP-es" de
>> Grupos de Google.
>> Para publicar una entrada en este grupo, envía un correo electrónico a
>> [email protected].
>> Para anular tu suscripción a este grupo, envía un correo electrónico a
>> [email protected]
>> Para tener acceso a más opciones, visita el grupo en
>> http://groups.google.com/group/cakephp-es?hl=es.
>>
>
> --
> Has recibido este mensaje porque estás suscrito al grupo "CakePHP-es" de
> Grupos de Google.
> Para publicar una entrada en este grupo, envía un correo electrónico a
> [email protected].
> Para anular tu suscripción a este grupo, envía un correo electrónico a
> [email protected]
> Para tener acceso a más opciones, visita el grupo en
> http://groups.google.com/group/cakephp-es?hl=es.
>
--
Has recibido este mensaje porque estás suscrito al grupo "CakePHP-es" de Grupos
de Google.
Para publicar una entrada en este grupo, envía un correo electrónico a
[email protected].
Para anular tu suscripción a este grupo, envía un correo electrónico a
[email protected]
Para tener acceso a más opciones, visita el grupo en
http://groups.google.com/group/cakephp-es?hl=es.