Getting content for newsletter from multiple pages.
Using Umbraco v. 7.12
Hi, i am trying to create some functionality for a newsletter, which is supposed to be sent out once a week, which would contain everything that has been created in the last week on the site.
So every news article, event etc.
I have a headline, teaser and image on every single document type, which i will use for the content in the newsletter, and ofcourse a url for the page.
My question is this.
I have created a surface controller, where i have found my root page, and from there i can look at my content.
But if i go .children on the root, i would only be going down 1 level.
How do i look on my ENTIRE site, and look for everything created in the last x amount of days ?
i so far have this as far as code goes:
Other than just saying .children on each and looping through them, is there not a better way ?
public void InitiateNewsLetter()
{//http://localhost:50797/Umbraco/Surface/NewsLetterSurface/InitiateNewsLetter
// this is the point that should be called...
var content = GetContent(-14);
if (content != null)
{// there is content, go ahead and create the newsletter.
var emailList = GetEmailOfMembers();
if (emailList.Count() > 0)
{ // there is emails present
// create the newsletter... somehow...
}
}
else
{
//no content to show.. well.... huh..
}
// meant as this is new, this is what has happened last week in case you missed it...
// Very important, if there is no new content, it should not send out anything...!
}
public ActionResult GetContent(int days)
{
var root = Umbraco.TypedContentAtRoot().First(); // gets the main root of the site.
var memberRoot = root.DescendantsOrSelf<MemberPage>().FirstOrDefault(); // get the memberpage "root".
//memberRoot.Descendants
var children = memberRoot.Children;
var date = DateTime.Now.AddDays(days);
var content = children.Where(x => x.CreateDate >= date); // gets content that is older than the set date.
if (content != null)
{
if (content.Count() > 0)
{
// map the content....
return null;
}
else
{ //No content present, return null.
return null;
}
}
else
{
return null;
}
// get content from site, that has been created in the last 14 days.
// It will run once a week
}
public IEnumerable<string> GetEmailOfMembers()
{
var memberHelper = new UmbracoHelper(UmbracoContext.Current);
int totalRecords;
var members = Services.MemberService.GetAll(0, 200, out totalRecords).ToList();
var mappedMembers = UserContainerMapper.Map<UserModel>(members, Umbraco);
// get the email of ALL members, as an ienumerable string, and return that.
var emailList = mappedMembers.Select(x => x.Email); // should contain all emails needed.
return emailList;
}
public void SendMail()
{
// send the email to all members
}
Getting content for newsletter from multiple pages.
Using Umbraco v. 7.12
Hi, i am trying to create some functionality for a newsletter, which is supposed to be sent out once a week, which would contain everything that has been created in the last week on the site.
So every news article, event etc. I have a headline, teaser and image on every single document type, which i will use for the content in the newsletter, and ofcourse a url for the page.
My question is this.
I have created a surface controller, where i have found my root page, and from there i can look at my content. But if i go .children on the root, i would only be going down 1 level.
How do i look on my ENTIRE site, and look for everything created in the last x amount of days ?
i so far have this as far as code goes:
Other than just saying .children on each and looping through them, is there not a better way ?
Isn't .Descendants what you're looking for?
You should be able to get all the descendants by xpath with the following line of code:
It is probably descendants yes.. Hmm. I have never used Xpath before, can you explain it in relation to your example ?
is working on a reply...