17488 Posts in 4473 Topics by 1978 members
|
Page:
1
|
Go to End | |
| Author | Topic: | 1514 Views |
-
New Module for pages with embedded YouTube video

28 November 2007 at 1:17pm Last edited: 28 November 2007 1:49pm
I'm trying to learn SilverStripe and I created a simple module to include an embedded youtube video in a page from CMS.
It works quite correctly, the only "bug" is that if a parameter (Border) has zero value it is not considered. Did I use a wrong data type? I tried varchar, text, int and if border is not zero (e.g. "Border=1") it works, if Border is equal to 0 not (it becomes "Border="):
class YouTubeVideo extends Page {
static $db = array(
"Video" => "Varchar",
"Color1" => "Varchar",
"Color2" => "Varchar",
"Border" => "Varchar",
"Wmode" => "Varchar",
"Width" => "Varchar",
"Height" => "Varchar"
);function getCMSFields($cms) {
$fields = parent::getCMSFields($cms);
$fields->addFieldToTab("Root.Content.Main", new TextField("Video","YouTube Video ID"));
$fields->addFieldToTab("Root.Content.Main", new TextField("Color1","Color 1", "0xd6d6d6"));
$fields->addFieldToTab("Root.Content.Main", new TextField("Color2","Color 2", "0xf0f0f0"));
$fields->addFieldToTab("Root.Content.Main", new TextField("Border","Border", "0"));
$fields->addFieldToTab("Root.Content.Main", new TextField("Wmode","Wmode", "transparent"));
$fields->addFieldToTab("Root.Content.Main", new TextField("Width","Width", "425"));
$fields->addFieldToTab("Root.Content.Main", new TextField("Height","Height", "355"));
return $fields;
}}
class YouTubeVideo_Controller extends Page_Controller {
function Content(){
return $this->Content.$this->EmbeddedVideo();
}function EmbeddedVideo(){
global $YouTubeUrl;$video = '<object width="'.$this->Width.'" height="'.$this->Height.'"><param name="movie" value="'.$YouTubeUrl.$this->Video.'&rel=1&color1='.$this->Color1.'&color2='.$this->Color1.'&border='.$this->Border.'"></param><param name="wmode" value="'.$this->Wmode.'"></param><embed src="'.$YouTubeUrl.$this->Video.'&rel=1&color1='.$this->Color1.'&color2='.$this->Color2.'border='.$this->Border.'" type="application/x-shockwave-flash" wmode="'.$this->Wmode.'" width="'.$this->Width.'" height="'.$this->Height.'"></embed></object>';
return $video;
}}
-
Re: New Module for pages with embedded YouTube video

28 November 2007 at 5:57pm Last edited: 28 November 2007 6:04pm
Hi there,
Nice work!
You could probably do something like this on the Page class:
function Border() {
if($this->Border) {
return $this->Border;
} else {
return '0';
}
}Calls to $this->Border can then be replaced with $this->Border()
0 isn't output, because if it's 0 it's null. So, I guess you have to explicitly pass the 0 on as a string instead.
The data type for Border should probably be 'Boolean', since it's only 1 or 0 correct? If that's also the case, you could use the field NumericField instead of TextField in getCMSFields() (so you can't input anything apart from a number). One of the arguments to NumericField also allows you to limit the characters for that field with maxlength, so if it's a boolean you can't input anything more than 1 character.
Cheers,
Sean -
Re: New Module for pages with embedded YouTube video

29 November 2007 at 10:47am
Thanks... it's strange for me that zero character is considered a null value in a Varchar or Text data field, however I understood the point (solution was simpler than expected).
I fixed and updated my module and it's working fine now (same url of first post, now also autoplay parameter is managed).
Thanks again for answer, bye!
| 1514 Views | ||
|
Page:
1
|
Go to Top |


