Categorygithub.com/MarcosIgnacioo/blazingly_fast_php_generic_use_cases_parser
modulepackage
0.0.0-20241218213248-667b66bb44a6
Repository: https://github.com/marcosignacioo/blazingly_fast_php_generic_use_cases_parser.git
Documentation: pkg.go.dev

# README

doce40 shop store

cosas que faltan

formatear losr achivos

prettier es un pendejo y yo mas

Paso 1: aplicar a la lista de carpetas:

  • Desminificar todos los archivos
  • Cambiar la extención de .html a .php

Para hacer esto es hacer una funcion que haga lo siguiente

Primero descomprimir el archivo

package document_manipulation

func scannDirectory(Directory *dir) error{
    --checar la carpeta y todos los archivos .html meterlos a un
    --arraylist(htmlFiles) y los que sean folders meterlos a otro arraylist (directories)
    --iterar sobre el arraylist de los archivos .html para meterlos en la funcion HTMLToPHP(htmlFiles[i])
    --iterar sobre el arraylist de directories y aplicarles la funcion de 
    scannDirectory(directories[i])
}

func HTMLToPHP(FILE* file) void {
    -- formatear el html
    -- pasarlo a .php
    -- borrar el archivo html anterior
}

Le pasas la carpeta donde se descomprimio todo el archivo

PENDING FORMATTING

Dentro de esa carpeta checa si hay un index.html, si lo hay, lo formatea, y lo pasa a php

Luego checa todos los folders que haya, y los mete en una arraylist

Luego, por cada folder hace un ciclo en el que se ejecuta la funcion de manera recursiva

Cuando deje de haber folders e index.html que formatear y cambiar pues se detiene

¿Que pasa con las carpetas que no tienen achivos html?

Se deberian de copiar en sus propias carpetas espejo

Paso 2:

  • Crear una carpeta en la raíz con el nombre app
  • Descomprimir el zip app dentro de la carpeta

Paso 3:

QUESTION no hay ningun archivo zip dentro de la carpeta js

  • En la carpeta js de la raiz descromprimir el zip js dentro de el

Paso 4:

  • En todos los archivos ubicar el item con la clase separator_initial_cart

    y sobre ese item colocar el código siguiente:

    <?php include "layouts/cart_mobile.template.php"; ?>
    

    para los archivos de un nivel más profundo colocar un extra ../ <-- this is the reason why this is all for today

// this is all for today

Paso 4:

  • En el index.php de la raiz colocar el siguiente código en la línea principal:
<?php

  include_once "app/config.php"; 
  include_once "app/ProductsController.php"; 

  $productsController = new ProductsController();   

  $cafes = $productsController -> getByCategory('cafe');
  $merchs = $productsController -> getByCategory('merch');

?>
  • Dentro del mismo archivo index ubicar el primer item que contenga la clase product_item_coffe

  • Se deben borrar o comentar los últimos 3 items y dejar solo 1, el cual se repetirá en bucle a través del ciclo foreach con el siguiente código:

    
    <?php if (isset($cafes) && count($cafes)): ?>
    <?php foreach (array_slice($cafes, 0, 4) as $cafe): ?> 
    <?php $product = $productsController->getQuickView($cafe) ?>
    
    Aquí va el código del item
    
    <?php endforeach ?>
    <?php endif ?>
    
  • Dentro del item

    <a href="<?= $product->url ?>">
    
  • Dentro del item hay que ubicar la imagen y reemplazar el código por el siguiente:

    <img src="<?= $cafe->cover->full_path ?>" alt="<?= $product->name ?>" title="<?= $product->name ?>" />
    
  • Dentro del item

    <a href="<?= $product->url ?>"><?= $product->name ?></a>
    
  • Dentro del item

    DESDE $<?= $product->price ?>
    
    <?php if (isset($cafes) && count($cafes)): ?>
        <?php foreach (array_slice($cafes, 0, 4) as $cafe): ?> 
            <?php $product = $productsController->getQuickView($cafe) ?>
                    <div class="inner">
                        <div class="ed-element ed-image product_coffe_home_item" id="ed-456729788">
                        <a href="<?= $product->url ?>">
                            <img src="<?= $cafe->cover->full_path ?>" alt="<?= $product->name ?>" title="<?= $product->name ?>" />
                          </a>
                        </div>
                        <div class="ed-element ed-text custom-theme product_coffe_home_item" id="ed-456729791">
                          <p style="line-height: 1.15; text-align: center;">
                            <span style="font-size: 18px; font-family: &#34;daisywhl&#34;;">
                              <a href="<?= $product->url ?>"><?= $product->name ?></a>
                            </span>
                          </p>
                          <p style="line-height: 1; text-align: center;">
                            <span style="font-size: 14px; color: rgb(94, 94, 94); font-family: &#34;daisywhl&#34;;" class="product_price_home">
                              DESDE $<?= $product->price ?>
                            </span>
                          </p>
                        </div>
                      </div>
        <?php endforeach ?>
    <?php endif ?>
    
  • Lo mismo pasa con la clase product_item_favorite

  • Se deben borrar o comentar los últimos 2 items y dejar solo 1, el cual se repetirá en bucle a través del ciclo foreach con el siguiente código:

    <?php if (isset($merchs) && count($merchs)): ?>
    <?php foreach (array_slice($merchs, 0, 3) as $merch): ?> 
    <?php $product = $productsController->getQuickView($merch) ?>
    
    Aquí va el código del item
    
    <?php endforeach ?>
    <?php endif ?>
    
    
  • Dentro del item

    <a href="<?= $product->url ?>">
    <img src="<?= $product->thumbnail_path ?>" alt="<?= $product->name ?>"  />
    
  • Dentro del item

    <a href="<?= $product->url ?>"><?= $product->name ?></a>
    
  • Dentro del item

    <?= $product->price ?>
    

