Правила     Закладки     Карма    Календарь    Журналы    Помощь    Поиск    PDA    Чат   
        СМС-ки
   
Пейджер выключен!
 
Фильтр авторов:    показать 
  скрыть
  Ответ в темуСоздание новой темыСоздание опроса

> Присвоение функции каждой записи
o2designe  
 ۩  [x]    Дата
Цитировать сообщение

Пользователя сейчас нет на форуме



Новичок
*

Профиль
Группа: Пользователь
Сообщений: 3
Пользователь №: 42385
На форуме: 10 месяцев, 25 дней
Карма:




Здравствуйте. Разбираемся с движком instantcms. Возникла необходимость применить решение, при котором посты бы "обрезались" и имели кнопку "Развернуть" и "свернуть" соответственно. У инстанта есть вот такая конструкция вывода постов:

<?php
if( $ctype['options']['list_show_filter'] ) {
$this->renderAsset('ui/filter-panel', array(
'css_prefix' => $ctype['name'],
'page_url' => $page_url,
'fields' => $fields,
'props_fields' => $props_fields,
'props' => $props,
'filters' => $filters,
'is_expanded' => $ctype['options']['list_expand_filter']
));

}
?>
<?php
if ($items){ ?>
<div class="content_list featured <?php echo $ctype['name']; ?>_list">
<?php foreach($items as $item){ ?>
<?php
$item['ctype'] = $ctype; ?>
<div class="content_list_item <?php echo $ctype['name']; ?>_list_item<?php if (!empty($item['is_vip'])){ ?> is_vip<?php } ?>">

<
div id="content_text">

<
div class="fields">
<?php foreach($fields as $field){ ?>
<?php
if (empty($item[$field['name']])) { continue; } ?>
<?php
if ($field['is_system']) { continue; } ?>
<?php
if (!$field['is_in_list']) { continue; } ?>
<?php
if ($field['groups_read'] && !$user->isInGroups($field['groups_read'])) { continue; } ?>
<?php

if (!isset($field['options']['label_in_list'])) {
$label_pos = 'none';
} else {
$label_pos = $field['options']['label_in_list'];
}
?>
<div class="field ft_<?php echo $field['type']; ?> f_<?php echo $field['name']; ?>">
<?php if ($label_pos != 'none'){ ?>
<div class="title_<?php echo $label_pos; ?>"><?php echo $field['title'] . ($label_pos=='left' ? ': ' : ''); ?></div>
<?php } ?>
<div class="value">
<?php if ($field['name'] == 'title' && $ctype['options']['item_on']){ ?>
<table style="width: 100%; border-collapse: collapse;"><tbody><tr><td style="background-color: rgb(230, 230, 250);
letter-spacing: 0px; word-spacing: 0px; border-left: 4px solid rgb(255, 99, 71);"
><span style="font-size: 16pt;">
<?php if ($item['parent_id']){ ?>
<a class="parent_title" href="<?php echo href_to($item['parent_url']); ?>"><?php echo htmlspecialchars($item['parent_title']); ?></a>
&
rarr;
<?php } ?>
<a href="<?php echo href_to($ctype['name'], $item['slug'].'.html'); ?>"><?php echo htmlspecialchars($item[$field['name']]); ?></a>

</
span><br></td><td style="vertical-align: middle; background-color: rgb(255, 218, 185);
letter-spacing: 0px; word-spacing: 0px; text-align: center; width: 80px;
background-image: none; background-repeat: repeat; background-position: 0% 0%;"
align="right" valign="top">

<?php if ($ctype['is_rating']){ ?>
<div class="bar_item bi_rating">
<?php echo $item['rating_widget']; ?>
</div>
<?php } ?>
<div id="content_text">

<
br></td></tr></tbody></table>

<?php } else { ?>
<?php
echo $field['handler']->setItem($item)->parseTeaser($item[$field['name']]); ?>
<?php
} ?>

</div>
</
div>
<?php } ?>
</div>
</
div>
<
div id="shadow"></div>
<
a class="read-next" style="display: inline;">Читать полностью</a>
<?php
$is_tags = $ctype['is_tags'] &&
!
empty($ctype['options']['is_tags_in_list']) &&
$item['tags'];
?>
<?php
if ($is_tags){ ?>
<div class="tags_bar">
<?php echo html_tags_bar($item['tags']); ?>
</div>
<?php } ?>
<?php

$show_bar = $ctype['is_rating'] ||
$fields['date_pub']['is_in_item'] ||
$fields['user']['is_in_item'] ||
!
empty($ctype['options']['hits_on']) ||
!
$item['is_pub'] ||
!
$item['is_approved'];
?>
<?php
if ($show_bar){ ?>
<div class="info_bar">
<?php if ($fields['date_pub']['is_in_list']){ ?>
<div class="bar_item bi_date_pub" title="<?php echo $fields['date_pub']['title']; ?>">
<?php echo $fields['date_pub']['handler']->parse( $item['date_pub'] ); ?>
</div>
<?php } ?>
<?php
if (!$item['is_pub']){ ?>
<div class="bar_item bi_not_pub">
<?php echo LANG_CONTENT_NOT_IS_PUB; ?>
</div>
<?php } ?>

<?php
if ($fields['user']['is_in_list']){ ?>
<div class="bar_item bi_user" title="<?php echo $fields['user']['title']; ?>">
<?php echo $fields['user']['handler']->parse( $item['user'] ); ?>
</div>
<?php if (!empty($item['folder_title'])){ ?>
<div class="bar_item bi_folder">
<
a href="<?php echo href_to
('users',
$item['user']['id'], array('content', $ctype['name'], $item['folder_id'])); ?>">
<?php echo $item['folder_title']; ?></a>
</
div>
<?php } ?>
<?php
} ?>
<?php
if ($ctype['is_comments']){ ?>
<div class="bar_item bi_comments">
<
a href="<?php echo href_to($ctype['name'], $item['slug'].'.html'); ?>
#comments"
title="<?php echo LANG_COMMENTS; ?>"><?php echo intval($item['comments']); ?></a>
</
div>
<?php } ?>
<?php
if (!$item['is_approved']){ ?>
<div class="bar_item bi_not_approved">
<?php echo LANG_CONTENT_NOT_APPROVED; ?>
</div>
<?php } ?>

<?php
if ($ctype['is_favorites']){ ?>
<div class="bar_item bi_favorite">
<?php echo $item['favorite_widget']; ?>
</div>
<?php } ?>

</div>

<?php } ?>

</div>

<?php } ?>

</div>

<?php if ($perpage < $total) { ?>
<?php
echo html_pagebar($page, $perpage, $total, $page_url, $filters); ?>
<?php
} ?>

<?php
} else { echo LANG_LIST_EMPTY; } ?>


