PDA

Zobacz pełną wersję : link w obrazku kategoria, produkt



reklama1
11-12-2016, 12:39
Cześć!
Mam pytanie do znawców VirtueMart.
Jak podlinkować zdjęcia w kategorii i danego produktu ? Zamiast klikać na tekst, bezpośrednio na zdjęcie
dla zobrazowania: http://demo.omegatheme.com/index.php?t=joomla&i=ot_keila
Zamiast kliknąć w flower & plant kliknąć w samo zdjęcie.
Z góry dziękuje za pomoc

Bazyl
11-12-2016, 15:03
Hej,

należy zmodyfikować szablon VM.

reklama1
11-12-2016, 16:17
Dzięki za informacje. Szukam instrukcji jak to można zrobić w miarę prosty sposób.

reklama1
11-12-2016, 17:18
Znalazłem na zagranicznym forum że muszę podmienić kod w pliku components\com_virtuemart\views\category\tmpl\defa ult.php jak poniżej. Tylko jest pjeden problem - nie mam takiego kodu w tym pliku. Posiadam VM 3

z tego
<?php /** @todo make image popup */
echo $product->images[0]->displayMediaThumb ('class="browseProductImage" border="0" title="' . $product->product_name . '" ', TRUE, 'class="modal"');
?>

na
<?php /** @todo make image popup */

echo JHTML::_ ( 'link', JRoute::_ ( 'index.php?option=com_virtuemart&view=productdetails&virtuemart_product_id=' .



$product->virtuemart_product_id . '&virtuemart_category_id=' . $product->virtuemart_category_id ),



$product->images[0]->displayMediaThumb( 'class="featuredProductImage" border="0"',false,'class="modal"' ) );

?>

Hajmus
11-12-2016, 18:13
Być może kod, który znalazłeś dotyczy starszej wersji VM niż posiadasz na serwerze. Jaką wersje VM3 dokładnie posiadasz, no i podlinkuj zawartość default.php swojego

reklama1
11-12-2016, 19:19
Chyba jets tak jak mówisz. Wersja VirtueMart 3.0.18


<?php/** * * Show the products in a category * * @package VirtueMart * @subpackage * @author RolandD * @author Max Milbers * @todo add pagination * @link http://www.virtuemart.net * @copyright Copyright (c) 2004 - 2010 VirtueMart Team. All rights reserved. * @license http://www.gnu.org/copyleft/gpl.html GNU/GPL, see LICENSE.php * VirtueMart is free software. This version may have been modified pursuant * to the GNU General Public License, and as distributed it includes or * is derivative of works licensed under the GNU General Public License or * other free or open source software licenses. * @version $Id: default.php 8811 2015-03-30 23:11:08Z Milbo $ */
defined ('_JEXEC') or die('Restricted access');
?> <div class="category-view"> <?php$js = "jQuery(document).ready(function () { jQuery('.orderlistcontainer').hover( function() { jQuery(this).find('.orderlist').stop().show()}, function() { jQuery(this).find('.orderlist').stop().hide()} )});";vmJsApi::addJScript('vm.hover',$js);
if (empty($this->keyword) and !empty($this->category)) { ?><div class="category_description"> <?php echo $this->category->category_description; ?></div><?php}
// Show child categoriesif (VmConfig::get ('showCategory', 1) and empty($this->keyword)) { if (!empty($this->category->haschildren)) {
echo ShopFunctionsF::renderVmSubLayout('categories',arr ay('categories'=>$this->category->children));
}}
if($this->showproducts){?><div class="browse-view"><?php
if (!empty($this->keyword)) { //id taken in the view.html.php could be modified $category_id = vRequest::getInt ('virtuemart_category_id', 0); ?> <h3><?php echo $this->keyword; ?></h3>
<form action="<?php echo JRoute::_ ('index.php?option=com_virtuemart&view=category&limitstart=0', FALSE); ?>" method="get">
<!--BEGIN Search Box --> <div class="virtuemart_search"> <?php echo $this->searchcustom ?> <br/> <?php echo $this->searchCustomValues ?> <input name="keyword" class="inputbox" type="text" size="20" value="<?php echo $this->keyword ?>"/> <input type="submit" value="<?php echo vmText::_ ('COM_VIRTUEMART_SEARCH') ?>" class="button" onclick="this.form.keyword.focus();"/> </div> <input type="hidden" name="search" value="true"/> <input type="hidden" name="view" value="category"/> <input type="hidden" name="option" value="com_virtuemart"/> <input type="hidden" name="virtuemart_category_id" value="<?php echo $category_id; ?>"/>
</form> <!-- End Search Box --><?php } ?>
<?php // Show child categories
?><div class="orderby-displaynumber"> <div class="floatleft vm-order-list"> <?php echo $this->orderByList['orderby']; ?> <?php echo $this->orderByList['manufacturer']; ?> </div> <div class="vm-pagination vm-pagination-top"> <?php echo $this->vmPagination->getPagesLinks (); ?> <span class="vm-page-counter"><?php echo $this->vmPagination->getPagesCounter (); ?></span> </div> <div class="floatright display-number"><?php echo $this->vmPagination->getResultsCounter ();?><br/><?php echo $this->vmPagination->getLimitBox ($this->category->limit_list_step); ?></div>

<div class="clear"></div></div> <!-- end of orderby-displaynumber -->
<h1><?php echo vmText::_($this->category->category_name); ?></h1>
<?php if (!empty($this->products)) { $products = array(); $products[0] = $this->products; echo shopFunctionsF::renderVmSubLayout($this->productsLayout,array('products'=>$products,'currency'=>$this->currency,'products_per_row'=>$this->perRow,'showRating'=>$this->showRating));
?>
<div class="vm-pagination vm-pagination-bottom"><?php echo $this->vmPagination->getPagesLinks (); ?><span class="vm-page-counter"><?php echo $this->vmPagination->getPagesCounter (); ?></span></div>
<?php} elseif (!empty($this->keyword)) { echo vmText::_ ('COM_VIRTUEMART_NO_RESULT') . ($this->keyword ? ' : (' . $this->keyword . ')' : '');}?></div>
<?php } ?></div>
<?php$j = "Virtuemart.container = jQuery('.category-view');Virtuemart.containerSelector = '.category-view';";
vmJsApi::addJScript('ajaxContent',$j);?><!-- end browse-view -->