Paso 5:

  • En la carpeta tienda/index.php colocar el siguiente código en la cabecera

    <?php
    
    	  include_once "../app/config.php"; 
    	  include_once "../app/ProductsController.php";
    	  include_once "../app/CategoriesController.php";
    
    	  $productsController = new ProductsController(); 
    	  $categoriesController = new CategoriesController(); 
    
    	  $products = $productsController -> getMostSold(12);
    
    ?>
    
  • Dentro del mismo archivo index ubicar el primer item que contenga la clase product_item_all

  • Se deben borrar o comentar todos los items y dejar solo 1, el cual se repetirá en bucle a través del ciclo foreach con el siguiente código:

    
    <?php if (isset($products) && count($products)): ?>
    <?php foreach ($products as $product): ?> 
    <?php $product = $productsController->getQuickView($product) ?>
    
    Aquí va el código del item
    
    <?php endforeach ?>
    <?php endif ?>
    
  • Dentro del item

    <a href="<?= $product->url ?>" >
    
  • Dentro del item hay que ubicar la imagen y reemplazar el código por el siguiente:

    <img src="<?= $product->thumbnail_path ?>" alt="<?= $product->name ?>" title="<?= $product->name ?>" />
    
  • Dentro del item

    <a href="<?= $product->url ?>" title=""><?= $product->name ?></a>
    
  • Dentro del item

    DESDE $<?= $product->price ?>
    

Paso 6:

  • En la carpeta tienda/cafe/index.php colocar el siguiente código en la cabecera

    <?php
    
    	  include_once "../../app/config.php"; 
    	  include_once "../../app/ProductsController.php";
    	  include_once "../../app/CategoriesController.php";
    
    	  $productsController = new ProductsController(); 
    	  $categoriesController = new CategoriesController(); 
    
    	  $mezclas = $productsController -> getByCategory('mezclas');
    	  $autores = $productsController -> getByCategory('autor');
    	  $origenes = $productsController -> getByCategory('origen');
    
    	  $merchs = $productsController -> getByCategory('merch');
    
    	?>
    
  • Dentro del mismo archivo index ubicar el primer item que contenga la clase product_item_coffee_mezclas

  • Se deben borrar o comentar todos los items y dejar solo 1, el cual se repetirá en bucle a través del ciclo foreach con el siguiente código:

    
    <?php if (isset($mezclas) && count($mezclas)): ?>
    <?php foreach ($mezclas as $product): ?> 
    <?php $product = $productsController->getQuickView($product) ?>
    
    Aquí va el código del item
    
    <?php endforeach ?>
    <?php endif ?>
    
  • Dentro del item

    <a href="<?= $product->url ?>" >
    
  • Dentro del item hay que ubicar la imagen y reemplazar el código por el siguiente:

    <img src="<?= $product->thumbnail_path ?>" alt="<?= $product->name ?>" title="<?= $product->name ?>" />
    
  • Dentro del item

    <a href="<?= $product->url ?>" title=""><span style="font-family: 'daisywhl';"><?= $product->name ?></span></a>
    
  • Dentro del item

    DESDE $<?= $product->price ?>
    
  • Dentro del mismo archivo index ubicar el primer item que contenga la clase product_item_coffee_autor

  • Se deben borrar o comentar todos los items y dejar solo 1, el cual se repetirá en bucle a través del ciclo foreach con el siguiente código:


<?php if (isset($autores) && count($autores)): ?>
<?php foreach ($autores as $product): ?> 
<?php $product = $productsController->getQuickView($product) ?>

Aquí va el código del item

<?php endforeach ?>
<?php endif ?>
  • Dentro del item

    <a href="<?= $product->url ?>" >
    
  • Dentro del item hay que ubicar la imagen y reemplazar el código por el siguiente:

    <img src="<?= $product->thumbnail_path ?>" alt="<?= $product->name ?>" title="<?= $product->name ?>" />
    
  • Dentro del item

    <a href="<?= $product->url ?>" title=""><?= $product->name ?></a>
    
  • Dentro del item

    DESDE $<?= $product->price ?>
    
  • Dentro del mismo archivo index ubicar el primer item que contenga la clase product_item_coffee_origen

  • Se deben borrar o comentar todos los items y dejar solo 1, el cual se repetirá en bucle a través del ciclo foreach con el siguiente código:


<?php if (isset($origenes) && count($origenes)): ?>
<?php foreach ($origenes as $product): ?> 
<?php $product = $productsController->getQuickView($product) ?>

Aquí va el código del item

<?php endforeach ?>
<?php endif ?>
  • Dentro del item

    <a href="<?= $product->url ?>" >
    
  • Dentro del item hay que ubicar la imagen y reemplazar el código por el siguiente:

    <img src="<?= $product->thumbnail_path ?>" alt="<?= $product->name ?>" title="<?= $product->name ?>" />
    
  • Dentro del item

    <a href="<?= $product->url ?>" title=""><?= $product->name ?></a>
    
  • Dentro del item

    DESDE $<?= $product->price ?>
    
  • Dentro del mismo archivo index ubicar el primer item que contenga la clase product_item_favorite

  • Se deben borrar o comentar todos los items y dejar solo 1, el cual se repetirá en bucle a través del ciclo foreach con el siguiente código:


<?php if (isset($merchs) && count($merchs)): ?>
<?php foreach ($merchs as $product): ?> 
<?php $product = $productsController->getQuickView($product) ?>

Aquí va el código del item

<?php endforeach ?>
<?php endif ?>
  • Dentro del item
    <a href="<?= $product->url ?>" >
    
  • Dentro del item hay que ubicar la imagen y reemplazar el código por el siguiente:
    <img src="<?= $product->thumbnail_path ?>" alt="<?= $product->name ?>" title="<?= $product->name ?>" />
    
  • Dentro del item
    <a href="<?= $product->url ?>" title=""><?= $product->name ?></a>
    
  • Dentro del item
    $<?= $product->price ?>
    

Paso 7:

  • En la carpeta tienda/merch/index.php colocar el siguiente código en la cabecera

    <?php
    
    	  include_once "../../app/config.php"; 
    	  include_once "../../app/ProductsController.php";
    	  include_once "../../app/CategoriesController.php";
    
    	  $productsController = new ProductsController(); 
    	  
    	  $products = $productsController -> getByCategory('merch');
    
    	?>
    
  • Dentro del mismo archivo index ubicar el primer item que contenga la clase product_item_merch

  • Se deben borrar o comentar todos los items y dejar solo 1, el cual se repetirá en bucle a través del ciclo foreach con el siguiente código:


<?php if (isset($products) && count($products)): ?>
<?php foreach ($products as $product): ?> 
<?php $product = $productsController->getQuickView($product) ?>

Aquí va el código del item

