shazwazza / articulate Goto Github PK
View Code? Open in Web Editor NEWA wonderful Blog engine built on Umbraco
License: MIT License
A wonderful Blog engine built on Umbraco
License: MIT License
I am aware that there is a previous issue about this problem but I am very stuck. I am using Umbraco 7.2 with Articulate 1.05. All up to date and everything. This problem happened when I decided to try hanging a blog directly under my home page. I understand from the Wiki that this is now possible. I am now unable to get into the back office (or look at the front of my website) to remove the offending second blog.
Sadly, I have not backed up my database for two weeks, so I am going to lose a lot of work. I have tried removing the new nodes from the database without much success. This is not an ideal way to work in any case. My database is now restored to how it was just after adding the second blog. The first blog is just under the root, as added by the Articulate package.
I am using Visual Studio 2013.
I would be grateful for any help getting myself out of this mess!
So I've been playing with Articulate and was interested in the import feature as we currently have a WordPress site.
Log contains:
2014-09-12 09:41:47,264 [5] ERROR Articulate.BlogMlImporter - [Thread 74] Importing failed with errors
System.NullReferenceException: Object reference not set to an instance of an object.
at Articulate.BlogMlImporter.<ImportPosts>d__1b.MoveNext() in x:\Projects\Articulate\Articulate.Project\Articulate\BlogMlImporter.cs:line 255
--- End of stack trace from previous location where exception was thrown ---
at System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(Task task)
at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task)
at System.Runtime.CompilerServices.TaskAwaiter`1.GetResult()
at Articulate.BlogMlImporter.<Import>d__0.MoveNext() in x:\Projects\Articulate\Articulate.Project\Articulate\BlogMlImporter.cs:line 84
I've uploaded a copy of my BlogML here.
I am encountering issues with using macro partials in articulate. When visiting category pages, the macro errors out. This happens even when the macro partial has nothing but the inherits statement at the top. It does work as expected with the non virtual pages though.
I've also found that this is not an issue with the old way of handling Macros (using MacroEngines).
I am using v 1.0.3. Does 1.0.4 address this issue? The project I'm using it for is nearing launch, so I'm reluctant to risk the upgrade.
Umbraco v7.1.4 fresh install, local, through WebMatrix
when loading package get a 'binary file errors detected'
i did try to proceed with install, hung. never completed.
Trying to install the package v1.0.4 and getting this error -- any thoughts?
At the bottom of each post it lists the categories that the post is in, however it is using the 'tags' prefix, not the 'categories' prefix
When managing an umbraco project in visual studio using it's nuget package and added articulate to the project in visual studio you cannot deploy via MSBuild because the web deploy .targets file is bombing out trying to do web.config transformations on web.config in theme view folders in articulate.
To get around this I had to disable connection tokenization on web.config transforms by adding
Falseto my csproj file in visual studio.
I'm not sure if this is a problem with umbraco's .targets file bombing out on publishing stuff in the app_plugins folder or if it's something articulate is doing to cause it.
Ideally though, we should be able to publish from visual studio without it failing on web.config's in the articulate theme -> some theme -> views -> web.config files.
Each articulate root node can configure the names of URLs like 'search', 'categories', etc...
but the url extensions don't respect that and have 'search', etc... hard coded.
Or something else that makes it easier ;)
Hi Shannon,
articulate is a brilliant package thanks for putting it together.
I am having trouble inserting images in the markdown editor, I get the following error when you click on an image:
TypeError: Cannot read property 'replace' of undefined
at properlyEncoded (http://purpleapron_dev/umbraco/lib/markdown/markdown.editor.js?umb__rnd=7.1.4.361927428:1589:23)
at linkEnteredCallback (http://purpleapron_dev/umbraco/lib/markdown/markdown.editor.js?umb__rnd=7.1.4.361927428:1657:48)
at Object.dialogService.mediaPicker.callback (http://purpleapron_dev/umbraco/js/umbraco.controllers.js:4839:6)
at Object.scope.submit (http://purpleapron_dev/umbraco/js/umbraco.services.js:1419:36)
at Object.$scope.clickHandler (http://purpleapron_dev/umbraco/js/umbraco.controllers.js:1037:32)
at http://purpleapron_dev/umbraco/lib/angular/1.1.5/angular.min.js:74:98
at http://purpleapron_dev/umbraco/lib/angular/1.1.5/angular-mobile.js:270:9
at Object.e.$eval (http://purpleapron_dev/umbraco/lib/angular/1.1.5/angular.min.js:92:272)
at Object.e.$apply (http://purpleapron_dev/umbraco/lib/angular/1.1.5/angular.min.js:92:379)
at HTMLAnchorElement. (http://purpleapron_dev/umbraco/lib/angular/1.1.5/angular-mobile.js:269:13)
Some of the values in PagerModel are not set correctly inside virtual pages. In the case I'm running into, the blog is a child of the home page, with the url "/blog." When I visit one of the category pages Model.NextUrl and Model.PreviousUrl in the Pager partial both start with "/blog/blog."
Running articulate on a site with hostnames defined, will cause problems (e.g. www.myurl.eu):
YSOD:
The route URL separator character '/' cannot appear consecutively. It must be separated by either a parameter or a literal value.
Parameter name: routeUrl
Line 11: object constraints = null, string[] namespaces = null)
Line 12: {
Line 13: var route = RouteTable.Routes.MapRoute(name, url, defaults, constraints, namespaces);
Line 14: route.RouteHandler = virtualNodeHandler;
Line 15: return route;
Source File: c:\Users\kris\Documents\Articulate\Articulate\RouteCollectionExtensions.cs Line: 13
The parameter url being passed is:
"http://www.myurl.eu/blog/rss"
This could be avoided by using node.UrlName
instead of node.Url
in ArticulateRoutes.cs, unless of course that could case issues in other cases. In which case url could probably be cleaned up with a regex or something.
I have an existing site for my research project where I wanted to integrate the blog:
At this point, the theme was Shazwazza. Subsequent page visit will yield YSOD:
Object reference not set to an instance of an object.
Source File: \\192.168.0.100\localuser\logocare\catsense\App_Plugins\Articulate\Themes\Shazwazza\Views\Partials\TagCloud.cshtml Line: 12
@Html.TagCloud(tagModel, 5, 50)
Other styles seem to work just fine.
Both projects are referencing ClientDependency 1.8.0-beta4 that cannot be found on nuget
I've noticed that if you have a surface controller on a page that is routed using the new UmbracoVirtualNodeRouteHandler methods, the surface controller never fires. It submits, but it doesn't seem to hit the action.
If I use an IContentFinder to populate the PCR content rather than the UmbracoVirtualNodeHandler, the surface controller works as expected.
I just trie to installed the package from our (as local).
This attempt ends in:
Could not load type 'Articulate.Controls.Installer'.
<%@ Control Language="C#" AutoEventWireup="true" Inherits="Articulate.Controls.Installer" %>
Line 2:
Source File: /App_Plugins/Articulate/BackOffice/Installer.ascx Line: 1
Error log here
Cheers,
Kris
I am trying to integrate Articulate into an existing website. It's not running on the root node.
There is a partial view which inherits from UmbracoViewPage
I check whether a property exists with Model.HasProperty("myAlias"). But when a model of type {Articulate.Models.ListModel} is passed, an null reference exception is thrown. I guess because the ListModel doesn't implement the "ContentType" property.
What is the best way to solve this?
Kind regards
Hi Shannon,
What do you think about about adding a static event to a couple of your controllers that would allow a developer to send a different model back to the view.
In our situation, we would like to create models that accepts ListModel and PostModel in their constructors that also inherits from our site specific "ViewModelBase" so that we can use our views more easily.
If something like
public static event TypedEventHandler<ArticulateController, ModelConstructedEventArgs<IMasterModel>> ModelConstructed;
was add to ArticulateController and ArticulateMarkdownController
That would be called before the return
var listModel = new ListModel(listNode, pager); // this may have to be IListModel listModel =
ModelConstructed.RaiseEvent(new ModelConstructedEventArgs<IMasterModel>(listModel), this);
return View(PathHelper.GetThemeViewPath(listModel, "List"), listModel);
We could build our own models that inherited from ListModel and PostModel and add some extra goodies.
I tried to build this in the solution and do a pull but don't know where to get the ClientDependency beta dependencies.
V7.2.1
Uninstalling Articulate leaves an "Articulate Importer" tag in the Developer section.
Also get a 404 /App_Plugins/Articulate/BackOffice/Dashboards/BlogImporter.html when opening the developer section.
I'm not sure how to duplicate this but I've seen it once. I do have a stack trace though so surely i can identify the null ref:
System.NullReferenceException: Object reference not set to an instance of an object.
at Articulate.UmbracoHelperExtensions.<>c__DisplayClass10.<GetContentByTags>b__b(PostModel c)
at System.Linq.EnumerableSorter`2.ComputeKeys(TElement[] elements, Int32 count)
at System.Linq.EnumerableSorter`1.Sort(TElement[] elements, Int32 count)
at System.Linq.OrderedEnumerable`1.<GetEnumerator>d__0.MoveNext()
at System.Linq.Enumerable.Count[TSource](IEnumerable`1 source)
at Articulate.Models.PostsByTagModel.get_PostCount()
at Articulate.Models.PostTagCollection.<GetTagWeight>b__0(PostsByTagModel x)
at System.Linq.Enumerable.WhereSelectEnumerableIterator`2.MoveNext()
at System.Linq.Enumerable.Max(IEnumerable`1 source)
at Articulate.Models.PostTagCollection.GetTagWeight(PostsByTagModel postsByTag, Decimal maxWeight)
at Articulate.HtmlHelperExtensions.<>c__DisplayClass6.<TagCloud>b__3(PostsByTagModel x)
at System.Linq.Enumerable.WhereSelectEnumerableIterator`2.MoveNext()
at System.Linq.Buffer`1..ctor(IEnumerable`1 source)
at System.Linq.OrderedEnumerable`1.<GetEnumerator>d__0.MoveNext()
at System.Linq.Enumerable.<TakeIterator>d__3a`1.MoveNext()
at System.Linq.Buffer`1..ctor(IEnumerable`1 source)
at System.Linq.OrderedEnumerable`1.<GetEnumerator>d__0.MoveNext()
at Articulate.HtmlHelperExtensions.TagCloud(HtmlHelper html, PostTagCollection model, Decimal maxWeight, Int32 maxResults)
at ASP._Page_App_Plugins_Articulate_Themes_Shazwazza_Views_Partials_TagCloud_cshtml.Execute()
at System.Web.WebPages.WebPageBase.ExecutePageHierarchy()
at System.Web.Mvc.WebViewPage.ExecutePageHierarchy()
at System.Web.WebPages.WebPageBase.ExecutePageHierarchy(WebPageContext pageContext, TextWriter writer, WebPageRenderingBase startPage)
at System.Web.Mvc.RazorView.RenderView(ViewContext viewContext, TextWriter writer, Object instance)
at System.Web.Mvc.BuildManagerCompiledView.Render(ViewContext viewContext, TextWriter writer)
at Umbraco.Core.Profiling.ProfilingView.Render(ViewContext viewContext, TextWriter writer)
at System.Web.Mvc.HtmlHelper.RenderPartialInternal(String partialViewName, ViewDataDictionary viewData, Object model, TextWriter writer, ViewEngineCollection viewEngineCollection)
at System.Web.Mvc.Html.PartialExtensions.Partial(HtmlHelper htmlHelper, String partialViewName, Object model, ViewDataDictionary viewData)
at Articulate.HtmlHelperExtensions.ThemedPartial(HtmlHelper html, IMasterModel model, String partialName, ViewDataDictionary viewData)
at ASP._Page_App_Plugins_Articulate_Themes_Shazwazza_Views_Master_cshtml.Execute()
at System.Web.WebPages.WebPageBase.ExecutePageHierarchy()
at System.Web.Mvc.WebViewPage.ExecutePageHierarchy()
at System.Web.WebPages.WebPageBase.ExecutePageHierarchy(WebPageContext pageContext, TextWriter writer, WebPageRenderingBase startPage)
at System.Web.WebPages.WebPageBase.<>c__DisplayClass7.<RenderPageCore>b__6(TextWriter writer)
at System.Web.WebPages.HelperResult.WriteTo(TextWriter writer)
at System.Web.WebPages.WebPageBase.Write(HelperResult result)
at System.Web.WebPages.WebPageBase.RenderSurrounding(String partialViewName, Action`1 body)
at System.Web.WebPages.WebPageBase.PopContext()
at System.Web.WebPages.WebPageBase.ExecutePageHierarchy(WebPageContext pageContext, TextWriter writer, WebPageRenderingBase startPage)
at System.Web.Mvc.RazorView.RenderView(ViewContext viewContext, TextWriter writer, Object instance)
at System.Web.Mvc.BuildManagerCompiledView.Render(ViewContext viewContext, TextWriter writer)
at Umbraco.Core.Profiling.ProfilingView.Render(ViewContext viewContext, TextWriter writer)
at System.Web.Mvc.ViewResultBase.ExecuteResult(ControllerContext context)
at System.Web.Mvc.ControllerActionInvoker.InvokeActionResult(ControllerContext controllerContext, ActionResult actionResult)
at System.Web.Mvc.ControllerActionInvoker.<>c__DisplayClass1a.<InvokeActionResultWithFilters>b__17()
at System.Web.Mvc.ControllerActionInvoker.InvokeActionResultFilter(IResultFilter filter, ResultExecutingContext preContext, Func`1 continuation)
at System.Web.Mvc.ControllerActionInvoker.<>c__DisplayClass1a.<>c__DisplayClass1c.<InvokeActionResultWithFilters>b__19()
at System.Web.Mvc.ControllerActionInvoker.InvokeActionResultFilter(IResultFilter filter, ResultExecutingContext preContext, Func`1 continuation)
at System.Web.Mvc.ControllerActionInvoker.<>c__DisplayClass1a.<>c__DisplayClass1c.<InvokeActionResultWithFilters>b__19()
at System.Web.Mvc.ControllerActionInvoker.InvokeActionResultWithFilters(ControllerContext controllerContext, IList`1 filters, ActionResult actionResult)
at System.Web.Mvc.ControllerActionInvoker.InvokeAction(ControllerContext controllerContext, String actionName)
at System.Web.Mvc.Controller.<>c__DisplayClass1d.<BeginExecuteCore>b__19()
at System.Web.Mvc.Async.AsyncResultWrapper.<>c__DisplayClass1.<MakeVoidDelegate>b__0()
at System.Web.Mvc.Async.AsyncResultWrapper.<>c__DisplayClass8`1.<BeginSynchronous>b__7(IAsyncResult _)
at System.Web.Mvc.Async.AsyncResultWrapper.WrappedAsyncResult`1.End()
at System.Web.Mvc.Controller.EndExecuteCore(IAsyncResult asyncResult)
at System.Web.Mvc.Async.AsyncResultWrapper.<>c__DisplayClass4.<MakeVoidDelegate>b__3(IAsyncResult ar)
at System.Web.Mvc.Async.AsyncResultWrapper.WrappedAsyncResult`1.End()
at System.Web.Mvc.Controller.EndExecute(IAsyncResult asyncResult)
at System.Web.Mvc.Controller.System.Web.Mvc.Async.IAsyncController.EndExecute(IAsyncResult asyncResult)
at System.Web.Mvc.MvcHandler.<>c__DisplayClass8.<BeginProcessRequest>b__3(IAsyncResult asyncResult)
at System.Web.Mvc.Async.AsyncResultWrapper.<>c__DisplayClass4.<MakeVoidDelegate>b__3(IAsyncResult ar)
at System.Web.Mvc.Async.AsyncResultWrapper.WrappedAsyncResult`1.End()
at System.Web.Mvc.MvcHandler.EndProcessRequest(IAsyncResult asyncResult)
at System.Web.Mvc.MvcHandler.System.Web.IHttpAsyncHandler.EndProcessRequest(IAsyncResult result)
at System.Web.HttpApplication.CallHandlerExecutionStep.System.Web.HttpApplication.IExecutionStep.Execute()
at System.Web.HttpApplication.ExecuteStep(IExecutionStep step, Boolean& completedSynchronously)
PostModel and ListModel both inherit from MasterModel, but for some reason TagListModel implements iMasterModel. This causes an error if you want to use
@inherits Umbraco.Web.Mvc.UmbracoViewPage<Articulate.Models.TagListModel> or @model dynamic in Tags.cshtml
I have change the code in TagListModel.cs to
public class TagListModel : MasterModel
{
public TagListModel(
IMasterModel masterModel,
string name,
int pageSize,
PostTagCollection tags)
: base(masterModel.RootBlogNode)
{
Tags = tags;
}
public PostTagCollection Tags { get; private set; }
}
I don't know if this affects any other area of the code, but it seems to be running fine with this change.
At the moment, the author field on a blog post is a text field, when the page is rendered the name in this field is either matched with the name in the Authors node or a user in the backoffice.
In order to reduce typing errors and make this easier, an autocomplete style data type can be created.
The configuration of the data type will include
The data type should also allow a name to be saved which is not in either of these lists.
Such as:
/authors/shannon
would list all posts by shannon
There is an error that gets thrown when setting the rounds in ArticulateRoutes.cs
It occurs when a root node is given a domain. Then url that is attempted to be routed is the full url including http://sitename.com etc
If you have multiple articulate roots and you render a tag/category list, it will include all posts tagged with the specified tag, including posts that exists under other roots.
On a site with contour installed alongside Articulate, trying to submit contour forms will fail.
Upon submission user is redirected to:
/blog/metaweblog?action=ContourForm&controller=FormRender
Page reloads to:
<methodResponse>
<fault>
<value>
<struct>
<member>
<name>faultCode</name>
<value>
<i4>0</i4>
</value>
</member>
<member>
<name>faultString</name>
<value>
<string>Request from client does not contain valid XML.</string>
</value>
</member>
</struct>
</value>
</fault>
</methodResponse>
For the moment I have commented out the addition of the Metaweblogroute and this resolves the issue. I did not yet have time to look at what is really going on.
Hello, I'm running into an issue with articulate and languages.
Here are the steps to reproduce:
I hope that is enough info to reproduce. Thanks.
throwing an error on line 27 near @html{ require...
System.IO.DirectoryNotFoundException: Could not find a part of the path
was just checking out the themes and see that error.
Thx!
We had a "TestCategory" that was attached to the initial blog post. When it was removed and an actual category was added, the TestCategory still displays in Category menu in the sidebar and hitting the page throws an error. To me, not displaying categories that don't actually have posts attached would be ideal.
Create 2 articulate roots with no domains assigned and restart your web app and you'll get an error like:
A route named 'articulate_search_656226678' is already in the route collection. Route names must be unique.
Parameter name: name
Not sure of this is something that needs to be done within Umbraco itself.
When adding a new item to the list view, it would be nice to have the newly added items being displayed first by default (currently, it is showing the oldest item first).
I know we can change the order via the titles, but i think it would be nicer for the order to descending by default.
Never mind... delete this.
This should be a toggle on the articulate root node as to whether this is enabled or not (will be enabled by default)
Where is an example?
Due to the reflection usage and some changes in 7.2 with the PCR Prepare() method, the virtual pages throw ysods
Hello,
When using the search form in articulate and getting a list of results that trigger pagination, it will cause a page not found error when clicking the pager buttons.
The easiest way to see this is to create a blog, add three posts, set your page size to 1 in the back office, navigate to the blog, click the pager button for older posts, receive the following error:
Page not found
No umbraco document matches the url '/blogs/search?term=test&p=2'.
This page can be replaced with a custom 404. Check the documentation for "custom 404".
This page is intentionally left ugly ;-)
Seems like it would be useful to have the forum enabled on the package page for this tool at: http://our.umbraco.org/projects/starter-kits/articulate
Here is an example of a package with a forum enabled (scroll to the bottom of the page): http://our.umbraco.org/projects/backoffice-extensions/key-value-editor
The concern would be for an existing blog (on another platform) that has lots of existing, permanent URLs that we would like to preserve when moving to the Articulate platform. I also see variants on this other places where just the year and month, or just the year by itself, are also used in path parts. For example, /blog/2014/my-article or /blog/2014/10/my-article.
Another concern I have related to this, is that it seems to me with all blog posts lumped under a single node, over time on a very large & active blog, you run the risk of "title collision," e.g., "Press Release(13)" or "What's new this Month(21)". I also think, personally, having the date of a published blog article as part of its URL is nice and re-assuring to find when coming across random articles on the web, especially those that are time-sensitive... This is just a personal preference, but the preservation of existing URLs is the real concern. Thank you!
Not certain if this is a Blog issue or Umbraco.
When using the tags.cshtml the following line
Model.Tags.ToArray()
Appears to be returning items from the recycle bin. This caused an issue as it was returning an Object not Found exception. In my specific case, i created a test post but did not add a published date but did use a test category tag.
The tag was being picked up, but was causing exceptions when viewing that category as the date published was not set.
Clearing my recycle bin cleared up all the issues.
This is due to the upgrade to angular and setting a multi-part mime request
I am running articulate using host names (I have implemented the fix in issue 11) and have noticed the tag cloud is rendering fully qualified links with URL encoding (i.e.encoding http://).
I have changed stringExtensions.cs to remove the http:// before encoding and then replace it after encoding and modified PotsByTagModel.cs to not add the / to the start if the url begins with http://.
Code is available if you want it.
I couldn't find this anywhere, so I thought I'd make an issue - it would be really great if we could select whether we want our RSS feed to populate the full post or just an excerpt of the post.
Normally you'd just type in
/a-new
to launch the mobile editor, or wherever your blog root is, such as
/my-blog/a-new
however, this has been broken since last release and requires you to enter the Id of the node which isn't ideal.
Importing with the Export Disqus XML option not checked still gives you the following notice:
Click here to download the exported Disqus Xml file
The link is broken however.
A declarative, efficient, and flexible JavaScript library for building user interfaces.
๐ Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
An Open Source Machine Learning Framework for Everyone
The Web framework for perfectionists with deadlines.
A PHP framework for web artisans
Bring data to life with SVG, Canvas and HTML. ๐๐๐
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
Some thing interesting about web. New door for the world.
A server is a program made to process requests and deliver data to clients.
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
Some thing interesting about visualization, use data art
Some thing interesting about game, make everyone happy.
We are working to build community through open source technology. NB: members must have two-factor auth.
Open source projects and samples from Microsoft.
Google โค๏ธ Open Source for everyone.
Alibaba Open Source for everyone
Data-Driven Documents codes.
China tencent open source team.