Hi,
I am new relatively new to Yii and new to Javascript.
I am trying to implement some javascript from JQWidgets (http://http://www.jqwidgets.com). I know this is a large task for a newbie but I really need the grid components ability to show related items from different tables together in nested grids. Cgridview just doesn’t do it.
So I am trying their basic code which is:
<!DOCTYPE html>
<html lang="en">
<head>
<title id='Description'>This example shows how to create a Grid from Array data.</title>
<link rel="stylesheet" href="../../jqwidgets/styles/jqx.base.css" type="text/css" />
<script type="text/javascript" src="../../scripts/jquery-1.8.3.min.js"></script>
<script type="text/javascript" src="../../jqwidgets/jqxcore.js"></script>
<script type="text/javascript" src="../../jqwidgets/jqxdata.js"></script>
<script type="text/javascript" src="../../jqwidgets/jqxbuttons.js"></script>
<script type="text/javascript" src="../../jqwidgets/jqxscrollbar.js"></script>
<script type="text/javascript" src="../../jqwidgets/jqxmenu.js"></script>
<script type="text/javascript" src="../../jqwidgets/jqxgrid.js"></script>
<script type="text/javascript" src="../../jqwidgets/jqxgrid.selection.js"></script>
<script type="text/javascript" src="../../jqwidgets/jqxgrid.columnsresize.js"></script>
<script type="text/javascript" src="../../scripts/gettheme.js"></script>
<script type="text/javascript">
$(document).ready(function () {
var theme = getDemoTheme();
// prepare the data
var data = new Array();
var firstNames =
[
"Andrew", "Nancy", "Shelley", "Regina", "Yoshi", "Antoni", "Mayumi", "Ian", "Peter", "Lars", "Petra", "Martin", "Sven", "Elio", "Beate", "Cheryl", "Michael", "Guylene"
];
var lastNames =
[
"Fuller", "Davolio", "Burke", "Murphy", "Nagase", "Saavedra", "Ohno", "Devling", "Wilson", "Peterson", "Winkler", "Bein", "Petersen", "Rossi", "Vileid", "Saylor", "Bjorn", "Nodier"
];
var productNames =
[
"Black Tea", "Green Tea", "Caffe Espresso", "Doubleshot Espresso", "Caffe Latte", "White Chocolate Mocha", "Cramel Latte", "Caffe Americano", "Cappuccino", "Espresso Truffle", "Espresso con Panna", "Peppermint Mocha Twist"
];
var priceValues =
[
"2.25", "1.5", "3.0", "3.3", "4.5", "3.6", "3.8", "2.5", "5.0", "1.75", "3.25", "4.0"
];
for (var i = 0; i < 200; i++) {
var row = {};
var productindex = Math.floor(Math.random() * productNames.length);
var price = parseFloat(priceValues[productindex]);
var quantity = 1 + Math.round(Math.random() * 10);
row["firstname"] = firstNames[Math.floor(Math.random() * firstNames.length)];
row["lastname"] = lastNames[Math.floor(Math.random() * lastNames.length)];
row["productname"] = productNames[productindex];
row["price"] = price;
row["quantity"] = quantity;
row["total"] = price * quantity;
data[i] = row;
}
var source =
{
localdata: data,
datatype: "array",
datafields:
[
{ name: 'firstname', type: 'string' },
{ name: 'lastname', type: 'string' },
{ name: 'productname', type: 'string' },
{ name: 'quantity', type: 'number' },
{ name: 'price', type: 'number' },
{ name: 'total', type: 'number' }
]
};
var dataAdapter = new $.jqx.dataAdapter(source);
$("#jqxgrid").jqxGrid(
{
width: 670,
source: dataAdapter,
theme: theme,
columnsresize: true,
columns: [
{ text: 'Name', dataField: 'firstname', width: 100 },
{ text: 'Last Name', dataField: 'lastname', width: 100 },
{ text: 'Product', editable: false, dataField: 'productname', width: 180 },
{ text: 'Quantity', dataField: 'quantity', width: 80, cellsalign: 'right' },
{ text: 'Unit Price', dataField: 'price', width: 90, cellsalign: 'right', cellsformat: 'c2' },
{ text: 'Total', dataField: 'total', cellsalign: 'right', minwidth: 100, cellsformat: 'c2' }
]
});
});
</script>
</head>
<body class='default'>
<div id='jqxWidget'>
<div id="jqxgrid">
</div>
</div>
</body>
</html>
Now, I have created an extensions folder for all of the js files and have put this into my main.php:
'application.extensions.JQXWidgets.*',
I then have the following in the view:
if($baseJQXGridUrl===null)
$baseJQXGridUrl=Yii::app()->getAssetManager()->publish(Yii::getPathOfAlias('ext.JQXWidgets'));
$cs=Yii::app()->getClientScript();
$cs->registerCSSFile($baseJQXGridUrl.'/scripts/jquery-1.8.3.min.js',CClientScript::POS_END);
$cs->registerScriptFile($baseJQXGridUrl.'/jqwidgets/jqxcore.js',CClientScript::POS_END);
$cs->registerScriptFile($baseJQXGridUrl.'/jqwidgets/jqxbuttons.js',CClientScript::POS_END);
$cs->registerScriptFile($baseJQXGridUrl.'/jqwidgets/jqxscrollbar.js',CClientScript::POS_END);
$cs->registerScriptFile($baseJQXGridUrl.'/jqwidgets/jqxmenu.js',CClientScript::POS_END);
$cs->registerScriptFile($baseJQXGridUrl.'/jqwidgets/jqxgrid.selection.js',CClientScript::POS_END);
$cs->registerScriptFile($baseJQXGridUrl.'/jqwidgets/jqxgrid.columnsresize.js',CClientScript::POS_END);
$cs->registerScriptFile($baseJQXGridUrl.'/jqwidgets/jqxdata.js',CClientScript::POS_END);
$cs->registerScriptFile($baseJQXGridUrl.'/jqwidgets/gettheme.js',CClientScript::POS_END);
$cs->registerScriptFile($baseJQXGridUrl.'/scripts/gettheme.js',CClientScript::POS_END);
$cs = Yii::app()->getClientScript();
$cs->registerScript('nw',
"
$(document).ready(function () {
var theme = getDemoTheme();
// prepare the data
var data = new Array();
var firstNames =
[
'Andrew', 'Nancy', 'Shelley', 'Regina', 'Yoshi', 'Antoni', 'Mayumi', 'Ian', 'Peter', 'Lars', 'Petra', 'Martin', 'Sven', 'Elio', 'Beate', 'Cheryl', 'Michael', 'Guylene'
];
var lastNames =
[
'Fuller', 'Davolio', 'Burke', 'Murphy', 'Nagase', 'Saavedra', 'Ohno', 'Devling', 'Wilson', 'Peterson', 'Winkler', 'Bein', 'Petersen', 'Rossi', 'Vileid', 'Saylor', 'Bjorn', 'Nodier'
];
var productNames =
[
'Black Tea', 'Green Tea', 'Caffe Espresso', 'Doubleshot Espresso', 'Caffe Latte', 'White Chocolate Mocha', 'Cramel Latte', 'Caffe Americano', 'Cappuccino', 'Espresso Truffle', 'Espresso con Panna', 'Peppermint Mocha Twist'
];
var priceValues =
[
'2.25', '1.5', '3.0', '3.3', '4.5', '3.6', '3.8', '2.5', '5.0', '1.75', '3.25', '4.0'
];
for (var i = 0; i < 200; i++) {
var row = {};
var productindex = Math.floor(Math.random() * productNames.length);
var price = parseFloat(priceValues[productindex]);
var quantity = 1 + Math.round(Math.random() * 10);
row['firstname'] = firstNames[Math.floor(Math.random() * firstNames.length)];
row['lastname'] = lastNames[Math.floor(Math.random() * lastNames.length)];
row['productname'] = productNames[productindex];
row['price'] = price;
row['quantity'] = quantity;
row['total'] = price * quantity;
data[i] = row;
}
var source =
{
localdata: data,
datatype: 'array',
datafields:
[
{ name: 'firstname', type: 'string' },
{ name: 'lastname', type: 'string' },
{ name: 'productname', type: 'string' },
{ name: 'quantity', type: 'number' },
{ name: 'price', type: 'number' },
{ name: 'total', type: 'number' }
]
};
var dataAdapter = new $.jqx.dataAdapter(source);
$('#jqxgrid').jqxGrid(
{
width: 670,
source: dataAdapter,
theme: theme,
columnsresize: true,
columns: [
{ text: 'Name', dataField: 'firstname', width: 100 },
{ text: 'Last Name', dataField: 'lastname', width: 100 },
{ text: 'Product', editable: false, dataField: 'productname', width: 180 },
{ text: 'Quantity', dataField: 'quantity', width: 80, cellsalign: 'right' },
{ text: 'Unit Price', dataField: 'price', width: 90, cellsalign: 'right', cellsformat: 'c2' },
{ text: 'Total', dataField: 'total', cellsalign: 'right', minwidth: 100, cellsformat: 'c2' }
]
});
});
",
CClientScript::POS_END
);
//$cs = Yii::app()->getClientScript();
//$cs->registerScript(
// 'my-hello-world-1',
// 'var greetings = "Hello" + " " + "World";
// alert(greetings);',
// CClientScript::POS_END
//);
?>
<div id='jqxWidget'>
<div id="jqxgrid">
</div>
</div>
It does not work.
If I uncomment the my-hello-world-1 javascript I get the Hello World Alert.
Can someone help me here?
Or if there is an extension that allows nested grids then point me to it. I have seen the following discussion and I don’t think it gives me what I want:
http://www.yiiframework.com/forum/index.php/topic/33178-is-it-possible-to-have-nested-cgridviews/
Regards,
neil