2014-08-20 Дата: Среда, 20.08.2014, 08:45 | Сообщение #17 | Тема: Ликбезз по юкоз API
Рядовой
Группа: Зарегистрированные
Статус: Offline
likbezz , интересно. Сейчас активно юзать пытаюсь.) Жаль в модуле видео пока не предусмотрено. У меня четыре вопроса назрело, надеюсь поможешь. Речь идет про твой скрипт: Код
function getXml(url,id,num){ if(url){var url=url,cont=document.getElementById(id),tmp=''; $.ajax({type:'GET',url:url, beforeSend:function(){cont.innerHTML='<img src="http://likbezz.ru/_source/_ico/loader/aj2.gif" alt="" />';}, success:function(d){ var n=d.getElementsByTagName('name'),j=num; var obj={TITLE:[],MESSAGE:[],ENTRY_URL:[],CATEGORY_NAME:[],CATEGORY_URL:[]}; $.each(n,function(i,n){var o=$(n).text(),v=$(n.nextSibling.firstChild).text(); if(o=='TITLE')obj.TITLE.push(v); if(o=='MESSAGE')obj.MESSAGE.push(v); if(o=='ENTRY_URL')obj.ENTRY_URL.push(v); if(o=='CATEGORY_NAME')obj.CATEGORY_NAME.push(v); if(o=='CATEGORY_URL')obj.CATEGORY_URL.push(v); }); $.each(obj.TITLE,function(i){ if(i<j){ tmp+=['<h4><a href="'+obj.ENTRY_URL[i]+'">',obj.TITLE[i],'</a></h4>',obj.MESSAGE[i],'<br /><br />'].join(''); } }); cont.innerHTML=tmp; }, error:function(a,b){if(b=='error'){cont.innerHTML='<b style="color:#F33;">Извините, но произошла ошибка: «'+a.status+'» '+a.statusText+'!</b>';}} });};};
1.) Просмотрел "список возвращаемых данных". img (img1,2,3,т.д.) не предусмотрено, я правильно понял? И если нет... Как картинку поймать от новости?) 2.) Тянем данные с главной новостей Код
<script>getXml('/api/news/','container',5);</script>
Все круто, но выводится ровно столько материалов - сколько задано в настройках модуля на главной странице. В нашем случае 9. Нашел коммент с этой же проблемой в описании api на юкозвских мануалах. Вопрос так и не решился. Как это обойти? Очень надо чтоб больше можно было выводить и желательно не ставить в настройках большее число.( 3.) Код
<script>getXmlCont('/api/news/','container',60);</script>
container: можно использовать вместо id - class? Пробовал вот тут заменить id на class Код
function getXml(url,[u]id[/u],num){
но не работало. Чувствую, что тут попахивает не хилым пробелом в знаниях, но бывало, что заменял и работало. 4.) Попытался совместить скрипт с подгрузкой в аякс окне (про которую недавно писал)) Код
function getXmlCont(url,id,num){ if(url){var url=url,cont=document.getElementById(id),tmp=''; $.ajax({type:'GET',url:url, beforeSend:function(){cont.innerHTML='<img src="http://likbezz.ru/_source/_ico/loader/aj2.gif" alt="" />';}, success:function(d){ var n=d.getElementsByTagName('name'),j=num; var obj={TITLE:[],MESSAGE:[],ENTRY_URL:[],CATEGORY_NAME:[],CATEGORY_URL:[],DATE:[],TIME:[],MATERIAL_ID:[]}; $.each(n,function(i,n){var o=$(n).text(),v=$(n.nextSibling.firstChild).text(); if(o=='TITLE')obj.TITLE.push(v); if(o=='MESSAGE')obj.MESSAGE.push(v); if(o=='ENTRY_URL')obj.ENTRY_URL.push(v); if(o=='CATEGORY_NAME')obj.CATEGORY_NAME.push(v); if(o=='CATEGORY_URL')obj.CATEGORY_URL.push(v); if(o=='DATE')obj.DATE.push(v); if(o=='TIME')obj.TIME.push(v); if(o=='MATERIAL_ID')obj.MATERIAL_ID.push(v); }); $.each(obj.TITLE,function(i){ if(i<j){ tmp+=[ '<div class="grid">', '<div class="imgholder"><img src="/AW_v5/img/no-image.jpg" /></div>', '<strong><a href="javascript://" onClick="apoloadme(',''+obj.MATERIAL_ID[i]+'', ''+obj.ENTRY_URL[i]+'',');return false;">',obj.TITLE[i],'</a> <img src="/AW_v5/img/ajax-loader.gif" id="loader',''+obj.MATERIAL_ID[i]+'','" style="display: none"></strong>', obj.MESSAGE[i], '<div class="meta feed-date" id="xDate$ID$">'+obj.DATE[i]+', '+obj.TIME[i]+'</div>', '<div class="apoloadfull',''+obj.MATERIAL_ID[i]+'','" style="display: none"></div>', '</div>' ].join(''); } }); cont.innerHTML=tmp; }, error:function(a,b){if(b=='error'){cont.innerHTML='<b style="color: #F33;">Извините, но произошла ошибка: «'+a.status+'» '+a.statusText+'!</b>';}} });};};
В частности вот этот страх вышел: Код
tmp+=[ '<div class="grid">', '<div class="imgholder"><img src="/AW_v5/img/no-image.jpg" /></div>', '<strong><a href="javascript://" onClick="apoloadme(',''+obj.MATERIAL_ID[i]+'', ''+obj.ENTRY_URL[i]+'',');return false;">',obj.TITLE[i],'</a> <img src="/AW_v5/img/ajax-loader.gif" id="loader',''+obj.MATERIAL_ID[i]+'','" style="display: none"></strong>', obj.MESSAGE[i], '<div class="meta feed-date" id="xDate$ID$">'+obj.DATE[i]+', '+obj.TIME[i]+'</div>', '<div class="apoloadfull',''+obj.MATERIAL_ID[i]+'','" style="display: none"></div>', '</div>' ].join('');
likbezz , что не так делаю? Вроде все правильно, а новость не подгружается. Сам скрипт подгрузки:
var curstate = location.href; function apoloadme(id, url) { if($('div.apoloadfull' + id).html() == '') { if(curstate != url) { history.replaceState(null, null, url); } $('#loader' + id).fadeIn(); $('div.apoloadfull' + id).load(url + ' #apoentry', function() { $('img[id^="loader"]').hide(); $('div#apoent' + id).hide(0); new _uWnd('New1','AW',900,600,{autosize:1,resize:0,maxh:600,minh:300,align:'left',modal:1,closeonesc:1,onbeforeclose:function(){apoloadme(id,url );}},$('div.apoloadfull' + id).html()); }); } else { history.replaceState(null, null, curstate); $('img[id^="loader"]').hide(); $('div.apoloadfull' + id).html('').hide(); $('div#apoent' + id).fadeIn(300); } }
В общем, вот... За скрипт большое спасибо. Как раз информеры кончились, не знал как быть пока твою статью не нашел.Добавлено (20.08.2014, 08:45) ---------------------------------------------
Цитата vinni
В частности вот этот страх вышел:
На всякий скидываю как это выглядит в виде материалов стандартного информера: Код
<?ifnot(substr($DATE$,-4)='2012')?><div class="grid"> <div class="imgholder"> <a href="javascript://" onClick="apoloadme('$ID$', '$ENTRY_URL$'); return false;"><img src="<?if($IMG_URL1$)?>$IMG_URL1$<?else?>/AW_v5/img/no-image.jpg<?endif?>" /></a> </div> <strong><a href="$ENTRY_URL$">$TITLE$</a> <img src="/AW_v5/img/ajax-loader.gif" id="loader$ID$" style="display: none"></strong> $MESSAGE$ <div class="meta feed-date" id="xDate$ID$">$DATE$, $TIME$</div> <div class="apoloadfull$ID$" style="display: none"></div> </div><?endif?>
2014-08-20 Дата: Среда, 20.08.2014, 09:29 | Сообщение #18 | Тема: Ликбезз по юкоз API
Рядовой
Группа: Зарегистрированные
Статус: Offline
Цитата likbezz
Обойти можно, лишь добавив в скрытом виде в текст материала
Что-то вроде темы, где ты показал как оформлять похожие материалы картинками? Именно тот скрипт и пытался приспособить, хэх.) Цитата likbezz
Перебором страниц - /api/news/2 и так далее.
Пробовал сделать вот что: Код
<script>getXmlCont('/api/news/1','/api/news/2','container',18);</script>
и Код
function getXmlCont(url,url,id,num){
вместо Код
function getXmlCont(url,id,num){
И ниже также дублировал url,url. Не получилось. Можешь показать правильный пример?) Цитата likbezz
Смотри логи, ошибки.. так навскидку не скажу.
А сам код на первый взгляд верный? оО Думал, что может не так где... Блин... А MATERIAL_ID можно дублировать в коде? Если сам код правильный, тогда и не знаю... Точная копия информера в принципе. Окно по сути должно открываться.Добавлено (20.08.2014, 09:23) ---------------------------------------------
Цитата likbezz
Обойти можно, лишь добавив в скрытом виде в текст материала
Стоп. Кажется дошло. В сам текст или в краткое описание?Добавлено (20.08.2014, 09:29) ---------------------------------------------
Цитата likbezz
И не забываем - это простейший пример скрипта, а не многопрофильный функционал.
А по мне так - сокровище. хд
2014-08-20 Дата: Среда, 20.08.2014, 10:02 | Сообщение #19 | Тема: Ликбезз по юкоз API
Рядовой
Группа: Зарегистрированные
Статус: Offline
Цитата likbezz
Не совсем. Просто добавлять (вручную или скриптом) к тексту материала скрытый блок с картинкой, или html-комментарий, а в скрипте уже искать картинку в тексте материала и выводить, если есть.
Угу... Понятно, буду пробовать.) Цитата likbezz
Правильный - нет - лениво писать подобный функционал за спасибо. Как вариант - два разных блока подряд и два вызова, соответственно.
Пробовал, так работает, да.) Цитата likbezz
ID материала - уникальный номер в модуле.
Знаю, говорю можно ли дублировать MATERIAL_ID. Например код статистики нельзя два раза размещать на странице, поэтому и спросил.) Мало ли. Там MATERIAL_ID используется три раза. Но явно проблема в другом.)) Спасибо.)Добавлено (20.08.2014, 10:02) ---------------------------------------------
Цитата likbezz
По адресу /api/news/2 выводится краткое содержание (или обрезанное полное, если в настройках установлено обрезать...)
Так и думал.)