Tuesday, 11 February 2014
How to set the country, state relationship in Yii
My Country table:
================
id
name
My state table:
===============
id
country_id
name
Here i need to refer the country from state using the country_id relationship
So first i need to generate a Relationship in my State Model like below
public function relations()
{
return array(
'country'=>array(self::BELONGS_TO, 'Country', 'country_id'),
);
}
Country here is the country model
country_id is the reference key in state table to refer the country table
Ok so in CGrid view use the below format
'country.name',
===========================================================================
And if we need filtering for countries in state admin?
Just use the compare setup like below
public function search()
{
// @todo Please modify the following code to remove attributes that should not be searched.
$criteria=new CDbCriteria;
$criteria->compare('id',$this->id);
$criteria->compare('name',$this->name);
$criteria->with = array('country');
$criteria->compare('country.id',$this->country_id, true);
return new CActiveDataProvider($this, array(
'criteria'=>$criteria,
));
}
And in your Cgridview area have it like below
array(
'name'=>'country_id',
'header'=>'Country',
'value'=>'$data->country->name',
'filter'=>CHtml::listData(Country::model()->findall(),'id','name' ),
),
Wednesday, 5 February 2014
How to set the active and inactive status for 1,0 values in YII CGridView
Labels:
YII
In Yii normal CGridView will have the below structure
'columns'=>array(
'id',
'title',
'sstatus',
So to set the 0 as Inactive and 1 as Active
we need to edit the 'status' as
array(
'header'=>'status', //for to set the title for the table column, we can remove this if we need to show the default value
'name'=>'sstatus' // where sstatus is my database column name
'value'=>'($data->sstatus==1)? "Active" : "Inactive"'
),
Once set we can see 0 as inactive and 1 as active.
But how about filtering?
The filtering in Yii will work when we input 1 and not as active, so just replace this filter area with dropdown list in the same area where we updated our above code, just add filter array like below
array(
'header'=>'status', //for to set the title for the table column, we can remove this if we need to show the default value
'name'=>'sstatus' // where sstatus is my database column name
'value'=>'($data->sstatus==1)? "Active" : "Inactive"',
'filter'=>CHtml::dropDownList('Slider[sstatus]', 'sstatus',
array(
''=>'All',
'1'=>'Active',
'0'=>'Inactive',
)
),
),
),
in the above Slider is my model name and sstatus is my database table column... thats it.......
But i faced some problems like auto select and select all is not working, so we can set the filter directly like the below code
array(
'name' => 'sstatus',
'filter' => array(0 => 'In Active', 1 => 'Active'),
'value' => '($data->sstatus == 1) ? "Active" : "Inactive"',
),
'columns'=>array(
'id',
'title',
'sstatus',
So to set the 0 as Inactive and 1 as Active
we need to edit the 'status' as
array(
'header'=>'status', //for to set the title for the table column, we can remove this if we need to show the default value
'name'=>'sstatus' // where sstatus is my database column name
'value'=>'($data->sstatus==1)? "Active" : "Inactive"'
),
Once set we can see 0 as inactive and 1 as active.
But how about filtering?
The filtering in Yii will work when we input 1 and not as active, so just replace this filter area with dropdown list in the same area where we updated our above code, just add filter array like below
array(
'header'=>'status', //for to set the title for the table column, we can remove this if we need to show the default value
'name'=>'sstatus' // where sstatus is my database column name
'value'=>'($data->sstatus==1)? "Active" : "Inactive"',
'filter'=>CHtml::dropDownList('Slider[sstatus]', 'sstatus',
array(
''=>'All',
'1'=>'Active',
'0'=>'Inactive',
)
),
),
),
in the above Slider is my model name and sstatus is my database table column... thats it.......
But i faced some problems like auto select and select all is not working, so we can set the filter directly like the below code
array(
'name' => 'sstatus',
'filter' => array(0 => 'In Active', 1 => 'Active'),
'value' => '($data->sstatus == 1) ? "Active" : "Inactive"',
),
Tuesday, 20 August 2013
PHP Translator, replacement for google translator api?.
I struggled to get the language translator for my php project and found Google API is not WORKING FOR ME, I dont know it works for others. While surfed i got google closed its Free Translator API, and microsoft is providing its API with limited character free subscription.
The code providing by them comes in SOAP, HTTP and Javascript and yes it supported my PHP. Even they are providing exact PHP class files that helped me a lot. You can register your Keys with them, use this link for to Sign up for the Microsoft Translator API "https://datamarket.azure.com/dataset/1899a118-d202-492c-aa16-ba21c33c06cb". They have listed all the subscription plans ranges from free to $6000/ month.
I think this link will also helpful http://www.microsofttranslator.com/dev/. After creating your Keys register with Datamarket and your translator will work good. I have used HTTP >> Translate Method "http://msdn.microsoft.com/en-us/library/ff512421.aspx" and there you can see the PHP class files, and it is very handy......
Happy coding
Monday, 19 August 2013
How to get the meta title, description and keywords using PHP
function getUrlData($url)
{
$result = false;
$contents = getUrlContents($url);
if (isset($contents) && is_string($contents))
{
$title = null;
$metaTags = null;
preg_match('/<***title***>([^***>]*)<***\/title***>/si', $contents, $match );
if (isset($match) && is_array($match) && count($match) > 0)
{
$title = strip_tags($match[1]);
}
preg_match_all('/<***[\s]*meta[\s]*name="?' . '([^***>"]*)"?[\s]*' . 'content="?([^***>"]*)"?[\s]*[\/]?[\s]****>/si', $contents, $match);
if (isset($match) && is_array($match) && count($match) == 3)
{
$originals = $match[0];
$names = $match[1];
$values = $match[2];
if (count($originals) == count($names) && count($names) == count($values))
{
$metaTags = array();
for ($i=0, $limiti=count($names); $i <*** $limiti; $i++)
{
$metaTags[$names[$i]] = array (
'html' => htmlentities($originals[$i]),
'value' => $values[$i]
);
}
}
}
$result = array (
'title' => $title,
'metaTags' => $metaTags
);
}
return $result;
}
function getUrlContents($url, $maximumRedirections = null, $currentRedirection = 0)
{
$result = false;
$contents = @file_get_contents($url);
// Check if we need to go somewhere else
if (isset($contents) && is_string($contents))
{
preg_match_all('/<***[\s]*meta[\s]*http-equiv="?REFRESH"?' . '[\s]*content="?[0-9]*;[\s]*URL[\s]*=[\s]*([^***>"]*)"?' . '[\s]*[\/]?[\s]****>/si', $contents, $match);
if (isset($match) && is_array($match) && count($match) == 2 && count($match[1]) == 1)
{
if (!isset($maximumRedirections) || $currentRedirection <*** $maximumRedirections)
{
return getUrlContents($match[1][0], $maximumRedirections, ++$currentRedirection);
}
$result = false;
}
else
{
$result = $contents;
}
}
return $contents;
}
?>
<***?php
$result = getUrlData('http://elwatannews.com/');
echo '<***pre***>'; print_r($result); echo '<***/pre***>';
Note: Remove ***s
Friday, 16 August 2013
How to Resize or Scale your image using CSS
There are many best ways to scale the images for your site. We can use the php resize codes or Jquery resize scripts and others, and one of the best way is to scale the images through CSS. For a demo please check the below code
<*****style type="text/css">
.center-cropped {
width: 310px;
height: 168px;
background-position: 50% 11%;
background-size: cover;
}
<*****div class="center-cropped" style="background-image: url('http://elbadil.com/sites/default/files/styles/428xauto_node_image_2/public/13/08/32/0_73.jpg?itok%3Dk9uRSMGi');">
<******/div>
Note: remove ******
In the above code background-size acts as the center point, I just need a whole cover section, but we can use contain or auto or anything as per your needs.
Check the background-position too. I made as 50: 11 Percentage ratio. You can set the height and width and by this there wont be any stretch in the image. But the whole concept will make the load time bit high when compared to resizing :)
<*****style type="text/css">
.center-cropped {
width: 310px;
height: 168px;
background-position: 50% 11%;
background-size: cover;
}
<*****div class="center-cropped" style="background-image: url('http://elbadil.com/sites/default/files/styles/428xauto_node_image_2/public/13/08/32/0_73.jpg?itok%3Dk9uRSMGi');">
<******/div>
Note: remove ******
In the above code background-size acts as the center point, I just need a whole cover section, but we can use contain or auto or anything as per your needs.
Check the background-position too. I made as 50: 11 Percentage ratio. You can set the height and width and by this there wont be any stretch in the image. But the whole concept will make the load time bit high when compared to resizing :)
Code to make other site image to get stored in your wordpress database as well as making other site images to your wordpress post featured image
$upload_dir = wp_upload_dir();
$image_data = file_get_contents("Image URL for other site");
$filename = basename($image_url);
if(wp_mkdir_p($upload_dir['path']))
$file = $upload_dir['path'] . '/' . $filename;
else
$file = $upload_dir['basedir'] . '/' . $filename;
file_put_contents($file, $image_data);
$wp_filetype = wp_check_filetype($filename, null );
$attachment = array(
'post_mime_type' => $wp_filetype['type'],
'post_title' => sanitize_file_name($filename),
'post_content' => '',
'post_status' => 'inherit'
);
$attach_id = wp_insert_attachment( $attachment, $file, $post_id );
require_once(ABSPATH . 'wp-admin/includes/image.php');
$attach_data = wp_generate_attachment_metadata( $attach_id, $file );
wp_update_attachment_metadata( $attach_id, $attach_data );
set_post_thumbnail( $post_id , $attach_id );
wp_update_attachment_metadata will make the image to get stored in your database
set_post_thumbnail will make the image to get featured for the post
$post_id - will be ID of your post, for example if you just want to make your post id 5 to get featured image then just replace the variable $post_id with 5
substr in php is not removing characters?
I had a similar problem before and rectified using mb_substr, for demo please check the below code
$then_truncate_the_value=mb_substr($remove_html_first , 0, 123);
Subscribe to:
Posts (Atom)