Skip to main content

This site requires you to update your browser. Your browsing experience maybe affected by not having the most up to date version.

General Questions

General questions about getting started with SilverStripe that don't fit in any of the categories above.

Moderators: martimiz, Sean, biapar, Willr, Ingo, swaiba, simon_w

how we display fetched data in page-results.ss file, i am new in silver strip


Go to End
Reply

9 Posts   1190 Views

Avatar
sunil_bisht

17 April 2012 at 9:38pm (Last edited: 17 April 2012 10:03pm), Community Member, 5 Posts

<?php
class Page extends SiteTree {

   static $db = array(
      
   );

   public static $has_one = array(
   
   );
   public static $has_many = array(

);
   
   public function getCMSFields() {
$fields = parent::getCMSFields();

return $fields;
}

}
class Page_Controller extends ContentController {
   

   //Define our form function as allowed
   static $allowed_actions = array(
      'Searchform'
   );
   
   //The function which generates our form
   function Searchform()
   {
   // Create fields
    $fields = new FieldSet(
       new DropdownField('search_user','',
array ('used' => 'used product', 'new' => 'new product')),
       new TextField('search_product', '')
         
      );
       
    // Create action
    $actions = new FieldSet(
       new FormAction('results', 'Send')
    );
      
      // Create action
      $validator = new RequiredFields('search_user', 'search_product');
         
    return new Form($this, 'Searchform', $fields, $actions, $validator);
   }
   
   
   function results($data, $form)
   {
       //Set data
      echo $From = $data['search_user'];
      
      echo $From1 = $data['search_product'];
      
      
      $sql_search ="select * from productuseditem where ProductNameUsed LIKE '%".$From1."%'";
    $sql_search1=mysql_query($sql_search);
    $result = mysql_num_rows($sql_search1);
    $data = mysql_fetch_array($sql_search1);
    print_r($data);
   
       return $this->customise($data)->renderWith(array('Page_results', 'Page'));

   }

}

?>

the fetched data will be on $data in results function but i cant understand that how we display that data on page_results.ss page.

for this line /* return $this->customise($data)->renderWith(array('Page_results', 'Page')); */
it will redirect into page_results.ss page but how we display that data.. please help me i ma new in silver strip..

Avatar
Willr

18 April 2012 at 9:34pm Forum Moderator, 5511 Posts

You shouldn't use direct mysql commands in SS but DataObject::get() and SQLQuery() as wrappers. Your results function might look something like

function results($data, $form) {
$From = $data['search_user'];
$From1 = Convert::raw2sql($data['search_product']); // ALWAYS ESCAPE your inputs when putting into sql

return DataObject::get('ProductUsedItem', "ProductNameUsed LIKE '%". $from1 ."%'");
}

If your ProductUsedItem is not a DataObject and you need to use sql see http://doc.silverstripe.org/sapphire/en/reference/sqlquery

Avatar
sunil_bisht

18 April 2012 at 10:07pm Community Member, 5 Posts

Thanks willar for giving me your time but my problem is 70% solved according to my coding. my another problem is :-

function results($data, $form)
   {
       
      $From = $data['search_user'];
      
       $From1 = $data['search_product'];
      if($From == 'used')
      {
      
       $sql_search ="select a.ConditionText AS conditions,b.Filename AS filename,a.Description AS descr,a.ProductNameUsed AS productname,a.Price AS price,a.PhotoID AS photo from Productuseditem a INNER JOIN File b where a.ProductNameUsed LIKE '%".$From1."%' AND a.PhotoID = b.ID";
    $sql_search1=mysql_query($sql_search);
    $result = mysql_num_rows($sql_search1);
    if($result !=0)
       {
    $data = mysql_fetch_array($sql_search1);
      
       }
       else
       {
       echo "<script type='text/javascript'>
         alert('sorry , Your Search Query Didnot Return Any Result'); </script>";
       }
return $this->customise($data)->renderWith(array('Page_results', 'Page'));
       }
}   