<?php endforeach ?>
<?php endif ?>
  • Dentro del item
    <a href="<?= $product->url ?>" >
    
  • Dentro del item hay que ubicar la imagen y reemplazar el código por el siguiente:
    <img src="<?= $product->thumbnail_path ?>" alt="<?= $product->name ?>" title="<?= $product->name ?>" />
    
  • Dentro del item
    <a href="<?= $product->url ?>" title=""> <span style="font-family: 'daisywhl';"><?= $product->name ?></span></a>
    
  • Dentro del item
    DESDE $<?= $product->price ?>
    

Paso 8:

  • En la carpeta tienda/accesorios/index.php colocar el siguiente código en la cabecera

    <?php
    
    	  include_once "../../app/config.php"; 
    	  include_once "../../app/ProductsController.php";
    	  include_once "../../app/CategoriesController.php";
    
    	  $productsController = new ProductsController(); 
    	  
    	  $products = $productsController -> getByCategory('accesorios');
    
    	?>
    
  • Dentro del mismo archivo index ubicar el primer item que contenga la clase product_item_accessories

  • Se deben borrar o comentar todos los items y dejar solo 1, el cual se repetirá en bucle a través del ciclo foreach con el siguiente código:


<?php if (isset($products) && count($products)): ?>
<?php foreach ($products as $product): ?> 
<?php $product = $productsController->getQuickView($product) ?>

Aquí va el código del item

<?php endforeach ?>
<?php endif ?>
  • Dentro del item
    <a href="<?= $product->url ?>" >
    
  • Dentro del item hay que ubicar la imagen y reemplazar el código por el siguiente:
    <img src="<?= $product->thumbnail_path ?>" alt="<?= $product->name ?>" title="<?= $product->name ?>" />
    
  • Dentro del item
    <a href="<?= $product->url ?>" title=""><?= $product->name ?></a>
    
  • Dentro del item
    DESDE $<?= $product->price ?>
    

Paso 9:

  • En la carpeta tienda/cafe/diablo/index.php colocar el siguiente código en la cabecera
    <?php
    
      include_once "../../../app/config.php"; 
      include_once "../../../app/ProductsController.php";
      include_once "../../../app/CategoriesController.php";
    
      $productsController = new ProductsController(); 
      $categoriesController = new CategoriesController(); 
    
      if(isset($_GET['slug'])) {
    
        $grand_product = $productsController -> getBySlug($_GET['slug']); 
    
      }else{
        header("Location:".$_SERVER['HTTP_REFERER']);
      }
    
      if (is_null($grand_product)) {
        header("Location:".$_SERVER['HTTP_REFERER']);
      } 
    
      $features = $productsController ->getFeatures($grand_product,"molienda");
      $backgroud = $productsController ->getFile($grand_product,"background_".$_GET['slug']);
      $stock = $productsController ->getStock($grand_product->presentations);;
    
    
      $tueste = $productsController ->getFile($grand_product,"tueste_".$_GET['slug']);
    
      $perfil_de_sabor = $productsController ->getFile($grand_product,"perfil_de_sabor_".$_GET['slug']); 
    
    ?>
    

DONE

  • Dentro del mismo archivo index ubicar el primer item que contenga la clase cover_product_details este contiene la portada del item a reemplazar, reemplazar el código contenido por el siguiente:

    <img
        src="<?= $productsController->getCover($grand_product) ?>"
        alt="<?= $grand_product->name ?>" 
    />
    
  • Dentro del mismo archivo ubicar el item con la clase background-image-holder

  • Ubicar product_title_details #done

  • Ubicar product_price_details # donen

  • Ubicar product_description_details #done

  • Dentro de sizes_items_details ubicar el select #done colocarle onchange="updateSelection(this)" #done eliminar los options #done y colocar el siguiete código

    presentations) && count($grand_product->presentations)): ?>
      <?php foreach ($grand_product->presentations as $presentation): ?> 
          <option data-id="<?= $presentation->id ?>" data-price="<?= $presentation->current_price->amount ?>" value="<?= $presentation->id ?>" data-product='<?= json_encode($productsController->getQuickView($grand_product,$presentation->id)) ?>' >
              <?= $presentation->description ?>
          </option> 
      <?php endforeach ?>
      <?php endif ?> #done
    

    importate: este item tiene un id similar al siguiente: form_456731144_ed-f-456731147 reserva ese id porque se necesitará

    por alguna puta mamada esta mierda se duplicao dio esto todo esto esta duplicado aaaaaa pinche html ogt verga

  • Dentro de quantity_items_product ubicar el select # done colocar la clase class="cantidad_producto" al select # done

    eliminar los options y colocar el siguiente código

    0): ?>
      <?php for ($i = 1; $i < $stock; $i++): ?>
          <option value="<?= $i ?>">
              <?= $i ?>
          </option>
          <?php if ($i > 9) { break; } ?>
      <?php endfor; ?>
    
    # done
  • Dentro del item molienda_container ubicar el select colocarle la clase al select class="feature_product" eliminar los options y colocar el siguiente código

      <option value="<?= $feature  ?>">
          <?= $feature  ?>
      </option>
    
  • Dentro del item buscar el objeto con la clase boton_add_to_cart añadir el siguiente código como atributo onclick="QuickAdd(this)" data-product="getQuickView($grand_product)) ?>"

  • Ubicar el item con la clase tueste_item_details eliminar el código interno y colocar el siguiente

      <img src="<?= $tueste ?>" alt="" />
    
      <?php else: ?>
    
      <img src="/images/250/10441024/escala_tueste.png" alt="" />
    
      <?php endif ?> 
    
  • Ubicar el item con la clase sabor_item_details eliminar el código interno y colocar el siguiente

      <img src="<?= $perfil_de_sabor ?>" alt="" />
    
      <?php else: ?>
    
      <img src="/images/250/10441024/escala_tueste.png" alt="" />
    
      <?php endif ?> 
    
  • Buscar la galeria, son 4 items con la clase ed-gallery-thumb borrar todos menos 1 y colocar el código sobre y debajo siguiente

    images)): ?>
      <?php foreach ($grand_product->images as $image): ?>  
      <?php if (!$image->is_cover): ?> 
    
       
      
      <?php endif ?>
      <?php endforeach ?> 
      <?php endif ?>
    

    dentro del li reemplazar el código interno por lo siguiente:

    Caption
  • ubicar también: product_item_recomendation

    • eliminar todos dejando el primero
    related_products) && count($grand_product->related_products)): ?> related_products as $product): ?> getQuickView($product) ?>

    dentro del item contiene una clase item_recomendation_name colocar el siguiente código

    <?= $product->name ?>

    <a href="url ?>" title=""class="item_recomendation_name" title="">name ?>

    dentro del item contiene una clase item_recomendation_price colocar el siguietne código

    DESDE $price ?>

  • antes del cierre del body añadir el siguiente código:

    importante el item id es la variable reserva en pases anteriores: ejemplo form_456731144_ed-f-456731147

  • antes del cierre del head

    importante el id es el reservado en pasos anteriores: ejemplo: form_456731144_ed-f-456731147