noras
11-12-2016, 22:37
Modyfikacji trzeba dokonać nadpisywaniem w szablonie.
W zależności jak szablon jest poskładany. Powyzszy plik który wskazałeś odpowiada za wyświetlanie kategori/podkategorii w widoku przeglądu kategorii, a nie wyświetlania samych produktów.

Poszukaj w:

components\com_virtuemart\views\category\tmpl\defa ult.php
Lub w szablonie odpowiednika - nadpisywania szablonem.

Dokładnie szukaj:

echo shopFunctionsF::renderVmSubLayout($this->productsLayout,array('products'=>$this->products,'currency'=>$this->currency,'products_per_row'=>$this->perRow,'showRating'=>$this->showRating));

Powyższe odpowiada za ładowanie sublayots dla wyglądu pojedynczego produktu.

components\com_virtuemart\sublayouts\products.php
Lub odpowiednik nadpisywania w Twoim szablonie.

Musisz zmodyfikować sublayouts\products.php - oczywiście jeśli Twój szablon nadpisuje widoki w taki sam sposób jak oryginalny Virtuemart.

reklama1
11-12-2016, 23:57
Dokładnie pisząc to chodzi mi o podlinkowanie zdjęć zarówno w kategoriach jak i produktach.

Znalazłem ten kod

Dokładnie szukaj:
Kod PHP:
echo*shopFunctionsF::renderVmSubLayout($this->productsLayout,array('products'=>$this->products,'currency'=>$this->currency,'products_per_row'=>$this->perRow,'showRating'=>$this->showRating));*


I teraz pytanie co tam wpisać ?
ten kod

<?php /** @todo make image popup */

echo JHTML::_ ( 'link', JRoute::_ ( 'index.php?option=com_virtuemart&view=productdetails&virtuemart_product_id=' .



$product->virtuemart_product_id . '&virtuemart_category_id=' . $product->virtuemart_category_id ),



$product->images[0]->displayMediaThumb( 'class="featuredProductImage" border="0"',false,'class="modal"' ) );

?>

Czy coś innego ? Podstawowe elementy ogarniam ale tu nie mam pojęcia co wpisać ;/

Z góry dzięki za czas i podpowiedzi.

noras
12-12-2016, 10:20
Jeśli znalazłeś:

echo shopFunctionsF::renderVmSubLayout($this->productsLayout,array('products'=>$this->products,'currency'=>$this->currency,'products_per_row'=>$this->perRow,'showRating'=>$this->showRating));


To znaczy że szablon szuka sublayots z których VM korzysta do wygenerowania widoku pojedynczego produktu w widoku kategorii.