Мы уже внесли в данную конструкцию код, который должен сворачивать и разворачивать посты.

<div id="content_text">
<
p>Lorem ipsumLorem ipsum Lorem ipsumLorem ipsum</p>
<
p>Lorem ipsumLorem ipsum Lorem ipsumLorem ipsum</p>
<
p>Lorem ipsumLorem ipsum Lorem ipsumLorem ipsum</p>
<
p>Lorem ipsumLorem ipsum Lorem ipsumLorem ipsum</p>
<
p>Lorem ipsumLorem ipsum Lorem ipsumLorem ipsum</p>
</
div>
<
div id="shadow"></div>
<
a class="read-next" style="display: inline;">Читать далее</a>

<
script>
window.onload = function(){
blok = document.getElementById('content_text');
shadow = document.getElementById('shadow');
parent = blok.parentNode;
blok_height = blok.style.height ? blok.style.height : blok.offsetHeight;

if(blok_height > 80){
blok.style.maxHeight = '80px';
link = parent.getElementsByClassName('read-next')[0];
link.style.display = 'inline';

link.onclick = function(){

if(blok.style.maxHeight){
blok.style.maxHeight = '';
shadow.style.display ='none';
link.innerHTML = 'Скрыть';
} else {
blok.style.maxHeight = '80px';
link.innerHTML = 'Читать далее...';
shadow.style.display ='block';
}
return false;
}
}
}

</script>


Но, к сожалению, срабатывает только для первого поста...Для остальных постов кнопка показывается, но не работает. По логике вещей понимаем, что нужно дописать како-то код, который бы заставил эту кнопку работать у всех записей.

Вот так выглядит первая запись в ленте (скрипт работает)

user posted image

А вот так выглядят последующие записи в ленте:

user posted image

Здесь кнопка "читать полностью" уже не работает...

Уважаемые мастера! Подскажите пожалуйста, в каком направлении копать, так как с PHP отношения очень натянутые, пока только учимся...Заранее благодарны!

Это сообщение отредактировал o2designe - 15.01.2016 - 19:47
PMПисьмо на e-mail пользователю
    0   Для быстрого поиска похожих сообщений выделите 1-2 слова в тексте и нажмите сюда Для быстрой цитаты из этого сообщения выделите текст и нажмите сюда
icedfox  
Дата
Цитировать сообщение

Пользователя сейчас нет на форуме



Здесь живет
******

Профиль
Группа: Форумчанин
Завсегдатай форума
Сообщений: 395
Пользователь №: 41702
На форуме: 1 год, 3 месяца, 27 дней
Карма: 13




В вашем варианте в коде js должен быть перебор массивов. вы нашли блок и с ним работаете.
По моему все можно сделать немного проще, то пока не покажу как, времени в обрез.
PM
    0   Для быстрого поиска похожих сообщений выделите 1-2 слова в тексте и нажмите сюда Для быстрой цитаты из этого сообщения выделите текст и нажмите сюда
