Recent Topics

[SOLVED] get datafield following query

Started by on Oct 05, 2011 – Contents updated: Oct 05, 2011

Oct 05, 2011 17:55    

[4.x]

OK today's problem driving me mad:

It is simple really I want to access a field value.

The following sql and code has been lifted from /blogs/inc/widgets/widgets/_coll_media_index.widget.php and altered slightly to do the task in hand.


		$SQL = new SQL();
		if ($this->disp_params['album_sequence']) {
			$SQL->SELECT('cat_name, post_ID, post_datestart, post_datemodified, post_main_cat_ID, post_urltitle, post_canonical_slug_ID,
				post_tiny_slug_ID, post_ptyp_ID, post_title, post_excerpt, post_url, 
				file_ID, file_title, file_root_type, file_root_ID, file_path, file_alt, file_desc');
		} else {
			$SQL->SELECT('post_ID, post_datestart, post_datemodified, post_main_cat_ID, post_urltitle, post_canonical_slug_ID,
				post_tiny_slug_ID, post_ptyp_ID, post_title, post_excerpt, post_url, 
				file_ID, file_title, file_root_type, file_root_ID, file_path, file_alt, file_desc');
		}	
		$SQL->FROM('T_categories INNER JOIN T_postcats ON cat_ID = postcat_cat_ID
			INNER JOIN T_items__item ON postcat_post_ID = post_ID
			INNER JOIN T_links ON post_ID = link_itm_ID
			INNER JOIN T_files ON link_file_ID = file_ID');
		$SQL->WHERE('cat_blog_ID IN ('.$list_blogs.')'); // fp> TODO: want to restrict on images :]
		$SQL->WHERE_and('post_status = "published"');	// TODO: this is a dirty hack. More should be shown.
		$SQL->WHERE_and('post_datestart <= \''.remove_seconds($localtimenow).'\'');
		$SQL->GROUP_BY('link_ID');
		$SQL->LIMIT($this->disp_params['limit']*4); // fp> TODO: because we have no way of getting images only, we get 4 times more data than requested and hope that 25% at least will be images :/

		if ($this->disp_params['album_sequence']) {
			$SQL->ORDER_BY('cat_name, post_ID '.$this->disp_params['order_dir'].', link_ID');
		} else {
			$SQL->ORDER_BY(gen_order_clause($this->disp_params['order_by'], $this->disp_params['order_dir'],
				'post_', 'post_ID '.$this->disp_params['order_dir'].', link_ID'));
		}

		$FileCache = & get_FileCache();
		$FileList = new DataObjectList2($FileCache);
		$FileList->sql = $SQL->get();
		$FileList->query(false, false, false, 'Media index widget');
			
		// grid/list display starts here
		$layout = $this->disp_params['thumb_layout'];

		echo_i("<!-- -------------------------- A $layout of all photos  -------------------------- -->"); 

		$nb_cols = $this->disp_params['grid_nb_cols'];
		$count = 0;
		$album_showing = '';
		# @var File
		while($File = & $FileList->get_next()) {
	                 

no doubt experts here will be familiar with the rest.

The next line I need to test the value of 'cat_name' field bfore continuing processing. The obvious $File->cat_name does not work.

I have checked the sql on the database and get a results set as expected.

Thanks in advance

Oct 05, 2011 22:10

$File object will only have file-related properties from evo_files table.

Try this

$nb_cols = $this->disp_params[ 'grid_nb_cols' ];
$count = 0;
$r = '';
/**
 * @var File
 */
foreach( $FileList->rows as $row )
{
	$File = & $FileCache->get_by_ID( $row->file_ID, false );
	if( empty($File) ) continue;
	
	// Display all properties of $row
	echo '<pre>'.var_export($row, true).'</pre>';

Oct 05, 2011 22:43

Thanks but Fatal Error


   $File = & $FileList->get_by_ID( $row->file_ID, false );

Call to undefined method DataObjectList2::get_by_ID()

?

Oct 05, 2011 22:52

Super Thanks

RESOLVED it should be FileCache as in


			$File = & $FileCache->get_by_ID($row->file_ID, false);

getting there one step at a time learning something new every day.

Oct 06, 2011 00:02

True. It should be FileCache instead


Form is loading...

Content Mangement System – This forum is powered by b2evolution CMS, a complete engine for your website.