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.

We've moved the forum!

Please use forum.silverstripe.org for any new questions (announcement).
The forum archive will stick around, but will be read only.

You can also use our Slack channel or StackOverflow to ask for help.
Check out our community overview for more options to contribute.

Blog Module /

Discuss the Blog Module.

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

Setting PageType to BlogEntry


Go to End


1780 Views

Avatar
Hoppi

Community Member, 1 Post

14 January 2010 at 12:21am

Hi!
I'm currently trying to force the user to create blogentries in german and english simultaneously, since we use the blog widget for our news.
The problem is that I want to link german and english version of the news, so I'm using createTranslation(). Works well so far if it weren't for two huge problems:

1. The PageType of the translated blogentry object is "none". How can I change this?
2. Despite having the english texts saved, the german ones are displayed in both versions.

Here's the code I'm using:

function postblog($data, $form) {
		if(!Permission::check('BLOGMANAGEMENT')) return Security::permissionFailure();

		Cookie::set("BlogHolder_Name", $data['Author']);
		$blogentry = false;
		
		if(isset($data['ID']) && $data['ID']) {
			$blogentry = DataObject::get_by_id("BlogEntry", $data['ID']);
		}
		
		if(!$blogentry) {
			$blogentry = new BlogEntry();
		}
		
		$form->saveInto($blogentry);
		if(i18n::get_locale() === "de_DE") {
			$blogentry->Content = $form->datafieldByName('BlogPost')->dataValue();
			$blogentry->Title = $form->datafieldByName('Title')->dataValue();
		} else if (i18n::get_locale() === "en_US") {
			$blogentry->Content = $form->datafieldByName('BlogPostEN')->dataValue();
			$blogentry->Title = $form->datafieldByName('TitleEN')->dataValue();
		}
		$blogentry->ParentID = $this->ID;
		$blogentry->Status = "Published";
		$blogentry->writeToStage("Stage");
		$blogentry->publish("Stage", "Live");
		
		$translatedBlogentry = new BlogEntry();
		$form->saveInto($translatedBlogentry);
		//check current language and automatically choose the other one for
		//the translation.
		if(i18n::get_locale() === "de_DE") {
			$translatedBlogentry = $blogentry->createTranslation('en_US');
			unset($translatedBlogentry->Title);
			unset($translatedBlogentry->Content);
			
			$translateBlogentry->PageType = 'BlogEntry';
			$translatedBlogentry->Title = $form->datafieldByName('TitleEN')->dataValue();
			$translatedBlogentry->Content = $form->datafieldByName('BlogPostEN')->dataValue();
			$translatedBlogentry->ParentID = Translatable::get_one_by_locale('BlogHolder', ('en_US'))->ID;
		} else if (i18n::get_locale() === "en_US") {
			$translatedBlogentry = $blogentry->createTranslation('de_DE');
			unset($translatedBlogentry->Title);
			unset($translatedBlogentry->Content);
			
			$translateBlogentry->PageType = 'BlogEntry';
			$translatedBlogentry->Title = $form->datafieldByName('Title')->dataValue();
			$translatedBlogentry->Content = $form->datafieldByName('BlogPost')->dataValue();
			$translatedBlogentry->ParentID = Translatable::get_one_by_locale('BlogHolder', ('de_DE'))->ID;
		}
		
		
		$translatedBlogentry->Status = "Published";
		$translatedBlogentry->writeToStage("Stage");
		$translatedBlogentry->publish("Stage", "Live");
		
		Director::redirect($this->Link());
	}
[/code/