Back to all examples

Product Details:

PHP
<?php

require_once '../lib/Kendo/Autoload.php';

?>

<div class="demo-section k-content wide">
    <div id="products-wrapper">
    	<?php
            $menu = new \Kendo\UI\Menu('menu');

            $menu->select('onMenuSelect');

            echo $menu->render();
        ?>
        <div id="products"></div>
    </div>
    <div id="product-wrapper">
        <h3 class="bottom-border">Product Details:</h3>
        <div id="product"></div>
    </div>
</div>

<script type="text/x-kendo-tmpl" id="template">
        <div class="product">
            <img src="http://demos.telerik.com/kendo-ui/content/web/foods/#:ProductID#.jpg" alt="#:ProductName# image" />
            <div class="product-description">
                <h3>#:ProductName#</h3>
            </div>
        </div>
    </script>

<script type="text/x-kendo-tmpl" id="productCard">
        <div class="productCard">
            <h3>#:ProductName#</h3>
            <p><img src="http://demos.telerik.com/kendo-ui/content/web/foods/#:ProductID#.jpg" alt="#:ProductName# image" /></p>
            <div class="product-description">
                <table>
                    <tr>
                        <th>Price</th>
                        <td>#: kendo.toString(parseFloat(UnitPrice), "c") #</td>
                    </tr>
                    <tr>
                        <th>Units</th>
                        <td>#: UnitsInStock #</td>
                    </tr>
                    <tr>
                        <th>Discontinued</th>
                        <td>#: Discontinued ? 'Yes' : 'No' #</td>
                    </tr>
                </table>
            </div>
        </div>
    </script>

<script>
	 var menuRendered = false;
	 var dsCategories = null;
	 var dsProducts = null;
	 var template = kendo.template($("#template").html());
	 var productCard = kendo.template($("#productCard").html());
	
	 dsCategories = new kendo.data.DataSource({
	     type: "odata",
	     transport: {
	         read: {
	             url: "https://demos.telerik.com/kendo-ui/service/Northwind.svc/Categories",
	             dataType: "jsonp"
	         }
	     }
	 });
	
	
	 dsProducts = new kendo.data.DataSource({
	     type: "odata",
	     transport: {
	         read: {
	             url: "https://demos.telerik.com/kendo-ui/service/Northwind.svc/Products",
	             dataType: "jsonp"
	         }
	     },
	     requestStart: function () {
	         kendo.ui.progress($("#products"), true);
	     },
	     requestEnd: function () {
	         kendo.ui.progress($("#products"), false);
	     }
	 });
	
	 dsCategories.fetch(function () {
	     prepareMenuDataSource();
	 });
	
	 dsProducts.fetch(function () {
	     prepareMenuDataSource();
	 });
	
	 function prepareMenuDataSource() {
	     if (menuRendered) {
	         return;
	     } else if (dsCategories.view().length > 0) {
	         menuRendered = true;
	     }
	
	     var menuDataSource = [];
	
	     for (var i = 0; i < dsCategories.view().length ; i++) {
	         var item = dsCategories.view()[i];
	         menuDataSource.push({
	             text: item.CategoryName,
	             attr: {
	                 categoryid: item.CategoryID,
	                 title: item.Description
	             },
	             items: getProducts(item.CategoryID)
	         })
	
	     }
	
	     renderProduct();
	     renderMenu(menuDataSource)
	 }
	
	 function getProducts(id) {
	
	     dsProducts.filter({ field: "CategoryID", operator: "eq", value: id });
	
	     var result = [];
	
	     for (var i = 0; i < dsProducts.view().length ; i++) {
	         var item = dsProducts.view()[i];
	         result.push({
	             text: item.ProductName,
	             attr: {
	                 categoryid: item.CategoryID,
	                 productid: item.ProductID,
	                 datasourceuid: item.uid,
	                 unitprice: item.UnitPrice,
	                 unitsinstock: item.UnitsInStock
	             }
	         })
	
	     }
	     return result;
	 }
	
	 function renderProduct() {
	     $("#product").html(productCard(dsProducts.at(0)));
	 }
	
	 function renderMenu(dataSource) {
	     $("#menu").data("kendoMenu").setOptions({dataSource: dataSource});
	     
	     dsProducts.bind("change", renderCategory);
	     dsProducts.filter({ field: "CategoryID", operator: "eq", value: 1 });
	 }
	
	 function onMenuSelect(ev) {
	     showCategory($(ev.item).attr("categoryid"));
	
	     var datasourceuid = $(ev.item).attr("datasourceuid");
	     if (datasourceuid) {
	         $("#product").html(productCard(dsProducts.getByUid(datasourceuid)));
	     }
	 }
	
	 function showCategory(id) {
	     dsProducts.filter({ field: "CategoryID", operator: "eq", value: id });
	 }
	
	 function renderCategory(ev) {
	     $("#products").html(kendo.render(template, this.view()));
	 }
</script>


<style>
    #products-wrapper {
        width: 80%;
        display: inline-block;
        vertical-align: top;
        border-right: 1px solid rgba(20, 53, 80, 0.137255);
        padding-right: 40px;
    }
    #product-wrapper {
        height: 100%;
        margin: 15px 0 0 50px;
        display: inline-block;
    }
    #products {
        margin-top: 10px;
    }
    .product {
        margin: 20px 5px 0 0;
        display: inline-block;
        vertical-align: top;
    }
        .product img, .productCard img {
            width: 110px;
            height: 110px;
        }
        .product h3 {
            max-width:110px;
        }
        .product h3, #product-wrapper h3 {
            display: inline-block;
            margin: 0;
            padding: 3px 5px 0 0;
            overflow: hidden;
            line-height: 1.1em;
            font-size: .9em;
            font-weight: normal;
            text-transform: uppercase;
            color: #999;
        }
    #product-wrapper h3 {
        color: #999;
    }
    .productCard {
        margin-top:30px;
    }
        .productCard table {
            margin-top:20px;
            text-align: left;
            font-size: .9em;
            color: #999;
        }
</style>