[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: Подтягивание html файла на html старничку
HawkHunter
В общем в этом и состоит вопрос.

Ситуация такая: я создаю сайты локально в программе и выкладываю их потом на хост, а заказчику хочется редактировать тексты (контент самому). Так вот програму для создания сайтов я не дам, т.к. они там напорят косяков и меня ещё в этом обвинят.

Так вот есть такая програмка которая генерерит html станички из набраннового текста и может выложить в заданную папку на заданный хост чем собой по сути являет псевдо CM, называется она NoteSite.
И вот, мне нужен аякс скрипт который будет подтягивать автоматом эти странички на сам сайт не затрагивая самого оформления дизайна.

Я такой скрипт отыскал и по заявлению знакомого он отлично работает, хотя при моём мучении рн никак не хотел ничего делать. После чего мы создали простейшую конструкцию для его работы и выяснилось что он не кроссбраузерный, т.е. он работает не во всех браузерах.
Тест на опера 11.51, Хром 14.0.835.163 m, и IE 9.0.8112.16421 подвергся не удаче, сработал на Firefox 6.0.2 и Safari 5.0.4

Вот скрипт ajaxpagination.js

Свернутый текст
//Ajax Pagination Script- Author: Dynamic Drive (http://www.dynamicdrive.com)
//** Created Sept 14th, 07'
//** Updated Oct 31st, 07'- Fixed bug when book only contains 1 page
//** Updated Aug 9th 08'- Upgraded to v1.2:
//1) Adds ability to limit the range of the visible pagination links shown for a book with many pages
//2) Adds Session only persistence to persist the last page user viewed when navigating away then returning to the webpage containing the script.
//3) Modified Ajax request function in IE7 to use ActiveXObject object, so script can be tested offline

//** Updated Oct 21st 08'- Upgraded to v1.2.1: Fixed bug with no content showing when there's only one page
//** Updated Dec 1st 08'- v1.2.2: Fixed bug in FF when only one page in book


var ajaxpageclass=new Object()
ajaxpageclass.loadstatustext="Requesting content, please wait..." // HTML to show while requested page is being fetched:
ajaxpageclass.ajaxbustcache=false // Bust cache when fetching pages?
ajaxpageclass.paginatepersist=true //enable persistence of last viewed pagination link (so reloading page doesn't reset page to 1)?
ajaxpageclass.pagerange=1 // Limit page links displayed to a specific number (useful if you have many pages in your book)?
ajaxpageclass.ellipse="..." // Ellipse text (no HTML allowed)

/////////////// No need to edit beyond here /////////////////////////


ajaxpageclass.connect=function(pageurl, divId){
var page_request = false
var
bustcacheparameter=""
if (window.XMLHttpRequest && !document.all) // if Mozilla, Safari etc (skip IE7, as object is buggy in that browser)
page_request = new XMLHttpRequest()
else if (window.ActiveXObject){ // if IE6 or below
try {
page_request = new ActiveXObject("Msxml2.XMLHTTP")
}
catch (e){
try{
page_request = new ActiveXObject("Microsoft.XMLHTTP")
}
catch (e){}
}
}

else
return false

document.getElementById(divId).innerHTML=this.loadstatustext //Display "fetching page message"
page_request.onreadystatechange=function(){ajaxpageclass.loadpage(page_request, divId)}
if (this.ajaxbustcache) //if bust caching of external page
bustcacheparameter=(pageurl.indexOf("?")!=-1)? "&"+new Date().getTime() : "?"+new Date().getTime()
page_request.open('GET', pageurl+bustcacheparameter, true)
page_request.send(null)
}

ajaxpageclass.loadpage=function(page_request, divId){
if (page_request.readyState == 4 && (page_request.status==200 || window.location.href.indexOf("http")==-1)){
document.getElementById(divId).innerHTML=page_request.responseText
}
}


ajaxpageclass.getCookie=function(Name){
var re=new RegExp(Name+"=[^;]+", "i"); //construct RE to search for target name/value pair
if (document.cookie.match(re)) //if cookie found
return document.cookie.match(re)[0].split("=")[1] //return its value
return null
}

ajaxpageclass.setCookie=function(name, value){
document.cookie = name+"="+value
}

ajaxpageclass.getInitialPage=function(divId, pageinfo){
var persistedpage=this.getCookie(divId)
var selectedpage=(this.paginatepersist && this.getCookie(divId)!=null)? parseInt(this.getCookie(divId)) : pageinfo.selectedpage
return (selectedpage>pageinfo.pages.length-1)? 0 : selectedpage //check that selectedpage isn't out of range
}

ajaxpageclass.createBook=function(pageinfo, divId, paginateIds){ //MAIN CONSTRUCTOR FUNCTION
this.pageinfo=pageinfo //store object containing URLs of pages to fetch, selected page number etc
this.divId=divId
this.paginateIds=paginateIds //array of ids corresponding to the pagination DIVs defined for this pageinstance
//NOTE: this.paginateInfo stores references to various components of each pagination DIV defined for this pageinstance
//NOTE: Eg: divs[0] = 1st paginate div, pagelinks[0][0] = 1st page link within 1st paginate DIV, prevlink[0] = previous link within paginate DIV etc

this.paginateInfo={divs:[], pagelinks:[[]], prevlink:[], nextlink:[], previouspage:null, previousrange:[null,null], leftellipse:[], rightellipse:[]}
this.dopagerange=false
this
.pagerangestyle=''
this.ellipse='<span style="display:none">'+ajaxpageclass.ellipse+'</span>' //construct HTML for ellipse
var initialpage=ajaxpageclass.getInitialPage(divId, pageinfo)
this.buildpagination(initialpage)
this.selectpage(initialpage)
}

ajaxpageclass.createBook.prototype={

buildpagination:function(selectedpage){ //build pagination links based on length of this.pageinfo.pages[]
this.dopagerange=(this.pageinfo.pages.length>ajaxpageclass.pagerange) //Bool: enable limitpagerange if pagerange value is less than total pages available
this.pagerangestyle=this.dopagerange? 'style="display:none"' : '' //if limitpagerange enabled, hide pagination links when building them
this.paginateInfo.previousrange=null //Set previousrange[start, finish] to null to start
if (this.pageinfo.pages.length<=1){ //no 0 or just 1 page
document.getElementById(this.paginateIds[0]).innerHTML=(this.pageinfo.pages.length==1)? "" : ""
return
}
else{ //construct paginate interface
var paginateHTML='<div class="pagination"><ul>\n'
paginateHTML+='<li><a href="#previous" rel="'+(selectedpage-1)+'">«</a></li>\n' //previous link HTML
for (var i=0; i<this.pageinfo.pages.length; i++){
var ellipses={left: (i==0? this.ellipse : ''), right: (i==this.pageinfo.pages.length-1? this.ellipse : '')} //if this is 1st or last page link, add ellipse next to them, hidden by default
paginateHTML+='<li>'+ellipses.right+'<a href="#page'+(i+1)+'" rel="'+i+'" '+this.pagerangestyle+'>'+(i+1)+'</a>'+ellipses.left+'</li>\n'
}
paginateHTML+='<li><a href="#next" rel="'+(selectedpage+1)+'">next »</a></li>\n' //next link HTML
paginateHTML+='</ul></div>'
}// end construction
this.paginateInfo.previouspage=selectedpage //remember last viewed page
for (var i=0; i<this.paginateIds.length; i++){ //loop through # of pagination DIVs specified
var paginatediv=document.getElementById(this.paginateIds[i]) //reference pagination DIV
this.paginateInfo.divs[i]=paginatediv //store ref to this paginate DIV
paginatediv.innerHTML=paginateHTML
var paginatelinks=paginatediv.getElementsByTagName("a")
var ellipsespans=paginatediv.getElementsByTagName("span")
this.paginateInfo.prevlink[i]=paginatelinks[0]
if (paginatelinks.length>0)
this.paginateInfo.nextlink[i]=paginatelinks[paginatelinks.length-1]
this.paginateInfo.leftellipse[i]=ellipsespans[0]
this.paginateInfo.rightellipse[i]=ellipsespans[1]
this.paginateInfo.pagelinks[i]=[] //array to store the page links of pagination DIV
for (var p=1; p<paginatelinks.length-1; p++){
this.paginateInfo.pagelinks[i][p-1]=paginatelinks[p]
}
var pageinstance=this
paginatediv.onclick=function(e){
var targetobj=window.event? window.event.srcElement : e.target
if (targetobj.tagName=="A" && targetobj.getAttribute("rel")!=""){
if (!/disabled/i.test(targetobj.className)){ //if this pagination link isn't disabled (CSS classname "disabled")
pageinstance.selectpage(parseInt(targetobj.getAttribute("rel")))
}
}

return false
}
}
}
,

selectpage:function(selectedpage){
//replace URL's root domain with dynamic root domain (with or without "www"), for ajax security sake:
if (this.pageinfo.pages.length>0){
var ajaxfriendlyurl=this.pageinfo.pages[selectedpage].replace(/^http:\/\/[^\/]+\//i, "http://"+window.location.hostname+"/")
ajaxpageclass.connect(ajaxfriendlyurl, this.divId) //fetch requested page and display it inside DIV
}
if (this.pageinfo.pages.length<=1) //if this book only contains only 1 page (or 0)
return //stop here
var paginateInfo=this.paginateInfo
for (var i=0; i<paginateInfo.divs.length; i++){ //loop through # of pagination DIVs specified
//var paginatediv=document.getElementById(this.paginateIds[i])

paginateInfo.prevlink[i].className=(selectedpage==0)? "prevnext disabled" : "prevnext" //if current page is 1st page, disable "prev" button
paginateInfo.prevlink[i].setAttribute("rel", selectedpage-1) //update rel attr of "prev" button with page # to go to when clicked on
paginateInfo.nextlink[i].className=(selectedpage==this.pageinfo.pages.length-1)? "prevnext disabled" : "prevnext"
paginateInfo.nextlink[i].setAttribute("rel", selectedpage+1)
paginateInfo.pagelinks[i][paginateInfo.previouspage].className="" //deselect last clicked on pagination link (previous)
paginateInfo.pagelinks[i][selectedpage].className="currentpage" //select current pagination link
}
paginateInfo.previouspage=selectedpage //Update last viewed page info
ajaxpageclass.setCookie(this.divId, selectedpage)
this.limitpagerange(selectedpage) //limit range of page links displayed (if applicable)
},

limitpagerange:function(selectedpage){
//reminder: selectedpage count starts at 0 (0=1st page)
var paginateInfo=this.paginateInfo
if (this.dopagerange){
var visiblelinks=ajaxpageclass.pagerange-1 //# of visible page links other than currently selected link
var visibleleftlinks=Math.floor(visiblelinks/2) //calculate # of visible links to the left of the selected page
var visiblerightlinks=visibleleftlinks+(visiblelinks%2==1? 1 : 0) //calculate # of visible links to the right of the selected page
if (selectedpage<visibleleftlinks){ //if not enough room to the left to accomodate all visible left links
var overage=visibleleftlinks-selectedpage
visibleleftlinks-=overage //remove overage links from visible left links
visiblerightlinks+=overage //add overage links to the visible right links
}
else if ((this.pageinfo.pages.length-selectedpage-1)<visiblerightlinks){ //else if not enough room to the left to accomodate all visible right links
var overage=visiblerightlinks-(this.pageinfo.pages.length-selectedpage-1)
visiblerightlinks-=overage //remove overage links from visible right links
visibleleftlinks+=overage //add overage links to the visible left links
}
var currentrange=[selectedpage-visibleleftlinks, selectedpage+visiblerightlinks] //calculate indices of visible pages to show: [startindex, endindex]
var previousrange=paginateInfo.previousrange //retrieve previous page range
for (var i=0; i<paginateInfo.divs.length; i++){ //loop through paginate divs
if (previousrange){ //if previous range is available (not null)
for (var p=previousrange[0]; p<=previousrange[1]; p++){ //hide all page links
paginateInfo.pagelinks[i][p].style.display="none"
}
}

for (var p=currentrange[0]; p<=currentrange[1]; p++){ //reveal all active page links
paginateInfo.pagelinks[i][p].style.display="inline"
}
paginateInfo.pagelinks[i][0].style.display="inline" //always show 1st page link
paginateInfo.pagelinks[i][this.pageinfo.pages.length-1].style.display="inline" //always show last page link
paginateInfo.leftellipse[i].style.display=(currentrange[0]>1)? "inline" : "none" //if starting page is page3 or higher, show ellipse to page1
paginateInfo.rightellipse[i].style.display=(currentrange[1]<this.pageinfo.pages.length-2)? "inline" : "none" //if end page is 2 pages before last page or less, show ellipse to last page
}
}

paginateInfo.previousrange=currentrange
},

refresh:function(pageinfo){
this.pageinfo=pageinfo
var initialpage=ajaxpageclass.getInitialPage(this.divId, pageinfo)
this.buildpagination(initialpage)
this.selectpage(initialpage)
}
}


Вставлял в блок html строки
<script type="text/javascript" src="ajaxpagination.js>
var book={pages: ["
cms/db29a0be-ea88-4260-bdaf-db3c8231bd02.htm"], selectedpage: 0 }
var mybookinstance=new ajaxpageclass.createBook(book, "
bookcontent", ["paginate-top", "paginate-bottom"])
</script>


где db29a0be-ea88-4260-bdaf-db3c8231bd02.htm это то что нужно подтянуть и cms/ в какой папке на хосте в корне этот htm лежит(ну это понятно)

Так где ошибка, почему не работае, помогите господа, день зазря прошёл, очень нужно



Спустя 3 минуты, 58 секунд (21.09.2011 - 02:01) Игорь_Vasinsky написал(а):
Цитата
<script type="text/javascript" src="ajaxpagination.js>
var book={pages: ["cms/db29a0be-ea88-4260-bdaf-db3c8231bd02.htm"], selectedpage: 0 }
var mybookinstance=new ajaxpageclass.createBook(book, "bookcontent", ["paginate-top", "paginate-bottom"])
</script>


во-первых может с путями косяки?
/cms/db29a0be-ea88-4260-bdaf-db3c8231bd02.htm

во-вторых не понятная расстановка "(ковычек)
var mybookinstance=new ajaxpageclass.createBook(book, "bookcontent", ["paginate-top", "paginate-bottom"])

Спустя 4 минуты, 19 секунд (21.09.2011 - 02:05) HawkHunter написал(а):
Ну с путями я целый день тягался, а что с ковычками? убрать?

Спустя 3 минуты, 5 секунд (21.09.2011 - 02:09) Игорь_Vasinsky написал(а):
1.тягался не дотягался?
2. А мне трудно судить переменные там или строки


Спустя 2 минуты, 45 секунд (21.09.2011 - 02:11) HawkHunter написал(а):
Вот если можно посмотрите код страницы

Спустя 5 минут, 9 секунд (21.09.2011 - 02:16) Игорь_Vasinsky написал(а):
Для FF есть firebug
Для Google CHrome - есть F12

Ведите отладку, смотрите какая строка выдаёт ошибку, моет вы вообще плагин не подцепили.

Спустя 59 секунд (21.09.2011 - 02:17) caballero написал(а):
Не очень понятно зачем такой мудреный скрипт для подтянуть кусок HTML на сайт. Какая техническая проблемма подтянуть файл и вставить его в DOM дерево

Спустя 3 минуты, 9 секунд (21.09.2011 - 02:21) Игорь_Vasinsky написал(а):
Цитата
где db29a0be-ea88-4260-bdaf-db3c8231bd02.htm это то что нужно подтянуть и cms/ в какой папке на хосте в корне этот htm лежит(ну это понятно)


так его чначала залить нужно, может вы пытаетесь его с локальной тачки сдёрнуть?

Спустя 21 секунда (21.09.2011 - 02:21) HawkHunter написал(а):
Цитата (caballero @ 20.09.2011 - 23:17)
Не  очень  понятно  зачем  такой  мудреный  скрипт  для  подтянуть  кусок  HTML на  сайт.  Какая  техническая  проблемма  подтянуть  файл  и  вставить  его  в  DOM дерево

А что это DOM дерево?, поиск Яндекса ничего не дал

Спустя 1 минута, 54 секунды (21.09.2011 - 02:23) HawkHunter написал(а):
Так нет он же лежит http://vashiprava.com/test/ajaxpagination.js там где и должн...и локалки этот код работает как я описал выше

Спустя 2 минуты, 24 секунды (21.09.2011 - 02:25) Игорь_Vasinsky написал(а):
ohmy.gif ohmy.gif ohmy.gif
Это структура документа, теги с id и атрибутами, вы на визуальных редакторах штампуете что ли?

Document Object Model

Цитата
Так нет он же лежит http://vashiprava.com/test/ajaxpagination.js там где и должн...и локалки этот код работает как я описал выше


я говорю о db29a0be-ea88-4260-bdaf-db3c8231bd02.htm

Я написал выше что - пользуйтесь отадчиками, там в консоле все ошибки увидите.

Спустя 4 минуты (21.09.2011 - 02:29) HawkHunter написал(а):
Не знаю как несколько скринов выложить
Цитата
вы на визуальных редакторах штампуете что ли?

ну да WYSIWYG Web Builder 7

Спустя 2 минуты, 32 секунды (21.09.2011 - 02:32) caballero написал(а):
Цитата
А что это DOM дерево?, поиск Яндекса ничего не дал


гугли по DOM HTML а не просто DOM

по сути это HTML элементы твоей страницы начиная от <html>

вставить в какой нибудь div не проблемма
только вставлять нужно не как текст а как набор тэгов

jQuery заюзай там все это просто делается

Спустя 1 минута, 16 секунд (21.09.2011 - 02:33) HawkHunter написал(а):
Тю блин, готов выложить нную сумму за готовое решение моей проблемы

Спустя 4 минуты, 16 секунд (21.09.2011 - 02:37) Игорь_Vasinsky написал(а):
насколько n-ную?
За совет что(plugin) использовать.

там плагинов куча висит, возможно конфликты.

1. Качаете Chrome
2. Открываете сайт
3. жмёте F12
4. В открывшийся панели "консоль (console)"

Там все ваши ошибки.

Спустя 50 секунд (21.09.2011 - 02:38) Игорь_Vasinsky написал(а):

Спустя 7 минут, 23 секунды (21.09.2011 - 02:45) caballero написал(а):
А чего ты вообще скриптом тянешь а не собираешь все это в кучу на сервере и не отправляешь на клиент удеже в готовлим миде

Спустя 2 минуты, 17 секунд (21.09.2011 - 02:48) Игорь_Vasinsky написал(а):
Не надо так с ним. Он на визуальном редакторе.

Спустя 1 минута, 53 секунды (21.09.2011 - 02:50) HawkHunter написал(а):
Цитата
caballero Дата 20.09.2011 - 23:45
  А чего ты вообще скриптом тянешь а не собираешь все это в кучу на сервере и не отправляешь на клиент удеже в готовлим миде

Так я же говорю, что текста будет клиент сам писать не напрягая меня, ему не нравятся так как я форматирую текст(параграфы абзацы, цвет, шрифт...)

Спустя 2 минуты, 20 секунд (21.09.2011 - 02:52) HawkHunter написал(а):
Цитата (Игорь_Vasinsky @ 20.09.2011 - 23:38)
Даром

http://www.codenet.ru/webmast/php/visual-editor.php

Сейчас буду углубленно изучать, спасибо!

Спустя 8 секунд (21.09.2011 - 02:52) Игорь_Vasinsky написал(а):
ставь Joomla, modX, UMI.CMS

Спустя 1 минута, 15 секунд (21.09.2011 - 02:53) HawkHunter написал(а):
Цитата (Игорь_Vasinsky @ 20.09.2011 - 23:52)
ставь Joomla, modX, UMI.CMS

Да ну не нужно мне этого, джумбу я уже проходил, я выбрал своё направление...

Спустя 7 минут, 17 секунд (21.09.2011 - 03:01) m4a1fox написал(а):
Можно мнение! Я например не люблю такие редакторы! Так если взять их код - то свой выйдет в разы короче

Спустя 56 секунд (21.09.2011 - 03:02) HawkHunter написал(а):
Цитата (HawkHunter @ 20.09.2011 - 23:52)
Цитата (Игорь_Vasinsky @ 20.09.2011 - 23:38)
Даром

http://www.codenet.ru/webmast/php/visual-editor.php

Сейчас буду углубленно изучать, спасибо!

Так я не понял, что вы этим хотели сказать?

Спустя 1 минута, 16 секунд (21.09.2011 - 03:03) HawkHunter написал(а):
Цитата (m4a1fox @ 21.09.2011 - 00:01)
Можно мнение! Я например не люблю такие редакторы! Так если взять их код - то свой выйдет в разы короче

Да ну при чём тут их код, мне нужен универсальный код, для конкретной ситуации

Спустя 1 минута, 37 секунд (21.09.2011 - 03:04) Игорь_Vasinsky написал(а):
Кто?

Спустя 5 минут, 53 секунды (21.09.2011 - 03:10) HawkHunter написал(а):
Цитата (Игорь_Vasinsky @ 21.09.2011 - 00:04)
Кто?

Так к чему эта статья?

Спустя 1 минута, 24 секунды (21.09.2011 - 03:12) Игорь_Vasinsky написал(а):
Это блин визуальный редактор, который прикручивается на сайт. Пользователь сам создаёт странчки, сохраняется, редактирует, а потом они вставляются в общий шаблон.

Спустя 7 минут, 37 секунд (21.09.2011 - 03:19) HawkHunter написал(а):
Ну тогда я экстрено прочитал http://www.simplecoding.org/tinymce-ustano...polzovanie.html и сейчас буду воплощать в жизнь

Кажется это то что я искал, спасибо вам Игорь_Vasinsky user posted image

Спустя 24 минуты, 14 секунд (21.09.2011 - 03:44) Игорь_Vasinsky написал(а):
так ещё же ничего не работает... rolleyes.gif

Спустя 1 минута, 20 секунд (21.09.2011 - 03:45) HawkHunter написал(а):
Так я же пристально изучаю, по описанию кажется то что нужно

Спустя 2 минуты, 56 секунд (21.09.2011 - 03:48) Игорь_Vasinsky написал(а):
это действительно то. удач.

Спустя 1 минута, 42 секунды (21.09.2011 - 03:50) HawkHunter написал(а):
Спасибо))
Быстрый ответ:

 Графические смайлики |  Показывать подпись
Здесь расположена полная версия этой страницы.
Invision Power Board © 2001-2024 Invision Power Services, Inc.