o2designe  
 ۩  Дата
Цитировать сообщение

Пользователя сейчас нет на форуме



Новичок
*

Профиль
Группа: Пользователь
Сообщений: 3
Пользователь №: 42385
На форуме: 10 месяцев, 25 дней
Карма:




А массивы, это:

'css_prefix' => $ctype['name'],
'page_url' => $page_url,
'fields' => $fields,
'props_fields' => $props_fields,
'props' => $props,
'filters' => $filters,
'is_expanded' => $ctype['options']['list_expand_filter']


Верно?
PMПисьмо на e-mail пользователю
    0   Для быстрого поиска похожих сообщений выделите 1-2 слова в тексте и нажмите сюда Для быстрой цитаты из этого сообщения выделите текст и нажмите сюда
icedfox  
Дата
Цитировать сообщение

Пользователя сейчас нет на форуме



Здесь живет
******

Профиль
Группа: Форумчанин
Завсегдатай форума
Сообщений: 395
Пользователь №: 41702
На форуме: 1 год, 3 месяца, 27 дней
Карма: 13




1. У вас
<div id="content_text">
выводится через foreach . DOM элементы должны содержать уникальные ID ,иначе получите ошибки, что мы сейчас и наблюдаем
2. если замените id на class, то здесь
blok = document.getElementById('content_text');
у вас будет массив который необходимо перебирать.
На выходе вы получите совершенно не оптимизированный вариант реализации.

наверно лучше будет так
<div class="content_text">
<div
class="story">
<p>
Lorem ipsumLorem ipsum Lorem ipsumLorem ipsum</p>
<p>
Lorem ipsumLorem ipsum Lorem ipsumLorem ipsum</p>
<p>
Lorem ipsumLorem ipsum Lorem ipsumLorem ipsum</p>
<p>
Lorem ipsumLorem ipsum Lorem ipsumLorem ipsum</p>
<p>
Lorem ipsumLorem ipsum Lorem ipsumLorem ipsum</p>
</div>
<div
class="shadow"></div>
<a
class="read-next" style="display: inline;">Читать далее</a>
</div>


$('.read-next').click(function(e){
e.preventDefault();
// $(this) это ссылка по который был клик
var content = $(this).parents('.content_text'); // это блок вашей новости
var story = content.find('.story'); // это выводимый по умолчанию блок
var shadow = content.find('.shadow'); // это блок shadow

// здесь пишем уже логику вашу

});

PM
    0   Для быстрого поиска похожих сообщений выделите 1-2 слова в тексте и нажмите сюда Для быстрой цитаты из этого сообщения выделите текст и нажмите сюда
o2designe  
 ۩  Дата
Цитировать сообщение

Пользователя сейчас нет на форуме



Новичок
*

Профиль
Группа: Пользователь
Сообщений: 3
Пользователь №: 42385
На форуме: 10 месяцев, 25 дней
Карма:




Блин, придётся к фрилансерам обращаться, ничего не выходит((((
PMПисьмо на e-mail пользователю
    0   Для быстрого поиска похожих сообщений выделите 1-2 слова в тексте и нажмите сюда Для быстрой цитаты из этого сообщения выделите текст и нажмите сюда
sergeiss  
Дата
Цитировать сообщение

Пользователя сейчас нет на форуме



Сидел он, дум великих полон - и вдаль глядел
******

Профиль
Группа: Эксперт
Группа переписки
Сообщений: 14980
Пользователь №: 4190
На форуме: 8 лет, 10 месяцев, 4 дня
Карма: 444




Цитата (o2designe @ 15.01.2016 - 22:03)
придётся к фрилансерам обращаться

Создай тему тут же, в разделе "проекты"... Или съэкономь smile.gif, сделай всё сам.


--------------------
* Хэлп по PHP
* Описалово по JavaScript
* Хэлп и СУБД для PostgreSQL

* Обучаю PHP, JS, вёрстке. Интерактивно и качественно. За разумные деньги.

* "накапливаю умение телепатии" (С) и "гуглю за ваш счет" (С)

user posted image
PMICQ
    0   Для быстрого поиска похожих сообщений выделите 1-2 слова в тексте и нажмите сюда Для быстрой цитаты из этого сообщения выделите текст и нажмите сюда
  Быстрый ответ
Информация о Госте
Введите Ваше имя
Кнопки кодов
Для вставки цитаты, выделите нужный текст и
НАЖМИТЕ СЮДА
Введите сообщение
Смайлики
:huh:  :o  ;) 
:P  :D  :lol: 
B)  :rolleyes:  <_< 
:)  :angry:  :( 
:unsure:  :blink:  :ph34r: 
     
Показать всё

Опции сообщения  Включить смайлики?
 Включить подпись?
 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:

Опции темы Ответ в темуСоздание новой темыСоздание опроса