Sublayots - to bardzo fajna sprawa w VMie. Działa to w taki sposób że, jak zmodyfikujesz sobie przycisk 'Dodaj do koszyka', albo wyświetlanie cen produktu. To wystarczy dokonać takiej modyfikacji w jednym miejscu, sublayots odpowiedzialnym za przycisk 'Dodaj do koszyka' albo za ceny. Jeśli szablon i nadpisywanie trzyma się tej konwencji, to zmieniając w jednym miejscu 'Dodaj do koszyka' zmieni Ci się to w każdym produkcie, w widoku kategorii, w modułach itd.

Powyższy kod PHP wczytuje sublayouts z:

components\com_virtuemart\sublayouts\products.php

U mnie ten plik wygląda następiująco:


<?php
/**
* sublayout products
*
* @package VirtueMart
* @author Max Milbers
* @link http://www.virtuemart.net
* @copyright Copyright (c) 2014 VirtueMart Team. All rights reserved.
* @license http://www.gnu.org/copyleft/gpl.html GNU/GPL2, see LICENSE.php
* @version $Id: cart.php 7682 2014-02-26 17:07:20Z Milbo $
*/

defined('_JEXEC') or die('Restricted access');
$products_per_row = empty($viewData['products_per_row'])? 1:$viewData['products_per_row'] ;
$currency = $viewData['currency'];
$showRating = $viewData['showRating'];
$verticalseparator = " vertical-separator";
echo shopFunctionsF::renderVmSubLayout('askrecomjs');

$ItemidStr = '';
$Itemid = shopFunctionsF::getLastVisitedItemId();
if(!empty($Itemid)){
$ItemidStr = '&Itemid='.$Itemid;
}


foreach ($viewData['products'] as $type => $products ) {

$rowsHeight = shopFunctionsF::calculateProductRowsHeights($produ cts,$currency,$products_per_row);

if(!empty($type) and count($products)>0){
$productTitle = vmText::_('COM_VIRTUEMART_'.strtoupper($type).'_PR ODUCT'); ?>
<div class="<?php echo $type ?>-view">
<h4><?php echo $productTitle ?></h4>
<?php // Start the Output
} else if(count($viewData['products'])>1 and count($products)>0){
$productTitle = vmText::_('COM_VIRTUEMART_'.strtoupper($type).'_PR ODUCT'); ?>
<div class="<?php echo $type ?>-view">
<h4><?php echo $productTitle ?></h4><?php
}

// Calculating Products Per Row
$cellwidth = ' width'.floor ( 100 / $products_per_row );

$BrowseTotalProducts = count($products);

$col = 1;
$nb = 1;
$row = 1;

foreach ( $products as $product ) {
if(!is_object($product) or empty($product->link)) {
//vmdebug('$product',$product);
continue;
}
// Show the horizontal seperator
if ($col == 1 && $nb > $products_per_row) { ?>
<div class="horizontal-separator"></div>
<?php }

// this is an indicator wether a row needs to be opened or not
if ($col == 1) { ?>
<div class="row">
<?php }

// Show the vertical seperator
if ($nb == $products_per_row or $nb % $products_per_row == 0) {
$show_vertical_separator = ' ';
} else {
$show_vertical_separator = $verticalseparator;
}

// Show Products ?>
<div class="product vm-col<?php echo ' vm-col-' . $products_per_row . $show_vertical_separator ?>">
<div class="spacer product-container">
<div class="vm-product-media-container">

<a title="<?php echo $product->product_name ?>" href="<?php echo $product->link.$ItemidStr; ?>">
<?php
echo $product->images[0]->displayMediaThumb('class="browseProductImage"', false);
?>
</a>

</div>

<div class="vm-product-rating-container">
<?php echo shopFunctionsF::renderVmSubLayout('rating',array(' showRating'=>$showRating, 'product'=>$product));
if ( VmConfig::get ('display_stock', 1)) { ?>
<span class="vmicon vm2-<?php echo $product->stock->stock_level ?>" title="<?php echo $product->stock->stock_tip ?>"></span>
<?php }
echo shopFunctionsF::renderVmSubLayout('stockhandle',ar ray('product'=>$product));
?>
</div>


<div class="vm-product-descr-container-<?php echo $rowsHeight[$row]['product_s_desc'] ?>">
<h2><?php echo JHtml::link ($product->link.$ItemidStr, $product->product_name); ?></h2>
<?php if(!empty($rowsHeight[$row]['product_s_desc'])){
?>
<p class="product_s_desc">
<?php // Product Short Description
if (!empty($product->product_s_desc)) {
echo shopFunctionsF::limitStringByWord ($product->product_s_desc, 60, ' ...') ?>
<?php } ?>
</p>
<?php } ?>
</div>


<?php //echo $rowsHeight[$row]['price'] ?>
<div class="vm3pr-<?php echo $rowsHeight[$row]['price'] ?>"> <?php
echo shopFunctionsF::renderVmSubLayout('prices',array(' product'=>$product,'currency'=>$currency)); ?>
<div class="clear"></div>
</div>
<?php //echo $rowsHeight[$row]['customs'] ?>
<div class="vm3pr-<?php echo $rowsHeight[$row]['customfields'] ?>"> <?php
echo shopFunctionsF::renderVmSubLayout('addtocart',arra y('product'=>$product,'rowHeights'=>$rowsHeight[$row], 'position' => array('ontop', 'addtocart'))); ?>
</div>

<div class="vm-details-button">
<?php // Product Details Button
$link = empty($product->link)? $product->canonical:$product->link;
echo JHtml::link($link.$ItemidStr,vmText::_ ( 'COM_VIRTUEMART_PRODUCT_DETAILS' ), array ('title' => $product->product_name, 'class' => 'product-details' ) );
//echo JHtml::link ( JRoute::_ ( 'index.php?option=com_virtuemart&view=productdetails&virtuemart_product_id=' . $product->virtuemart_product_id . '&virtuemart_category_id=' . $product->virtuemart_category_id , FALSE), vmText::_ ( 'COM_VIRTUEMART_PRODUCT_DETAILS' ), array ('title' => $product->product_name, 'class' => 'product-details' ) );
?>
</div>

</div>
</div>

<?php
$nb ++;

// Do we need to close the current row now?
if ($col == $products_per_row || $nb>$BrowseTotalProducts) { ?>
<div class="clear"></div>
</div>
<?php
$col = 1;
$row++;
} else {
$col ++;
}
}

if(!empty($type)and count($products)>0){
// Do we need a final closing row tag?
//if ($col != 1) {
?>
<div class="clear"></div>
</div>
<?php
// }
}
}