Paso 10:

  • En la raiz del proyecto crear una carpeta LAYOUTS

    • dentro de la carpeta layouts crear un archivo cart_mobile.template.php y colocar el código
    <?php 
      if (!isset($_SESSION)) {  
        include_once "../app/config.php";
      }
    ?>
    
    
    <?php $total = 0; ?>
    <?php if (isset($_SESSION['cart']) && count($_SESSION['cart'])): ?> 
    <?php foreach ($_SESSION['cart'] as $product): ?>
    <span id="cart_container_mobile"></span>
    
    aquí va el código
    
    <?php $total += ($product->cantidad*$product->price) ?> 
    <?php endforeach ?>
    <?php endif ?>
    
    
    • ubicar el carrito product_item_cart en el archivo index.php principal

    • reservar un item más el separador que está sobre el para complementar el código anterior

    • la imagen del item debería verse así:

    <?= $product->name ?>

    • ubicar el item con la clase resumen_carrito_nav se debe tomar ese item y se debe colocar dentro del layout debajo del ciclo, quedando de la siguiente manera:
    <div class="ed-element ed-separator remove_item_on_update" id="ed-456730127"><hr class="bg-primary" /></div>
    <div class="ed-element ed-container wv-boxed wv-spacer preset-columns-two-v2-subtotal-carrito resumen_carrito_nav remove_item_on_update" id="ed-456730142">
        <div class="inner">
            <div class="ed-element ed-container columns-box wv-overflow_visible" id="ed-456730145">
                <div class="inner">
                    <div class="ed-element ed-text custom-theme" id="ed-456730130">
                        <p style="text-align: left;"><span style="font-family: 'Roboto';">Subtotal</span></p>
                    </div>
                </div>
            </div>
            <div class="ed-element ed-container columns-box wv-overflow_visible total_item_cart" id="ed-456730148">
                <div class="inner">
                    <div class="ed-element ed-text custom-theme" id="ed-456730151">
                        <p style="text-align: right;"><span style="font-family: 'Roboto';" class="total_item_carrito_nav">$1,740</span></p>
                    </div>
                </div>
            </div>
        </div>
    </div>
    

    PENDING

    • por último se deben eliminar todos los archivos index los items con la clase: remove_item_on_update

Paso 9:

  • En la carpeta tienda/merch/sudadera/index.php colocar el siguiente código en la cabecera

    	<?php
    	    
    	  include_once "../../../app/config.php"; 
    	  include_once "../../../app/ProductsController.php";
    	  include_once "../../../app/CategoriesController.php";
    
    	  $productsController = new ProductsController(); 
    	  $categoriesController = new CategoriesController(); 
    
    	  if(isset($_GET['slug'])) {
    
    	    $grand_product = $productsController -> getBySlug($_GET['slug']); 
    
    	  }else{
    	    header("Location:".$_SERVER['HTTP_REFERER']);
    	  }
    
    	  if (is_null($grand_product)) {
    	    header("Location:".$_SERVER['HTTP_REFERER']);
    	  } 
    
    	  $stock = $productsController ->getStock($grand_product->presentations);;
    
    	?>
    

- Dentro del mismo archivo index ubicar el item que contenga la clase ``` name_big_product  ``` 
	reemplazar el texto con el código siguiente
	``` 
	<?= $grand_product->name ?> 
	``` 

- Dentro del mismo archivo index ubicar el item que contenga la clase ``` price_big_product  ``` 
	reemplazar el texto con el código siguiente
	```
	$<?= number_format( $productsController->getPrice($grand_product->presentations) ,2) ?>
	```

- Dentro del mismo archivo index ubicar el item que contenga la clase ``` description_big_product  ``` 
	reemplazar el texto con el código siguiente
	```
	<?= $grand_product->description ?>
	``` 

- Dentro del item ``` cover_product_details ``` se debe ubicar el div con la configuración del sliders 
	
	```

	<?php  
	    $imagenes = '';

	    if (isset($grand_product) && isset($grand_product->images)):
	        foreach ($grand_product->images as $image): 
	             $imagenes .= ',{"image":"'.$image->full_path.'","title":""}';
	        endforeach;
	    endif;

	    $imagenes = substr($imagenes, 1);
	?> 

	<div
	    class="slider-container has-dots slick-dotted slick-initialized slick-slider"
	    data-parameters='{"items":[<?= $imagenes ?>],"adaptiveHeight":true,"slidesToShow":1,"slidesToScroll":1,"rows":1,"slidesPerRow":1,"height":null,"animation":"slide","animationSpeed":"500ms","direction":"horizontal","autoplay":true,"autoplaySpeed":"5s","pauseOnHover":true,"loop":true,"nav":false,"dots":true,"enlarge":true,"retinaImages":true,"lazyLoad":"progressive","variableWidth":false,"centerMode":false,"centerPadding":"0px","asNavFor":"","responsive":[{"breakpoint":976,"settings":{"slidesToShow":1,"slidesToScroll":1,"centerPadding":"0px"}},{"breakpoint":576,"settings":{"slidesToShow":1,"slidesToScroll":1,"centerPadding":"0px"}}],"insideContainer":false}'
	    style="max-width: 100%;"
	></div>

	```
