diff --git a/bootstrap/web/setup.php b/bootstrap/web/setup.php index bf9997e..a2e2c06 100644 --- a/bootstrap/web/setup.php +++ b/bootstrap/web/setup.php @@ -74,5 +74,15 @@ return [ }, ProVM\KI\Common\Service\Indicadores::class => function(Container $c) { return new ProVM\KI\Common\Service\Indicadores($c->get('urls.indicadores')); + }, + ProVM\Common\Factory\Model::class => function(Container $c) { + return new ProVM\Common\Factory\Model( + $c->get('folders.data'), + implode(DIRECTORY_SEPARATOR, [ + $c->get('folders.public'), + 'assets', + 'images' + ]) + ); } ]; diff --git a/common/Controller/Web/Admin/Productos.php b/common/Controller/Web/Admin/Productos.php index bbb898f..d5706a5 100644 --- a/common/Controller/Web/Admin/Productos.php +++ b/common/Controller/Web/Admin/Productos.php @@ -6,24 +6,27 @@ use Psr\Http\Message\ServerRequestInterface as Request; use Psr\Http\Message\ResponseInterface as Response; use Slim\Views\Blade as View; use Carbon\Carbon; +use ProVM\Common\Factory\Model as ModelFactory; +use ProVM\KI\Producto; class Productos { - public function __invoke(Request $request, Response $response, View $view, Container $container): Response { - $filename = implode(DIRECTORY_SEPARATOR, [ + public function __invoke(Request $request, Response $response, View $view, ModelFactory $factory): Response { + /*$filename = implode(DIRECTORY_SEPARATOR, [ $container->get('folders.data'), 'productos.json' ]); - $productos = json_decode(trim(file_get_contents($filename))); + $productos = json_decode(trim(file_get_contents($filename)));*/ + $productos = $factory->find(Producto::class)->many(); return $view->render($response, 'admin.productos', compact('productos')); } - public function edit(Request $request, Response $response, View $view, Container $container, $producto): Response { - $filename = implode(DIRECTORY_SEPARATOR, [ + public function edit(Request $request, Response $response, View $view, Container $container, ModelFactory $factory, $producto): Response { + /*$filename = implode(DIRECTORY_SEPARATOR, [ $container->get('folders.data'), 'productos.json' ]); $id = $producto; $productos = json_decode(trim(file_get_contents($filename))); - $producto = $productos[$producto]; + $producto = $productos[$id]; $producto->id = $id; $filename = implode(DIRECTORY_SEPARATOR, [ $container->get('folders.data'), @@ -50,7 +53,8 @@ class Productos { } $producto->images []= $file->getFilename(); } - } + }*/ + $producto = $factory->find(Producto::class)->where([['id', $producto]])->one(); $filename = implode(DIRECTORY_SEPARATOR, [ $container->get('folders.data'), @@ -59,18 +63,18 @@ class Productos { $segmentos = json_decode(trim(file_get_contents($filename))); return $view->render($response, 'admin.producto', compact('producto', 'segmentos')); } - public function do_edit(Request $request, Response $response, Container $container, $producto): Response { + public function do_edit(Request $request, Response $response, ModelFactory $factory, $producto): Response { $post = $request->getParsedBody(); - $filename = implode(DIRECTORY_SEPARATOR, [ + /*$filename = implode(DIRECTORY_SEPARATOR, [ $container->get('folders.data'), 'productos.json' ]); $id = $producto; $productos = json_decode(trim(file_get_contents($filename))); - $producto = $productos[$producto]; - $changed = false; + $producto = $productos[$producto];*/ + $producto = $factory->find(Producto::class)->where([['id', $producto]])->one(); - $fields = ['nombre', 'segmento', 'direccion', 'comuna', 'ciudad', 'bono', 'rentabilidad', 'estado', + /*$fields = ['nombre', 'segmento', 'direccion', 'comuna', 'ciudad', 'bono', 'rentabilidad', 'estado', 'cuota', 'unidades', 'modelos', 'descripcion', 'entrega']; foreach ($fields as $field) { if (!isset($producto->$field) or $post[$field] != $producto->$field) { @@ -87,28 +91,39 @@ class Productos { if (!isset($producto->tamaño) or $producto->tamaño != $tamaño) { $producto->tamaño = $tamaño; $changed = true; + }*/ + if (isset($post['destacado']) and $post['destacado'] == 'on') { + $producto->destacado(true); } + $post['tamaños'] = implode(' ', [ + $post['tamaño_min'], + '-', + $post['tamaño_max'], + 'm²' + ]); + $producto->map((object) $post); - $status1 = false; + /*$status1 = false; if ($changed) { $productos[$id] = $producto; $status1 = (file_put_contents($filename, json_encode($productos, \JSON_PRETTY_PRINT | \JSON_UNESCAPED_UNICODE | \JSON_UNESCAPED_SLASHES)) !== false); - } + }*/ + $producto->save(); - $filename = implode(DIRECTORY_SEPARATOR, [ + /*$filename = implode(DIRECTORY_SEPARATOR, [ $container->get('folders.data'), 'destacados.json' ]); $destacados = json_decode(trim(file_get_contents($filename))); $changed = false; if (isset($post['destacado']) and $post['destacado'] == 'on') { - if (array_search($id, $destacados) === false) { - $destacados []= $id; + if (array_search($producto->id, $destacados) === false) { + $destacados []= $producto->id; sort($destacados); $changed = true; } } else { - if (($i = array_search($id, $destacados)) !== false) { + if (($i = array_search($producto->id, $destacados)) !== false) { unset($destacados[$i]); $destacados = array_values($destacados); $changed = true; @@ -117,7 +132,7 @@ class Productos { $status2 = false; if ($changed) { $status2 = (file_put_contents($filename, json_encode($destacados)) !== false); - } + }*/ return $response ->withHeader('Location', implode('/', [$container->get('urls')->admin, 'productos'])); @@ -130,10 +145,10 @@ class Productos { $segmentos = json_decode(trim(file_get_contents($filename))); return $view->render($response, 'admin.productos.add', compact('segmentos')); } - public function do_add(Request $request, Response $response, Container $container): Response { + public function do_add(Request $request, Response $response, ModelFactory $factory): Response { $post = $request->getParsedBody(); - $producto = (object) []; + /*$producto = (object) []; $fields = ['nombre', 'segmento', 'direccion', 'comuna', 'ciudad', 'bono', 'rentabilidad', 'estado', 'cuota', 'unidades', 'modelos', 'descripcion', 'entrega']; foreach ($fields as $field) { @@ -158,26 +173,32 @@ class Productos { ]); $productos = json_decode(trim(file_get_contents($filename))); $productos []= $producto; - file_put_contents($filename, json_encode($productos, \JSON_PRETTY_PRINT | \JSON_UNESCAPED_UNICODE | \JSON_UNESCAPED_SLASHES)); - + file_put_contents($filename, json_encode($productos, \JSON_PRETTY_PRINT | \JSON_UNESCAPED_UNICODE | \JSON_UNESCAPED_SLASHES));*/ + $producto = $factory->create(Producto::class, (object) $post); if (isset($post['destacado']) and $post['destacado'] == 'on') { - $id = count($productos) - 1; + $producto->destacado(true); + } + $producto->save(); + + /*if (isset($post['destacado']) and $post['destacado'] == 'on') { + //$id = count($productos) - 1; + $id = $producto->id; $filename = implode(DIRECTORY_SEPARATOR, [ $container->get('folders.data'), 'destacados.json' ]); $destacados = json_decode(trim(file_get_contents($filename))); - $destacados []= $id; + $destacados []= $proyecto->id; sort($destacados); file_put_contents($filename, json_encode($destacados)); - } + }*/ return $response ->withHeader('Location', implode('/', [$container->get('urls')->admin, 'productos'])); } - public function delete(Request $request, Response $response, Container $container): Response { + public function delete(Request $request, Response $response, ModelFactory $factory): Response { $post = $request->getParsedBody(); - $filename = implode(DIRECTORY_SEPARATOR, [ + /*$filename = implode(DIRECTORY_SEPARATOR, [ $container->get('folders.data'), 'productos.json' ]); @@ -191,6 +212,7 @@ class Productos { mb_strtolower($producto->nombre) ]); unset($productos[$id]); + $productos = array_values($productos); $status = false; $status |= (file_put_contents($filename, json_encode($productos, \JSON_PRETTY_PRINT | \JSON_UNESCAPED_UNICODE | \JSON_UNESCAPED_SLASHES)) !== false); if (file_exists($folder)) { @@ -205,7 +227,10 @@ class Productos { unset($destacados[$i]); $destacados = array_values($destacados); $status |= (file_put_contents($filename, json_encode($destacados)) !== false); - } + }*/ + $producto = $factory->find(Producto::class)->where([['id', $post['id']]])->one(); + $status = $producto->delete(); + $output = [ 'information' => $post, 'estado' => $status @@ -215,11 +240,11 @@ class Productos { ->withHeader('Content-Type', 'application/json') ->withStatus(201); } - public function add_image(Request $request, Response $response, Container $container, $producto): Response { + public function add_image(Request $request, Response $response, ModelFactory $factory, $producto): Response { $post = $request->getParsedBody(); $files = $request->getUploadedFiles(); $file = $files['imagen']; - $filename = implode(DIRECTORY_SEPARATOR, [ + /*$filename = implode(DIRECTORY_SEPARATOR, [ $container->get('folders.data'), 'productos.json' ]); @@ -239,11 +264,13 @@ class Productos { $folder, $file->getClientFilename() ]); - $file->moveTo($filename); + $file->moveTo($filename);*/ + $producto = $factory->find(Producto::class)->where([['id', $producto]])->one(); + $status = $producto->addImagen($file); $output = [ 'informacion' => $id, - 'estado' => file_exists($filename) + 'estado' => $status ]; $response->getBody()->write(json_encode($output)); return $response @@ -262,9 +289,9 @@ class Productos { mb_strtolower($producto->nombre) ]); } - public function delete_image(Request $request, Response $response, Container $container, $producto): Response { + public function delete_image(Request $request, Response $response, ModelFactory $factory, $producto): Response { $post = $request->getParsedBody(); - $filename = implode(DIRECTORY_SEPARATOR, [ + /*$filename = implode(DIRECTORY_SEPARATOR, [ $container->get('folders.data'), 'productos.json' ]); @@ -281,7 +308,9 @@ class Productos { $folder, $post['imagen'] ]); - $status = unlink($filename); + $status = unlink($filename);*/ + $producto = $factory->find(Producto::class)->where([['id', $producto]])->one(); + $status = $producto->deleteImagen($post['imagen']); $output = [ 'estado' => $status @@ -299,5 +328,6 @@ class Productos { 'images', mb_strtolower($producto->nombre) ]); + return $response; } } diff --git a/common/Controller/Web/Productos.php b/common/Controller/Web/Productos.php index 068316f..00021af 100644 --- a/common/Controller/Web/Productos.php +++ b/common/Controller/Web/Productos.php @@ -5,6 +5,8 @@ use Psr\Container\ContainerInterface as Container; use Psr\Http\Message\ServerRequestInterface as Request; use Psr\Http\Message\ResponseInterface as Response; use Slim\Views\Blade as View; +use ProVM\Common\Factory\Model as ModelFactory; +use ProVM\KI\Producto; class Productos { public function __invoke(Request $request, Response $response, Container $container, View $view): Response { @@ -15,59 +17,23 @@ class Productos { $segmentos = json_decode(trim(file_get_contents($filename))); return $view->render($response, 'productos.list', compact('segmentos')); } - public function show(Request $request, Response $response, Container $container, View $view, $producto): Response { - $filename = implode(DIRECTORY_SEPARATOR, [ - $container->get('folders.data'), - 'productos.json' - ]); - $productos = json_decode(trim(file_get_contents($filename))); - $filename = implode(DIRECTORY_SEPARATOR, [ - $container->get('folders.data'), - 'destacados.json' - ]); - $destacados = json_decode(trim(file_get_contents($filename))); - $destacado = false; - if (array_search($producto, $destacados) !== false) { - $destacado = true; - } - $id = $producto; - $producto = $productos[$producto]; - $producto->destacado = $destacado; - $producto->id = $id; - $folder = implode(DIRECTORY_SEPARATOR, [ - $container->get('folders.public'), - 'assets', - 'images', - mb_strtolower($producto->nombre) - ]); - $producto->images = []; - if (file_exists($folder)) { - $files = new \DirectoryIterator($folder); - foreach ($files as $file) { - if ($file->isDir()) { - continue; - } - $producto->images []= $file->getFilename(); - } - } + public function show(Request $request, Response $response, View $view, ModelFactory $factory, $producto): Response { + $producto = $factory->find(Producto::class)->where([['id', $producto]])->one(); return $view->render($response, 'productos.show', compact('producto')); } - public function segmento(Request $request, Response $response, Container $container, $segmento): Response { - $filename = implode(DIRECTORY_SEPARATOR, [ - $container->get('folders.data'), - 'productos.json' - ]); - $productos = json_decode(trim(file_get_contents($filename))); + public function segmento(Request $request, Response $response, ModelFactory $factory, $segmento): Response { + $productos = $factory->find(Producto::class); if ($segmento != 'todo') { - $productos = array_filter($productos, function($item) use ($segmento) { - return (str_replace(' ', '_', mb_strtolower($item->segmento)) == $segmento); - }); + $productos = $productos->where([['segmento', ucwords($segmento)]]); } + $productos = $productos->many(); $output = [ 'information' => [ 'segmento' => $segmento ], - 'productos' => array_keys($productos) + 'productos' => array_map(function($item) { + return $item->id; + }, $productos) ]; $response->getBody()->write(json_encode($output)); return $response @@ -87,7 +53,8 @@ class Productos { ], 'destacados' => [] ]; - for ($i = ($page - 1) * 4; $i < $page * 4; $i ++) { + $n = min(4, count($destacados)); + for ($i = ($page - 1) * $n; $i < $page * $n; $i ++) { $output['destacados'] []= $destacados[$i]; } $response->getBody()->write(json_encode($output)); @@ -95,42 +62,8 @@ class Productos { ->withHeader('Content-Type', 'application/json') ->withStatus(201); } - public function ficha(Request $request, Response $response, Container $container, View $view, $producto): Response { - $filename = implode(DIRECTORY_SEPARATOR, [ - $container->get('folders.data'), - 'productos.json' - ]); - $productos = json_decode(trim(file_get_contents($filename))); - $filename = implode(DIRECTORY_SEPARATOR, [ - $container->get('folders.data'), - 'destacados.json' - ]); - $destacados = json_decode(trim(file_get_contents($filename))); - $destacado = false; - if (array_search($producto, $destacados) !== false) { - $destacado = true; - } - $id = $producto; - $producto = $productos[$producto]; - $producto->destacado = $destacado; - $producto->id = $id; - $folder = implode(DIRECTORY_SEPARATOR, [ - $container->get('folders.public'), - 'assets', - 'images', - mb_strtolower($producto->nombre) - ]); - $producto->imagen = 'default.jpg'; - if (file_exists($folder)) { - $files = new \DirectoryIterator($folder); - foreach ($files as $file) { - if ($file->isDir()) { - continue; - } - $producto->imagen = implode('/', [mb_strtolower($producto->nombre), $file->getFilename()]); - break; - } - } + public function ficha(Request $request, Response $response, View $view, ModelFactory $factory, $producto): Response { + $producto = $factory->find(Producto::class)->where([['id', $producto]])->one(); return $view->render($response, 'productos.ficha', compact('producto')); } } diff --git a/composer.json b/composer.json index 1622255..317fdd1 100644 --- a/composer.json +++ b/composer.json @@ -27,7 +27,8 @@ "autoload": { "psr-4": { "ProVM\\KI\\Common\\": "common", - "ProVM\\KI\\": "src" + "ProVM\\KI\\": "src", + "ProVM\\Common\\": "provm/common" } } } diff --git a/provm/common/Factory/Model.php b/provm/common/Factory/Model.php new file mode 100644 index 0000000..95d8118 --- /dev/null +++ b/provm/common/Factory/Model.php @@ -0,0 +1,148 @@ +data_folder = $data_folder; + $this->image_folder = $image_folder; + } + + public function getFolder(): string { + return $this->data_folder; + } + public function get($file) { + $filename = implode(DIRECTORY_SEPARATOR, [ + $this->data_folder, + $file + ]); + return json_decode(trim(file_get_contents($filename))); + } + protected function reset() { + $this->class = null; + $this->conditions = null; + $this->limits = null; + } + protected $class; + public function find(string $class): Model { + if (!class_exists($class) or !is_subclass_of($class, \ProVM\Common\Implementation\Model::class)) { + throw new \InvalidArgumentException($class . ' is not defined.'); + } + $this->reset(); + $this->class = $class; + return $this; + } + /** + * JSON + * [ + * { + * , + * , + * + * }, + * ... + * ] + * @var array + */ + protected $conditions; + public function where(array $conditions): Model { + if ($this->conditions === null) { + $this->conditions = []; + } + foreach ($conditions as $condition) { + $c = ['field' => $condition[0], 'value' => $condition[1], 'operator' => '==']; + if (isset($condition[2])) { + $c['operator'] = $condition[2]; + } + $this->conditions []= (object) $c; + } + return $this; + } + protected function parseWhere(array $data): array { + if ($this->conditions === null) { + return $data; + } + foreach ($this->conditions as $condition) { + $str = implode(' ', [ + $condition->field, + $condition->operator, + (is_string($condition->value)) ? "'" . $condition->value . "'" : $condition->value + ]); + return array_filter($data, function($item) use ($str) { + $bool = true; + eval("\$bool = (\$item->" . $str . ');'); + return $bool; + }); + } + } + protected $limits; + public function limit(int $limit): Model { + if ($this->limits === null) { + $this->limits = (object) ['limit' => null, 'offset' => 0]; + } + $this->limits->limit = $limit; + return $this; + } + public function offset(int $offset): Model { + if ($this->limits === null) { + $this->limits = (object) ['limit' => null, 'offset' => 0]; + } + $this->limits->offset = $offset; + return $this; + } + protected function parseLimits(array $data): array { + if ($this->limits === null or $this->limits->limit === null) { + return $data; + } + return array_slice($data, $this->limits->offset, $this->limits->limit); + } + protected function getFilename(): string { + $data = explode("\\", $this->class); + return implode(DIRECTORY_SEPARATOR, [ + $this->data_folder, + str_replace(' ', '_', mb_strtolower(array_pop($data))) . 's.json' + ]); + } + protected function build(): array { + $filename = $this->getFilename(); + $data = json_decode(trim(file_get_contents($filename))); + $data = $this->parseWhere($data); + $data = $this->parseLimits($data); + return $data; + } + protected function fillObject($data): BaseModel { + $obj = new $this->class; + $obj->map($data); + $obj->setFactory($this); + $obj->setImageFolder($this->image_folder); + return $obj; + } + public function one(): BaseModel { + $data = $this->limit(1)->build(); + $item = $data[0]; + $obj = $this->fillObject($item); + return $obj; + } + public function many(): array { + $data = $this->build(); + foreach ($data as &$item) { + $obj = $this->fillObject($item); + $item = $obj; + } + return $data; + } + public function array(): array { + return $this->build(); + } + + public function create(string $class, $data) { + $obj = new $class; + $obj->map($data); + $obj->setFactory($this); + $obj->setImageFolder($this->image_folder); + return $obj; + } +} diff --git a/provm/common/Implementation/Model.php b/provm/common/Implementation/Model.php new file mode 100644 index 0000000..c9a1d98 --- /dev/null +++ b/provm/common/Implementation/Model.php @@ -0,0 +1,55 @@ +factory = $factory; + } + public function __get(string $name) { + if (!property_exists($this, $name)) { + throw new \InvalidArgumentException($name . ' is not a property of ' . get_called_class()); + } + return $this->$name; + } + public function save() { + $filename = $this->getFilename(); + $data = json_decode(trim(file_Get_contents($filename))); + if ($this->id === null) { + $this->id = array_reduce($data, function($max, $item) { + return (($max < $item->id) ? $item->id : $max); + }, 0) + 1; + $data []= $this->jsonSerialize(); + } else { + foreach ($data as $i => $item) { + if ($item->id == $this->id) { + $data[$i] = $this->jsonSerialize(); + } + } + } + $data = array_values($data); + return (file_put_contents($filename, json_encode($data, \JSON_PRETTY_PRINT | \JSON_UNESCAPED_SLASHES | \JSON_UNESCAPED_UNICODE)) !== false); + } + public function delete() { + $filename = $this->getFilename(); + $data = json_decode(trim(file_Get_contents($filename))); + foreach ($data as $i => $item) { + if ($item->id == $this->id) { + unset($data[$i]); + } + } + $data = array_values($data); + return (file_put_contents($filename, json_encode($data, \JSON_PRETTY_PRINT | \JSON_UNESCAPED_SLASHES | \JSON_UNESCAPED_UNICODE)) !== false); + } + protected function getFilename(): string { + $data = explode("\\", get_called_class()); + $folder = $this->factory->getFolder(); + return implode(DIRECTORY_SEPARATOR, [ + $folder, + str_replace(' ', '_', mb_strtolower(array_pop($data))) . 's.json' + ]); + } +} diff --git a/public/assets/images/logo.png b/public/assets/images/logo.png index 3a207d8..8ac5bd6 100644 Binary files a/public/assets/images/logo.png and b/public/assets/images/logo.png differ diff --git a/resources/views/admin/producto.blade.php b/resources/views/admin/producto.blade.php index a98854f..407c5a1 100644 --- a/resources/views/admin/producto.blade.php +++ b/resources/views/admin/producto.blade.php @@ -16,15 +16,15 @@
- +
- +
- +
@@ -105,11 +105,11 @@
- +
- +
@@ -144,7 +144,7 @@ @endif - */?> + */?>
@@ -208,7 +208,7 @@ var entrega = new Date('{{str_pad(implode('-', array_reverse(explode('/', $producto->entrega))), 7, '20', STR_PAD_LEFT)}}-01T01:00') $('.calendar').calendar('set date', entrega) $('.checkbox').checkbox() - @if ($producto->destacado) + @if ($producto->destacado()) $('.checkbox').checkbox('set checked') @endif $("input[name='imagen']").change(function() { @@ -228,7 +228,7 @@ } }) }) - @foreach ($producto->images as $image) + @foreach ($producto->imagenes() as $image) listImage('{{$image}}') @endforeach $("input[name='video']").change(function() { diff --git a/resources/views/admin/productos.blade.php b/resources/views/admin/productos.blade.php index 698240c..dc205cb 100644 --- a/resources/views/admin/productos.blade.php +++ b/resources/views/admin/productos.blade.php @@ -22,19 +22,19 @@ - @foreach ($productos as $i => $producto) + @foreach ($productos as $producto) - + {{$producto->nombre}} - + - + @endforeach diff --git a/resources/views/home/indicadores.blade.php b/resources/views/home/indicadores.blade.php index b3e305d..0fa8c02 100644 --- a/resources/views/home/indicadores.blade.php +++ b/resources/views/home/indicadores.blade.php @@ -89,7 +89,7 @@ $('
').attr('class', 'value').html(data.valor) ) ) - div.find('.header').popup(9) + div.find('.header').popup() $(indicadores.id).find('.slideshow').append(div) }, setup: () => { diff --git a/resources/views/productos/ficha.blade.php b/resources/views/productos/ficha.blade.php index a2cf8ad..4734eca 100644 --- a/resources/views/productos/ficha.blade.php +++ b/resources/views/productos/ficha.blade.php @@ -7,19 +7,19 @@ {{$producto->segmento}}
- {{$producto->comuna}} + {{$producto->direccion->comuna}}
- @if ($producto->destacado) + @if ($producto->destacado())
Destacado
@endif - +
- {{$producto->valor}} UF + {{$producto->valor()}} UF Valor depto
diff --git a/resources/views/productos/list.blade.php b/resources/views/productos/list.blade.php index 6143727..d851190 100644 --- a/resources/views/productos/list.blade.php +++ b/resources/views/productos/list.blade.php @@ -55,6 +55,10 @@ $(".tab[data-tab='" + segmento + "']").find('.grid').append( $('
').attr('class', 'ui active centered inline loader') ) + if (data.productos.length == 0) { + $(".tab[data-tab='" + segmento + "']").find('.grid').html('No hay productos en este segmento.') + return + } $.each(data.productos, (i, el) => { getProducto(segmento, el) }) diff --git a/resources/views/productos/producto/datos.blade.php b/resources/views/productos/producto/datos.blade.php index 3918273..323e169 100644 --- a/resources/views/productos/producto/datos.blade.php +++ b/resources/views/productos/producto/datos.blade.php @@ -15,7 +15,7 @@ Precio:
- {{$producto->valor ?? ''}} UF + {{$producto->valor() ?? ''}} UF
@@ -39,7 +39,11 @@ Ubicación:
- {{$producto->comuna ?? ''}}, {{$producto->ciudad ?? ''}} + {{implode(', ', [ + $producto->direccion->calle, + $producto->direccion->comuna ?? '', + $producto->direccion->ciudad ?? '' + ])}}
@@ -63,7 +67,7 @@ Tamaño
- {{$producto->tamaño ?? ''}} + {{$producto->tamaños ?? ''}}
@@ -75,9 +79,9 @@
+ data-url="https://maps.google.com/maps?hl=es&amp;q={{($producto->direccion) ? str_replace(' ', '%20', implode(', ', [ + $producto->direccion->calle, $producto->direccion->comuna + ])) : 'Santiago,%20Chile'}}&amp;ie=UTF8&amp;z={{($producto->direccion) ? 16 : 11}}&amp;iwloc=B&amp;output=embed">
@if (isset($producto->descripcion))
diff --git a/resources/views/productos/producto/galeria.blade.php b/resources/views/productos/producto/galeria.blade.php index 82af0b3..4a23b86 100644 --- a/resources/views/productos/producto/galeria.blade.php +++ b/resources/views/productos/producto/galeria.blade.php @@ -1,10 +1,10 @@
- @if (count($producto->images)) + @if (count($producto->imagenes()))
- +
- @foreach ($producto->images as $i => $image) + @foreach ($producto->imagenes() as $i => $image) @if ($i == 0) @continue @endif @@ -21,7 +21,7 @@ @push('scripts')