I have been tasked with creating a small website using SharePoint 2010 Site Pages via SharePoint Designer. I am bringing over my favorite html template, which loads and runs as expected (mostly), but I quickly ran into the following problem.
I typically use PHP to inject certain data into my page by reading directly from a local file. I have no experience with ASP, which appears to be the only method to accomplish this. I have searched the docs and so many sites but haven't found a clear-cut way to do this, and now my head is spinning. Can anyone help me with a simple process for reading a file into the middle of my html file as it gets served?
For example:
<html>
<body>
Here's my title
<inject file contents here>
Here's my footer
</body>
</html>
Thanks all, any help will be much appreciated!
You cannot do this out of the box. You will have to create a customised solution to do this, by implementing a custom controls for instance.
When you start using Sharepoint you need to change your mindset about whatever you used before. Believe me you don't want to pick a fight with Sharepoint, because the beast will win.
back to your problem I think you should be looking at Reusable Content.
Here is a description about it:
http://en.share-gate.com/blog/sharepoint-reusable-content-a-forgotten-beauty
Basically you have a list where you manage all your reusable content bits (sort of like your files).
And then in the Rich text editor for the page content you can then insert a snippet that inject your reusable content.
if the content changes all the places you are using the reusable content bits will also change.
So this behaviour is pretty much the same you get if using a file. Except it's the SharePoint Way.
Good luck
First off, I know this isn't a normal thing to do, so if it isn't possible, just let me know.
I have a bunch of pages (100+) that are all designed to be contained within an iframe. Recently, I've decided to move away from this and use a master page to do some formatting on the page that used to contain the iframe. However, in order to do this, the page inside the frame is now going to be the page that is navigated to. What I need to be able to do is apply this new master page to a page that didn't have a master page prior and I'd like to do it without having to change the markup of all the other pages. All of these pages inherit from a single parent class that can be used to accomplish this, if it is possible. It is necessary that iframes are not used in this solution, as their compatibility is part of the problem I'm trying to work around. Thanks for any help/ideas you can offer.
EDIT
This is the error I'm getting when I try the way the comments suggest:
Content controls have to be top-level controls in a content page or a nested master page that references a master page.
Should be very possible. As I recall, you can just have your base class set its own MasterPage in the OnPreInit event:
this.MasterPage = "~/SpecificMasterPage.aspx";
Response to comments
That complicates things. Here's something you can try, but I don't know whether it will work: try creating regular page to be your "master" page, and loading the other pages in as if they were controls using the Page.LoadControl method. I don't know whether whole pages can be loaded this way, and even if they are this is hacky at best, since you'll be producing new <html>, <head>, and <body> tags within the body of the page.
So your best bet is probably to convert all your pages to either use a MasterPage or to be Controls. If you're clever, you might be able to write a little program that can do this to all your pages automatically.
Does anyone know where I can go to get some ASP themes for Visual Studio? I've Googled it, but it doesn't seem that there are many out there. I was hoping someone here knew something that I don't. Thanks
Visual Studio has nothing to do with it. The CSS for a custom theme will have rules that are applied to the HTML elements rendered to the page. The structure of your HTML can vary greatly; every developer/designer have their own preferences about whether to place certain parts of the page on a form or on a master page. There is no standard way of doing this and each project will have its own set of requirements in this regard.
http://msdn.microsoft.com/en-us/library/705sff8d%28VS.80%29.aspx
There really is nothing to learning how to create an ASPNET theme. If it's the CSS part that is causing you difficulty then your best bet is to install the Web Developer Toolbar in Firefox and view some CSS galleries. This tool will then allow you to investigate how some really professional sites are put together.
https://addons.mozilla.org/en-US/firefox/addon/web-developer/
i think you must have to create your own CSS.
Apologies for the terribly newb question. We're currently implementing Google Web Optimizer in our ASP.NET Web Application and some of the code is supposed to go in very specific places on certain pages. For example, for the "Control Page" Google has some Javascript that sits outside of the <html> tags.
I know I probably don't need to place the code exactly where Google recommends, but we've been getting some goofy results lately, and I really wanted to make it as watertight as possible to ensure it's not just bad implementation.
We have a lot of files in our project that reference the site.master, but only one needs to have some Javascript placed outside the <html> tag.
This, in theory, seems simple enough, my question is this: Do I need to put a ContentPlaceHolder in every file that references the site.master? (Even the tens that aren't passing any code to the site.master?) That's not something I feel like doing for many different reasons (altering tens of files). If that's the case, and I do need to add empty ContectPlaceHolders to every page, is there some other way around things without having to piece together a unique file just to put some Javascript outside of the <html> tag?
Thanks for any help.
The answer is no, as long as the ContentPlaceHolder in the Master is empty. That way, you only put Content for that ContentPlaceHolder on the pages where you want something rendered.
The simple question is that you not need to place Blank pace holder.
If the master page find this place holder, then its replace the content on it, if not finds it then its leave what have inside.
Scenario:
I have a pretty standard master page for all my pages. It includes the usual login forms and other dynamic lists to be extracted on each page. Webdesigners can already modify the central content place holder of each page. But still, the design and layout for the master page is still in my project and any modification to the design must be made in Visual Studio and the project re-compiled and re-deployed.
What is the best way to provide near-full access to designing the master page through a CMS? Some of the problems I can identify is the inclusion of any dynamic lists or specific controls such as a login form.
Thanks.
Unless you want to host your content within a portal I don't know of a perfect answer to this.
If the bits they design just amount to look and feel for the page then this can be controlled by css and you could allow them to create themes using different css files.
This is indeed an interesting question, and there is no perfect solution. I worked for an ecommerce shop with this issue, and frankly, I just asked the designers in many cases to provide me there html and css, then I would grab the html pieces and css and add them to my project. Yes this was tedious....
Then we we built a cms where the designers could copy and paste their html into html editors, and we would store those pieces of html in a database. My web app would grab those from the database at run time. This solve some issues, but not all, since it did not give them complete control of the design of the web page.
The bottom line is you need to standard as to how the designer will submit their work to you. If you have that, and you can count on the html and css, then you can star to think of possibly building a CMS around that. In this days of RAD, I have found it easier to just work with the html and css delivered to me and simply copy and paste the pieces into my master page and other pages as needed.
While this is not a CMS answer, you do have the ability to allow designers to open the master pages in Expression Web. I will not say it is the greatest tool in the world, but I have had designers work up the master page designs in Expression with good results.
There is a pain point, however. If the entire project is opened, the designer will see the code behind files as separate items, not like the treeview view seen in Visual Studio.
I imagine you could have the master page checked out for use with Expression through a CMS, but there is no built in way to do this, nor do I know of a third party tool to do this. Hopefully Expression Web 3 will make things easier.
If you have a CMS, you may be better to give it full control over page content. If there are things the CMS cannot do, you could look to write extensions or plugin modules for the CMS that your designers can then drop onto the page in the CMS's page editor.
If your CMS doesn't support plugin modules, you may be trying to force both the CMS and master pages to do things they were not intended to do.
If the above doesn't work in your situation, here's another thought: place inline frames on your master page that host pages that are edited in the CMS.
Hope that helps.
Would it be possible for you to put placeholders in the Master Page in place of the areas that designers should be allowed to edit? Since Master Pages are only editable in Visual Studio, it may be your only feasible option at this point in time. One problem with this approach is that the content put in the placeholders is unlikely to be valid, since you would probably have tags left open in one placeholder and closed in another.
<html>
<head>
<title></title>
<asp:PlaceHolder ID="headerContent" runat="server"></asp:PlaceHolder>
</head>
<body>
<asp:PlaceHolder ID="beforeContent" runat="server"></asp:PlaceHolder>
<asp:PlaceHolder ID="centralContent" runat="server"></asp:PlaceHolder>
<asp:PlaceHolder ID="afterContent" runat="server"></asp:PlaceHolder>
</body>
</html>
I know it's ugly, but it might give you the control you need (as long as you don't mind the XHTML validator warning you all the time). What you put in the placeholders could be your user controls or literal content or whatever, but you'd have to load it dynamically.
Thoughts?
EDIT: This won't work. The PlaceHolder is going to render <div> tags that would mess things up. Maybe you could extend PlaceHolder and override how it renders its HTML.
Interesting question,
been dabbling in that area myself a while ago.
How knowledgeable are these web designers when not in the realm of not-inside-Photoshop-or-flash?
If using a DIY-CMS, perhaps you can template the most susceptible objects, e. g. making a generic (as in whatever you feel like, not whatever they feel like ;-)) list and a way of entering design, if applicable.
As long as you have a thorough framework set up, that deals with the attributes available to the designers through the CMS, there shouldn't be any need for recompiling... but of course, I can easily see a developer (read : me) stumbling
into the gap of nitty-pitty-perfection....
I'm afraid the easiest, and only manageable, path is to standardize how the designers express their needs&wants to you...it just won't code itself...
Could you provide some examples?
Well, with a Web Application Project pages are not compiled until accessed (link is 2005 but it still applies). This means that the actual .aspx (and .ascx etc) page is deployed in its original state. A designer can update the format of the page on the server and the updates will be compiled the next time someone requests that content.
It would be relatively trivial to allow designers to download the current pages and upload replacements through your website's UI. However, it isn't very secure (and probably should never be done). It would be better to allow designers access to the virtual directory over the web so they can connect to it using a tool such as Expression Web. This way the designer can open the current website, edit pages, and push the results directly into production (scary tho that thought may be).
As I'm getting downvoted for having a correct answer, let me point out something.
Website projects compile codebehind and pages on demand. If you need to update code regularly, its an okay solution.
Web application projects can be configured to be updatable. All codebehind and classes are compiled into an assembly, and all aspx, ascx, etc pages are deployed and compiled on demand. This means that a designer can connect to the website, update the layout and static content, and see the changes on the next request.
This is my preferred method of deployment. I have a few web application projects out there in the wild, with updatable aspx files deployed alongside my dll. The idea being that users of the website can alter the UI without having to submit updates to me so I can recompile it for them.
a .master is just a text file. They can edit it however they like. There's certainly nothing they'd do to it that would require you to recompile the code just to view it. That's the big win with Master Pages in the first place: designers and other non-programmers can edit them manually without breaking anything.
Give them access to the file under source control and let them go nuts.