- Dentro del item ``` talla_presnentations ``` se debe tomar el primer item y recorrer las presentaciones 
	
	```
	<?php if (isset($grand_product->presentations) && count($grand_product->presentations)): ?>
    <?php foreach ($grand_product->presentations as $presentation): ?>
    
    <div class="ed-element ed-container columns-box wv-overflow_visible" id="ed-456731279">
        <div class="inner">
            <div class="ed-element ed-button custom-theme" id="ed-456731273">

                

                <a
                    href="#"
                    onclick="updateSelection(this,'merch')"
                    data-id="<?= $presentation->id ?>" 
                    data-price="<?= $presentation->current_price->amount ?>"
                    data-product='<?= json_encode($productsController->getQuickView($grand_product,$presentation->id)) ?>'
                    class="button center button-variant-primary bg-background color-default border-color-primary bg-active-primary color-active-background border-color-active-primary presentations"
                >
                    <?= $presentation->description ?>
                </a>

                

            </div>
        </div>
    </div>

    <?php endforeach ?>
    <?php endif ?> 
	```

	como se puede observar al item anterior se le debe añadir la clase ```presentations```

- Dentro del item ```quantity_items_details``` buscar el select y añadir la clase ```cantidad_producto```
	y añadir este código dentro del select 

	```
	<?php if (isset($stock) && $stock > 0): ?>
        <?php for ($i = 1; $i < $stock; $i++): ?>
            <option value="<?= $i ?>">
                <?= $i ?>
            </option>
            <?php if ($i > 9) { break; } ?>
        <?php endfor; ?>
    <?php endif; ?> 
	```

- Dentro del item ```button_add_big_product```

	añadir el atributo ```onclick="QuickAdd(this)"```

	<a
        href="#"
        onclick="QuickAdd(this)" 
        class="button center button-variant-primary button-xlarge color-background bg-active-background color-active-default border-color-active-primary button_add_big_product"
        style="background-color: rgb(72, 79, 71);"
    >
        Agregar al carrito
    </a>
    <?php else: ?>

        <h3>
            Este producto se encuentra agotado
        </h3>

    <?php endif ?>

- Dentro del item ```ed-gallery-items```
	
	```
	<li id="ed-gallery-item_9970970" class="ed-gallery-thumb" style="width: 800px; padding: 0px;">
        <a href="<?= $image->full_path ?>" target="_blank" title="Caption">
            <img
                src="<?= $image->full_path ?>"
                alt="Caption"
                srcset="
                    data:image/svg+xml,
                    %3Csvg%20width='800'%20viewBox='0%200%20800%20800'%20xmlns='http://www.w3.org/2000/svg'%3E%3Crect%20width='800'%20height='800'%20style='fill:%20%23F7F7F7'%20/%3E%3C/svg%3E
                "
                data-src="<?= $image->full_path ?>"
                class="ed-lazyload"
                data-srcset="<?= $image->full_path ?>"
            />
        </a>
    </li>
    ```

# done
- Buscar los item con la clase ```product_item_recomendation``` 
	
	```
	<?php if (isset($grand_product->related_products) && count($grand_product->related_products)): ?>
    <?php foreach ($grand_product->related_products as $product): ?>
    <?php 
        $product->categories = $grand_product->categories;
    ?>
    <?php $product = $productsController->getQuickView($product) ?>

    <div class="ed-element ed-container columns-box wv-overflow_visible product_item_recomendation" id="ed-456731237">
        <div class="inner">
            <div class="ed-element ed-image" id="ed-456731240">
                <a href="<?= $product->url ?>">
                    <img src="<?= $product->thumbnail_path ?>" alt="<?= $product->name ?>"  />
                </a>
            </div>
            <div class="ed-element ed-text custom-theme" id="ed-456731243">
                <p style="line-height: 1.15; text-align: center;">
                    <span style="font-size: 18px; font-family: 'daisywhl';"><a href="<?= $product->url ?>" title=""><?= $product->name ?></a></span>
                </p>
                <p style="line-height: 1; text-align: center;"><span style="font-size: 14px; color: rgb(94, 94, 94); font-family: 'daisywhl';">DESDE $<?= $product->price ?></span></p>
            </div>
        </div>
    </div>

    <?php endforeach ?>
    <?php endif ?> 
    ```

### Paso 2: 
	
	En todos los archivos colocar el siguiente código justo antes del cierre del </body>
	
	Scripts
	```
	<input type="hidden" id="g-recaptcha-response" name="g-recaptcha-response">

	<script src="https://unpkg.com/[email protected]/dist/axios.min.js"></script>
	<script src="<?= BASE_PATH ?>js/toasty/dist/toasty.min.js" type="text/javascript"></script>
	<script src="<?= BASE_PATH ?>js/functions.js"></script>
    <script src="<?= BASE_PATH ?>js/shop.js"></script>
    <script src="<?= BASE_PATH ?>js/auth.js"></script>
	
	<script src='https://www.google.com/recaptcha/api.js?render=<?= PUBLIC_KEY_GG ?>'></script>
	<script>
		grecaptcha.ready(function() {
		grecaptcha.execute('<?= PUBLIC_KEY_GG ?>', {action: 'homepage'})
			.then(function(token) {
			document.getElementById('g-recaptcha-response').value=token;
		});
		});
	</script>
	```

### Paso 2: 
	
	En todos los archivos colocar dentro de la etiqueta <head></head> el siguiente código:

	```
	<link href="<?= BASE_PATH ?>js/toasty/dist/toasty.min.css" rel="stylesheet">

	<script type="text/javascript">
        var global_token = '<?= $_SESSION['token'] ?>';
        var global_url = '<?= BASE_PATH ?>';
        var le = <?= (DEVELOP_MODE) ?>;
        var lg = <?= (isset($_SESSION['client_id']) && $_SESSION['client_id'] != "") ? 'true' : 'false' ?>; 
    </script> 
	```

### Paso 2: 

	```
	Código del carrito
	```


### Paso 9:

- En la carpeta login/index.php colocar el siguiente código en la cabecera 
	```
	<?php
		include_once "../app/config.php";    

		if (isset($_SESSION['client_id'])) {
			header("Location:" . BASE_PATH . 'account/dashboard');
		}
	?>
	```

- Dentro del mismo archivo index ubicar el item que contiene la clase ``` login_email  ```, dentro de ese elemento ubicar el input y asignar el atributo name a  ``` name="email"  ```

- Dentro del mismo archivo index ubicar el item que contiene la clase ``` login_password  ```, dentro de ese elemento ubicar el input y asignar el atributo name a  ``` name="password"  ``` y el type a ``` type="password" ```


