MultiSearch

6 posts by 2 authors in: Forums > CMS Builder
Last Post: July 24, 2013   (RSS)

By Toledoh - July 16, 2013 - edited: July 16, 2013

Hi All,

In multisearch.php, you have the "'titleField'      => '????'," to act as the title of the found record.  Is there a way that I can join 2 fields here?

ie: 'titleField'      => 'surname','first_name',

Thanks!

Cheers,

Tim (toledoh.com.au)

By gregThomas - July 17, 2013

Hi Tim,

Unfortunately this isn't possible without modification of core CMSB code, and any changes made to it we wouldn't be able to provide support for. If you have a look at line 1178 of the viewer_functions.php in the lib directory of your CMS Builder install, you should see the line decides what fields are selected. If you modify it from this:

$subquery         = "SELECT '$tablename' as `tablename`, num, `{$tableOptions['titleField']}` as `_title`, ";

to this:

    if(is_array($tableOptions['titleField'])){
      $fieldArray = array();
      foreach($tableOptions['titleField'] as $option){
        $fieldArray[] = "`$option`";
      }
      $fieldString = implode(",", $fieldArray);
      $subquery         = "SELECT '$tablename' as `tablename`, num, CONCAT($fieldString) as `_title`, ";
    }else{
      $subquery         = "SELECT '$tablename' as `tablename`, num, `{$tableOptions['titleField']}` as `_title`, ";
    }

Once this code has been added, you can use an array of fields in your titleField value, for example like this:

$searchTables['blog'] = array(
  'viewerUrl' => 'test.php',
  'titleField' => array('title', 'subject'),
  'summaryField' => 'content',
  'searchFields' => array('title','subject','content'),
  'field1' =>  'createdDate',
);

Then the code you've added to the viewer_functions will combine the two fields into one using the MySQL concat function.

Let me know if you have any questions. 

Cheers

Greg

Greg Thomas







PHP Programmer - interactivetools.com

By Toledoh - July 18, 2013

Perfect Greg!

Any way that I can add separators like a comma or space?

It would be great to be able to have first_name surname - position (ie. separate with a space and a "-" as required)

Cheers,

Tim (toledoh.com.au)

By gregThomas - July 19, 2013

Hi Tim,

I've found a way that you can add strings into the concat statement, you need to update line 1178 from this:

$subquery         = "SELECT '$tablename' as `tablename`, num, `{$tableOptions['titleField']}` as `_title`, "; 

to this:

    if(is_array($tableOptions['titleField'])){
      $fieldArray = array();
      foreach($tableOptions['titleField'] as $option){
        $fieldArray[] = (substr($option, -2) == ':s')? "'".substr($option, 0, -2)."'": "`$option`";
      }
      $fieldString = implode(",", $fieldArray);
      $subquery         = "SELECT '$tablename' as `tablename`, num, CONCAT($fieldString) as `_title`, ";
    }else{
      $subquery         = "SELECT '$tablename' as `tablename`, num, `{$tableOptions['titleField']}` as `_title`, ";
    }

The line I've modified is highlighted in green. So now an if statement checks to see if :s is applied to the end of a string, if it is it treats it as a string for the concat list as opposed to a table name, so if I wanted to add '  - ' in-between my title and subject fields, my searchTables array would look like this:

$searchTables['blog'] = array(
'viewerUrl' => 'test.php',
'titleField' => array('title'," - :s", 'subject'),
'summaryField' => 'content',
'searchFields' => array('title','subject','content'),
'field1' =>  'createdDate',
);

Let me know if you have any questions.

Cheers

Greg

Greg Thomas







PHP Programmer - interactivetools.com

By Toledoh - July 23, 2013

Hey Greg - that works perfectly!

Can I suggest that this be included in future releases?

Cheers,

Tim (toledoh.com.au)