like i am searching "sony" then 60 records found but only 1 shown in ss file . so please help me that    how i show all 60 records in my ss file . my ss file is :---------

<div id="middlecolumnmain">

<% if data %>
         
<ul id="SearchResults">

          <li>Product Name : - $productname </li>
<li>Conditions :- $conditions</li>
          <li>Description :- $descr</li>
          <li>Price :- $price (ex vat)</li>
         
          <li> <img src = "http://localhost/esbroadcast/$filename" alt="img" /></li>
         
          <li>$data</li>

</ul>

<% else %>
<h1>Sorry, your search query did not return any results.</h1>
<% end_if %>
</div>

Avatar
Willr

18 April 2012 at 10:18pm Forum Moderator, 5511 Posts

Well like I said, don't use mysql_query directly. Your query could be reduced down to a DataObject::get() call and returned to the template. In the template you can then use <% control %> to loop

function results($data, $form) {
$From = $data['search_user'];
$From1 = $data['search_product'];

if($From == 'used') {
return new ArrayData(array(
'Results' => DataObject::get('ProductUsedItem', "ProductNameUsed LIKE '%".$From1."')
));
}

return false;
}

Then in your Page_results template use
<% if Results %>
<ul id="searchResults">
<% control Results %>
<li>Product Name : - $productname </li>
<li>Conditions :- $conditions</li>
<li>Description :- $descr</li>
<li>Price :- $price (ex vat)</li>
<li>$File.URL</li>
<% end_control %>
</ul>
<% else %>
No Results!
<% end_if %>

Avatar
sunil_bisht

18 April 2012 at 10:57pm Community Member, 5 Posts

thanks For your Reply, but i have an error in my code:--

function results($data, $form)
   {
       //Set data
      $From = $data['search_user'];
      
       $From1 = $data['search_product'];
      
      $sqlQuery = new SQLQuery();
      
      $sqlQuery->select = array(
       'productnewItem.ConditionText AS conditions',
       'file.Filename AS filename',
       'productnewItem.ProductNameNew AS productname',
       'productnewItem.Description AS descr',
       'productnewItem.Price AS price',
       'productnewItem.PhotoID AS photo'
      );
      $sqlQuery->from = array(
       "productnewItem",
       "INNER JOIN file ON productnewItem.PhotoID = file.ID"
      );
      $sqlQuery->where = array("productnewItem.ProductNameNew LIKE '%".$From1."%'");
      
      $Results = $sqlQuery->execute()->value();
       return $this->customise($Results)->renderWith(array('Page_results', 'Page'));
   }

and in ss file i ahev used :--

<% if Results %>
         <ul id="searchResults">
         <% control Results %>
         <li>Product Name : - $productname </li>
         <li>Conditions :- $conditions</li>
         <li>Description :- $descr</li>
         <li>Price :- $price (ex vat)</li>
         <li>$File.URL</li>
         <% end_control %>
         </ul>
         <% else %>
         No Search Results!
         <% end_if %>

and my error is :------- [User Error] Uncaught InvalidArgumentException: ViewableData->customise(): $data must be an associative array or a ViewableData instance
POST /esbroadcast/index.php/home/Searchform

Line 210 in D:\xampp\htdocs\esbroadcast\sapphire\core\ViewableData.php
Source

201    public function customise($data) {
202       if(is_array($data) && (empty($data) || ArrayLib::is_associative($data))) {
203          $data = new ArrayData($data);
204       }
205       
206       if($data instanceof ViewableData) {
207          return new ViewableData_Customised($this, $data);
208       }
209       
210       throw new InvalidArgumentException (
211          'ViewableData->customise(): $data must be an associative array or a ViewableData instance'
212       );
213    }
214    
215    /**
216     * @param ViewableData $object

Avatar
sunil_bisht

19 April 2012 at 12:06am Community Member, 5 Posts

Please help me, where is my mistake and how i show the fetched data in page-results.ss file.
function results($data, $form)
   {
       //Set data
      $From = $data['search_user'];
      
       $From1 = $data['search_product'];
      
      $sqlQuery = new SQLQuery();
      
      $sqlQuery->select = array(
       'file.Filename AS filename',
       'productnewItem.ConditionText AS conditions',
       'productnewItem.ProductNameNew AS productname',
       'productnewItem.Description AS descr',
       'productnewItem.Price AS price',
       'productnewItem.PhotoID AS photo'
      );
      $sqlQuery->from = array(
       "productnewItem",
       "INNER JOIN file ON productnewItem.PhotoID = file.ID"
      );
      $sqlQuery->where = array("productnewItem.ProductNameNew LIKE '%".$From1."%'");
      
       $data = $sqlQuery->execute()->value();
      
       $Data = array(
'data' => $data
);
   
       return $this->customise($Data)->renderWith(array('Page_results', 'Page'));
   }

and my page_results.ss page coding is :---------

<div id="middlecolumnmain">

<% if Data %>
         
         <ul id="searchResults">
         <% control Data %>
         <li>Product Name : - $data </li>
         <li>Conditions :- $conditions</li>
         <li>Description :- $descr</li>
         <li>Price :- $price (ex vat)</li>
         <li>$File.URL</li>
         <% end_control %>
         </ul>
         <% else %>
         No Search Results!
         <% end_if %>
         
         </div>

Avatar
Willr

19 April 2012 at 6:02pm Forum Moderator, 5511 Posts

Remember, templates work with Viewable data objects (e.g dataobjectsets) so you have to return that to your template:

http://doc.silverstripe.org/sapphire/en/reference/sqlquery#transforming-a-result-to-dataobjectset-http-api-silverstripe-org-search-lookup-q-dataobjectset-and-version-2-4-and-module-sapphire

..
$result = $sqlQuery->execute();
$set = singleton('productnewItem')->buildDataObjectSet($result);

return $this->customise(new ArrayData(array(
'Data' => $set
)))->renderWith(array('Page_results', 'Page'));

Then use <% control Data %>

Avatar
sunil_bisht

19 April 2012 at 6:14pm Community Member, 5 Posts

Thanks willar Thanks you so much for hundred times.. please few more help.

Please help me to provide the code of paging in mysql data. i have an successfully executed query and an result of 60 records and i want 10 records in one page...
my page.php code is :--

function results($data, $form)
{
//Set data
$From = $data['search_user'];

$From1 = $data['search_product'];

if($From =='new1')
{
$sqlQuery = new SQLQuery();

$sqlQuery->select = array(
'file.Filename AS filename',
'productnewItem.ConditionText AS conditions',
'productnewItem.ProductNameNew AS productname',
'productnewItem.Description AS descr',
'productnewItem.Price AS price',
'productnewItem.PhotoID AS photo'
);
$sqlQuery->from = array(
"productnewItem",
"INNER JOIN file ON productnewItem.PhotoID = file.ID"
);
$sqlQuery->where = array("productnewItem.ProductNameNew LIKE '%".$From1."%'");

$rawSQL = $sqlQuery->sql();

$result = $sqlQuery->execute();

$dataObject1 = new DataObjectSet();
foreach($result as $row)
{
$dataObject1->push(new ArrayData($row));
}
return $this->customise(array("Pictures" => $dataObject1))->renderWith(array('Page_results', 'Page'));
}
}

and my displaying page_results.ss page is :-

<div id="middlecolumnmain">

<% if Pictures %>
<% control Pictures %>
<h2>Your Search Result :-- </h2>
<ul id="SearchResults">

<li>$productname</li>
<li>$conditions</li>
<li>$descr</li>
<li>$price></li>
<li> <img src = "http://localhost/esbroadcast/$filename" alt="img" width="100" height="70" /></li>

</ul>
<% end_control %>
<% else %>
<h1>Sorry, your search query did not return any results.</h1>
<% end_if %>

</div>

Please help me regarding to the pagination code . i have an 60 records and i want 10 records in one page so Please help me ???

Go to Top