- Dentro del mismo archivo index ubicar el item que contiene la clase ``` register_email  ```, dentro de ese elemento ubicar el input y asignar el atributo name a  ``` name="email"  ```

- Dentro del mismo archivo index ubicar el item que contiene la clase ``` register_password  ```, dentro de ese elemento ubicar el input y asignar el atributo name a  ``` name="password"  ``` y el type a ``` type="password" ```

- Dentro del mismo archivo index ubicar el item que contiene la clase ``` register_password_confirmation  ```, dentro de ese elemento ubicar el input y asignar el atributo name a  ``` name="password_confirmation"  ``` y el type a ``` type="password" ```

- Dentro del mismo archivo index ubicar el item que contiene la clase ``` register_name  ```, dentro de ese elemento ubicar el input y asignar el atributo name a  ``` name="name"  ```

- Dentro del mismo archivo index ubicar el item que contiene la clase ``` register_phone  ```, dentro de ese elemento ubicar el input y asignar el atributo name a  ``` name="phone"  ```

-Al final del mismo archivo index agregar lo siguiente, antes del ``` </body> ```
	```
        <script type="text/javascript">
            document.querySelector('.login_form').addEventListener('submit', validateAccess);
            document.querySelector('.register_form').addEventListener('submit', validateRegister);
        </script>

	```

### Paso 10: 

- Dentro del archivo index de las carpetas [account/dashboard,  account/details, account/addresses, account/orders] ubicar el item que tiene un href hacia el login ``` href="/login"  ```

- Remplazar el href con 
	```
		href="/clients?action=logout"
	```
### Paso 11: 

- En la carpeta account/dashboard/index.php colocar el siguiente código en la cabecera 
	```
	<?php
		include_once "../../app/config.php";    

		if (!isset($_SESSION['client_id'])) {
			header("Location:" . BASE_PATH . 'login/');
		}
	?>
	```

- Dentro del mismo archivo index ubicar el item que contiene la clase ``` header_welcome  ```

- Remplazar el interior con 
	```
	Hola <?= $_SESSION['name'] ?> (no eres <?= $_SESSION['name'] ?>? <a href="/clients?action=logout">Cerrar sesión</a> )
	```

### Paso 12:

- En la carpeta account/details/index.php colocar el siguiente código en la cabecera 
	```
	<?php
		include_once "../../app/config.php";    

		if (!isset($_SESSION['client_id'])) {
			header("Location:" . BASE_PATH . 'login');
		}
	?>
	```

- Dentro del mismo archivo index ubicar el item que contiene la clase ``` details_email  ```, dentro de ese elemento ubicar el input y asignar el atributo name a  ``` name="email"  ``` y el value a ``` value="<?= $_SESSION['email'] ?>" ```

- Dentro del mismo archivo index ubicar el item que contiene la clase ``` details_name  ```, dentro de ese elemento ubicar el input y asignar el atributo name a  ``` name="name"  ``` y el value a ``` value="<?= $_SESSION['name'] ?>" ```

- Dentro del mismo archivo index ubicar el item que contiene la clase ``` details_lastname  ```, dentro de ese elemento ubicar el input y asignar el atributo name a  ``` name="lastname"  ``` y el value a ``` value="<?= $_SESSION['lastname'] ?>" ```

- Dentro del mismo archivo index ubicar el item que contiene la clase ``` details_phone  ```, dentro de ese elemento ubicar el input y asignar el atributo name a  ``` name="phone"  ``` y el value a ``` value="<?= $_SESSION['phone'] ?>" ```

- Dentro del mismo archivo index ubicar el item que contiene la clase ``` details_password_current  ```, dentro de ese elemento ubicar el input y asignar el atributo name a  ``` name="password_current"  ``` y el type a ``` type="password" ```

- Dentro del mismo archivo index ubicar el item que contiene la clase ``` details_password_1  ```, dentro de ese elemento ubicar el input y asignar el atributo name a  ``` name="password_1"  ``` y el type a ``` type="password" ```

- Dentro del mismo archivo index ubicar el item que contiene la clase ``` details_password_2  ```, dentro de ese elemento ubicar el input y asignar el atributo name a  ``` name="password_2"  ``` y el type a ``` type="password" ```

-Al final del mismo archivo index agregar lo siguiente, antes del ``` </body> ```
	```
        <script type="text/javascript">
            document.querySelector('.details_edit_form').addEventListener('submit', validateUpdate);
            document.querySelector('.password_form').addEventListener('submit', validateChangePassword);
        </script>

	```

### Paso 13: 

- En la carpeta account/addresses/index.php colocar el siguiente código en la cabecera 
	```
	<?php
		include_once "../../app/config.php";    
		include_once "../../app/AuthController.php";

		$authController = new AuthController();

		$authController = new AuthController();

		if (!isset($_SESSION['client_id'])) {
			header("Location:" . BASE_PATH . 'login/');
		}

		$addresses = $authController->getAddress();

	?>
	```

- Dentro del mismo archivo index ubicar los items que contienen la clase ``` address-data  ```

- Eliminar los elementos y en su lugar agregar lo siguiente 
	```
	<?php if (isset($addresses) && count($addresses)) : ?>
	<?php foreach ($addresses as $address) : ?>
	<div class="ed-element ed-container image-boxes-box wv-overflow_visible address-data" data-min-count="1" data-max-count="127" data-mappable="1" id="ed-456888664">
		<div class="inner">       
			<div class="ed-element ed-text custom-theme" data-min-count="0" data-max-count="1" data-mappable="1" id="ed-456888667">
				<p id="isPasted"><strong>Nombre:&nbsp;</strong></p>
				<p><span style="text-align: right; font-size: 1rem; letter-spacing: 0px;">
					<?= $address->first_name ?> <?= $address->last_name ?>
				</span></p>
				<p><strong>Calle:</strong><span style="white-space: pre;">&nbsp; &nbsp;&nbsp;</span></p>
				<p><?= $address->street_and_use_number ?></p>
				<p>
					<strong>Apartamento:</strong><span style="white-space: pre;"><strong>&nbsp; &nbsp;&nbsp;</strong></span>
				</p>
				<p><span style="white-space: pre;"><?= $address->apartment ?></span></p>
				<p>
					<strong>Provincia:</strong><span style="white-space: pre;"><strong>&nbsp;</strong> &nbsp;&nbsp;</span>
				</p>
				<p><?= $address->city ?> <?= $address->state ?></p>
				<p><strong>Código postal:</strong><span style="white-space: pre;">&nbsp; &nbsp;&nbsp;</span></p>
				<p><?= $address->postal_code ?> <?= $address->country->code ?></p>
				<p>
					<strong>Teléfono:</strong><span style="white-space: pre;"><strong>&nbsp;</strong> &nbsp;&nbsp;</span>
				</p>
                <p><span style="white-space: pre;"><?= $address->phone_number ?></span></p>
				<p><strong>Paí</strong><strong>s:</strong></p>
				<p><?= $address->references ?></p>
			</div>
		</div>
		<style>
			#ed-456888664 > .inner {
				padding: 10px;
			}
		</style>
	</div>
	<?php endforeach ?>
	<?php endif ?>
	```