A w miniatura z linkiem to kod:


<div class="vm-product-media-container">

<a title="<?php echo $product->product_name ?>" href="<?php echo $product->link.$ItemidStr; ?>">
<?php
echo $product->images[0]->displayMediaThumb('class="browseProductImage"', false);
?>
</a>

</div>

Zobacz jak to u Ciebie wygląda, i kombinuj ;) Nie jest to aż tak strasznie skomplikowane - poradzisz sobie na pewno.
PS. Możesz podejrzeć oryginalne pliki VMa, bo oryginalnie miniatura kieruje na stronę produktu ;)

reklama1
12-12-2016, 12:37
No to tak:
Znalazłem ten kod w sublayots (po włączeniu zdjęcia są podlinkowane) którego nie używam bo mi nie odpowiada, rozjeżdża się itd. W ustawieniach VM mam no override przy category i cart Layout


Kod PHP:
<div*class="vm-product-media-container">

******<a*title="<?php*echo*$product->product_name*?>"*href="<?php*echo*$product->link.$ItemidStr;*?>">
*********<?php
*********echo*$product->images[0]->displayMediaThumb('class="browseProductImage"',*false);
*********?>
******</a>

</div>

Czy nie lepiej mi by było dokopać się do domyślnego szablonu i tam wpisać w/w regułę ? Czy może za no override odpowiada inny plik ?

reklama1
13-12-2016, 00:34
Na ten moment udało mi się zrobić podlinkowanie kategori i wygląda ono następująco:
otwieramy plik root / templates/ot_keila/html/com_virtuemart/sublayouts/categories.php i szukamy linii 79 do 83

Podmieniamy ten kod

<div class="ot-cat-image"> <?php // if ($category->ids) { echo $category->images[0]->displayMediaThumb("",false); //} ?> </div>
na ten

<div class="ot-cat-image"> <a href="<?php echo $caturl ?>" title="<?php echo $category->category_name ?>"> <?php // if ($category->ids) { echo $category->images[0]->displayMediaThumb("",false); //} ?> </a> </div>

I gotowe.

Teraz próbuje analogicznie zrobić to samo do produktu ale mi to nie wychodzi. Urywa zdjęcia, nieregularne kolumny itd.
Jeżeli ktoś wie jak rozwiązać ten problem to proszę o informację :)