### Paso 14: 

- En la carpeta account/orders/index.php colocar el siguiente código en la cabecera 
	```
	<?php
		include_once "../../app/config.php";    
		include_once "../../app/AuthController.php";

		$authController = new AuthController();
		if (!isset($_SESSION['client_id'])) {
			header("Location:" . BASE_PATH . 'login/');
		}

		$orders = array_reverse($authController->getOrders($_SESSION['client_id']));
	?>
	```

- Dentro del mismo archivo index ubicar el item que contiene la clase ``` table-text  ```

- Dentro del item anterior, hay un elemento ``` <table> ``` remplazar el interior del ``` <tbody> ``` con 
	```
	<?php if (isset($orders) && count($orders)) : ?>
	<?php foreach ($orders as $order) : ?>
	<tr>
		<td style="width: 17.42%;"><div style="text-align: center;">#<?= $order->folio ?></div></td>
		<td style="width: 19.2363%;">
			<div style="text-align: center;"><?= (new DateTime($order->order_date))->format('F d, Y') ?> <span style="white-space: pre;" id="isPasted">&nbsp; &nbsp;&nbsp;</span>&nbsp;</div>
		</td>
		<td style="width: 19.1538%;"><div style="text-align: center;"><?= $order->order_status->name ?></div></td>
		<td style="width: 20%; text-align: center;">
			<div style="text-align: center;">
				$ <?= number_format($order->total,2) ?> <br>
				<small>
					por <?= count($order->presentations) ?> artículos
				</small>
			</div>
		</td>
		<td style="width: 24.1899%;">
			<div style="text-align: center;">
				<a href="<?= BASE_PATH ?>account/order/<?= $order->folio ?>/">
					Detalles
				</a>
			</div>
		</td>
	</tr>
	<?php endforeach ?>
	<?php endif ?>
	```

### Paso 15:
- En la carpeta carrito/index.php colocar el siguiente código en la cabecera 

<?php
	include_once "../app/config.php"; 
	include_once "../app/ProductsController.php";

	$productsController = new ProductsController(); 
?>
- Dentro del mismo archivo index ubicar el primer item que contenga la clase ``` product_item_cart  ``` agregarle esto en las clases ``` item_<?= $product->id ?> ```

- Se deben borrar o comentar todos los items y dejar solo 1, el cual se repetirá en bucle a través del ciclo foreach con el siguiente código: 

Aquí va el código del item


cantidad * $product->price) ?>

- Dentro del item buscar la imagen con clase ``` cart_product_img  ``` y reemplazarla con 


- Dentro del item buscar el span con clase ``` cart_product_name  ``` y reemplazar el contenido con 

<?= $product->name ?>

- Dentro del item buscar el span con clase ``` cart_product_price  ``` y reemplazar el contenido con 

$price) ?? 0, 2)?>


- Dentro del item buscar el span con clase ``` cart_product_subtotal  ``` y reemplazar el contenido con 

$cantidad * $product->price) ?? 0, 2) ?>


- Dentro del item buscar el div con clase ``` cart_product_quantity  ``` y dentro hay un input agregarle el atributo value 

value="cantidad ?>"


- Dentro del item buscar el span con clase ``` cart_product_delete  ``` y agregarle los siguientes atributos 

onclick="removeItemCart(this)" data-id="id ?>" data-parent="item_id?>" role="button"


- Dentro del item buscar el span con clase ``` cart_product_description  ``` y vaciarlo (luego vemos que ponerle, ahorita no sé, pq los cafés no tienen talla y la description es muy larga y se ve feo)

-  Buscar el span con clase ``` cart_subtotal  ``` y reemplazar el contenido con 

$


-  Buscar el span con clase ``` cart_total  ``` y reemplazar el contenido con 

$


### Paso 16:
- En la carpeta form-carrito/index.php colocar el siguiente código en la cabecera 

<?php
	include_once "../app/config.php"; 
	include_once "../app/ProductsController.php";

	$productsController = new ProductsController(); 
?>
- Dentro del mismo archivo index ubicar el primer item que contenga la clase ``` cart_item_row  ```

- Se deben borrar o comentar todos los items y dejar solo 1, el cual se repetirá en bucle a través del ciclo foreach con el siguiente código: 

Aquí va el código del item


cantidad * $product->price) ?>

- Dentro del item buscar el span con clase ``` cart_product_name  ``` y reemplazar el contenido con 

name ?>

- Dentro del item buscar el span con clase ``` cart_product_price  ``` y reemplazar el contenido con 

$price * $product->cantidad, 2)?>


- Dentro del item buscar el span con clase ``` cart_product_quantity  ``` y reemplazar el contenido con 

$price,2) ?> x cantidad ?>


- Buscar el span con clase ``` checkout_subtotal  ``` y reemplazar el contenido con 

$


- Buscar el span con clase ``` checkout_total  ``` y reemplazar el contenido con 

$


- Buscar los botones con clase ``` submit_checkout  ``` y agregarles esto
	```
	onclick="document.querySelector('.checkout_form')?.dispatchEvent(new Event('submit', { cancelable: true }))"
	```

- Dentro del mismo archivo index ubicar el item que contiene la clase ``` checkout_name  ```, dentro de ese elemento ubicar el input y asignar el atributo name a  ``` name="name"  ```

- Dentro del mismo archivo index ubicar el item que contiene la clase ``` checkout_email  ```, dentro de ese elemento ubicar el input y asignar el atributo name a  ``` name="email"  ```

- Dentro del mismo archivo index ubicar el item que contiene la clase ``` checkout_phone  ```, dentro de ese elemento ubicar el input y asignar el atributo name a  ``` name="phone"  ```

- Dentro del mismo archivo index ubicar el item que contiene la clase ``` checkout_street_and_use_number  ```, dentro de ese elemento ubicar el input y asignar el atributo name a  ``` name="street_and_use_number"  ```

- Dentro del mismo archivo index ubicar el item que contiene la clase ``` checkout_estate  ```, dentro de ese elemento ubicar el input y asignar el atributo name a  ``` name="estate"  ```

- Dentro del mismo archivo index ubicar el item que contiene la clase ``` checkout_city  ```, dentro de ese elemento ubicar el input y asignar el atributo name a  ``` name="city"  ```

- Dentro del mismo archivo index ubicar el item que contiene la clase ``` checkout_postal_code  ```, dentro de ese elemento ubicar el input y asignar el atributo name a  ``` name="postal_code"  ```

- Dentro del mismo archivo index ubicar el item que contiene la clase ``` checkout_references  ```, dentro de ese elemento ubicar el input y asignar el atributo name a  ``` name="references"  ```

-Al final del mismo archivo index agregar lo siguiente, antes del ``` </body> ```
	```
        <script type="text/javascript">
            document.querySelector('.checkout_form').addEventListener('submit', validateOrder);
        </script>

	```


### Paso 16:
- En la carpeta account/form-carrito/index.php colocar el siguiente código en la cabecera 

<?php 
	include_once "../app/config.php";
	include_once "../app/ProductsController.php";
	include_once "../app/ShopController.php";

	if (!isset($_SESSION['client_id'])) {
		header("Location:" . BASE_PATH . 'login/');
	}

	$shopController = new ShopController();
	$productsController = new ProductsController();

	$order = $shopController->getDataOrder($_GET['folio']); 
?>

- Buscar el span con clase ``` order_folio  ``` y reemplazar el contenido con 

ORDEN #


- Dentro del mismo archivo index ubicar el primer item que contenga la clase ``` cart_item_row  ```

- Se deben borrar o comentar todos los items y dejar solo 1, el cual se repetirá en bucle a través del ciclo foreach con el siguiente código: 
presentations) && count($order->presentations)): ?> presentations as $presentation): ?>

Aquí va el código del item


```
  • Dentro del item buscar el span con clase cart_product_name y reemplazar el contenido con
<?php if(isset($presentation->product)): ?>
	<a href="<?= BASE_PATH ?>shop/details/<?= $presentation->product->slug; ?>/">
		<?= $presentation->product->name ?>  
	</a>
<?php endif ?>  
  • Dentro del item buscar el span con clase cart_product_price y reemplazar el contenido con
$<?= number_format(($presentation->pivot->price->amount ?? 0) * $presentation->pivot->quantity,2) ?>
  • Dentro del item buscar el span con clase cart_product_quantity y reemplazar el contenido con
$<?= number_format(($presentation->pivot->price->amount ?? 0),2) ?> x <?= $presentation->pivot->quantity ?>
  • Buscar el span con clase checkout_subtotal y reemplazar el contenido con
$<?= number_format(($order->total),2) ?>
  • Buscar el span con clase checkout_total y reemplazar el contenido con
$<?= number_format(($order->total),2) ?>

Home

  • Seleccionar "product_item_coffe" y tomar al padre contenedor, borrar el contenido y recorrer el arreglo de productos

  • Seleccionar "product_item_favorite" y tomar al padre contenedor, borrar el contenido y recorrer el arreglo de productos

Tienda

  • Seleccionar "product_item_all" y tomar al padre contenedor, borrar el contenido y recorrer el arreglo de productos

Tienda > Café

  • Seleccionar "product_item_coffee" y tomar al padre contenedor, borrar el contenido y recorrer el arreglo de productos

Tienda > category > detalle de producto

```
onclick="QuickAdd(this)"
data-product=""
id="buttonAdd"
```

app.bundle

En la carpeta webcard/static/app.bundle.(este número cambia con cada compilacion).js buscar la siguiente función

submit:function(){var t=this;if("undefined"!=typeof cms&&cms)return!1;if(!this.ajax)return this.$form.submit(),this;if(!this.isSubmitting){this.isSubmitting=!0;var e=$('input[type="file"]:not([disabled])',this.$form);e.each((function(t,e){e.files.length>0||$(e).prop("disabled",!0)}));var n=new FormData(this.$form[0]);"undefined"!=typeof webcard&&"culture"in webcard&&webcard.culture&&n.append("culture",webcard.culture),e.prop("disabled",!1),n.append("id",this.getId()),n.append("tac",Math.floor(((new Date).getTime()-this.time.getTime())/1e3));var r=this.$form.attr("action")||("undefined"!=typeof webcard&&webcard.apiHost?"https://"+webcard.apiHost:"")+"/form_container/submit";return $.ajax({url:r,crossDomain:!0,xhrFields:{withCredentials:!0},data:n,processData:!1,contentType:!1,type:"POST",success:function(e){t.isSubmitting=!1,t.$element.find(".ed-element").each((function(){this.element.destroy()})),t.$element.html(e),t.getViewport().scrollTo(t.$element,"center",300),$(e).is(".wv-success")?t.getViewport().notify("form.success",[t,t.$form]):t.getViewport().notify("form.error",[t,t.$form]),t.wakeup();var n=t.$element.find(".ed-element"),r=[];n.each((function(t,e){var n=i.Z.getTypeClassName($(e).attr("class"));n in window&&r.push(new window[n](e))})),animations.initSubsequent(r)}}).fail((function(e){t.isSubmitting=!1,t.$form.find(".wv-message").remove();var n=$('<div class="wv-message wv-failure">'.concat((null==e?void 0:e.responseText)||"Error while sending the form","</div>"));t.$form.prepend(n).append(n.clone())})),this}}

Vaciarla y dejarla así

submit:function(){}

Validaciones:

Otros

  • Crear .htaccess con este contenido:
     
    

Uúltimo

  • El resto de los archivos index.php colocar:
    <?php
        include_once "../app/config.php";   
    ?>
    

Recursos

# Packages

No description provided by the author
No description provided by the author
No description provided by the author

# Functions

No description provided by the author