Решил на уровне функционала CMS, добавив поле ENUM в таблицу, чекбокс "показывать/не показывать" в админку, и функцию вывода с проверкой значения. Помог добрый человек, подсказал куда копать в функционале CMS.
Замена элемента новым содержимым: replaceWith() Метод replaceWith() позволяет заменять элемент или набор элементов новым содержимым. Вы можете передать замещающий контент в любой из следующих форм:
Объект элемента, который создан с помощью функции JavaScript DOM, такой как document.getElementById() или document.createElement() Строка HTML, представляющая замещающий контент Объект jQuery, содержащей элемент (или элементы), который будет использоваться для замещения Возвратная функция, которая должна возвращать замещающий HTML код Ниже приводится пример, который показывает метод replaceWith() в действии. Производится замещение первого параграфа новой строкой HTML, второй параграф замещается объектом элемента, а третий параграф заменяется результатом функции, которая возвращает текущее время:
// Заменяем параграф в #myDiv1 новым параграфом $('#myDiv1>p').replaceWith( "<p>Новый параграф с текстом</p>" );
// Заменяем параграф в #myDiv2 горизонтальной линией var hr = document.createElement('hr'); $('#myDiv2>p').replaceWith( hr );
// Заменяем параграф в #myDiv3 строкой с текущим временем $('#myDiv3>p').replaceWith( currentTime );
function currentTime() { var currentTime = new Date(); var currentHours = currentTime.getHours ( ); var currentMinutes = currentTime.getMinutes ( ); var currentSeconds = currentTime.getSeconds ( );
// Pad the minutes and seconds with leading zeros, if required currentMinutes = ( currentMinutes < 10 ? "0" : "" ) + currentMinutes; currentSeconds = ( currentSeconds < 10 ? "0" : "" ) + currentSeconds;
ziliboba0213: /ru/forum/896829 почитайте в этой теме, там похожая вроде проблема. А JS выполняется на стороне клиента. От яндекса прячьте через noindex, ну я так думаю :) З.Ы. Почему нельзя удалить, какие технические причины? Попробуйте выводить через ajax.
Через ajax нельзя. Смысл в том, что если совсем просто объяснить, это вывод на главной странице раздела статей их подразделов с анонсами и т.д. Среди вполне себе обычных разделов есть чисто технический раздел с подразделами, которые показывать ни пользователям не поисковикам не нужно, но и убрать его совсем нельзя, поскольку к контенту подразделов доступ по прямым ссылкам быть должен.
Выводится шаблонно:
echo '<div class="class" id="id">';...
Можно сделать классы уникальные:
echo '<div class="class_id">';....
---------- Добавлено 21.05.2015 в 09:50 ----------
function callback($buffer)
{
return preg_replace('~<div id="name">.*</div>~Uis', '', $buffer);
}
ob_start("callback");
Если вставлять это в самом начале index.php, то функция callback получит сгенерированную страницу и может полностью её поменять.
Еще есть вариант подключить файл с этим кодом без редактирования файлов CMS используя директиву auto-prepend-file
Пытался, но что-то не работает. Может с CMS конфликтует. Поскольку не программист причину выяснить не могу.
proksey-net: для начала - вы отправляете форму. Используйте
<form target = '_parent' ... >
Искренне Вас благодарю за то что пытаетесь помочь, но я не программист, о чём написал в первом посте. Использоватьгде?
Я понимаю, что истина где-то здесь, но..:
var displayContent = function() { $c.parent().find('.loader').hide(); $c.parent().parent().find('#b_close').show(); $c.fadeIn(function(){ // Focus on the first form input if there's one $(this).find('input[type=text]:first').trigger('focus');
// Check for paging $('.prettyPopin a[rel=internal]').click(function(){ $link = $(this);
// Fade out the current content $c.fadeOut(function(){ $c.parent().find('.loader').show();
// Submit the form $.get($link.attr('href'),function(responseText){ // Replace the content $c.html(responseText);
_refreshContent($c); }); }); return false; });
// Submit the form in ajax $('.prettyPopin form').bind('submit',function(){ $theForm = $(this); // Fade out the current content $c.fadeOut(function(){ $c.parent().find('.loader').show();
// Submit the form $.post($theForm.attr('action'), $theForm.serialize(),function(responseText){ // Replace the content $c.html(responseText);
proksey-net: а класс вы поставили prettyPopin для input как и для a?
Этот input type=submit берется из модуля и должен работать не только в модальных окнах, но и на обычных страницах.
Задача - чтобы <input> так же как и <a> уже внутри prettyPopin без rel=internal выдавали результат в родительском окне, а не чтобы input появлялся в модальном при нажатии на него))
pimandr: При беглом осмотре похоже, что
$(this).find('input***91;type=text***93;:first').trigger('focus');
нужно заменить на
$(this).find('input***91;rel=internal***93;:first').trigger('focus');
Нет, так не получается. Всё равно открывается не в родительском, а в модальном.
Ladycharm: - это ссылка на html-содержимое модального окна?
Именно так. Отдельный .html файл.
Правда без head и body
---------- Добавлено 27.04.2015 в 11:15 ----------
burunduk: нет, но если js открыт для индексации и сама страница с которой грузится контент, то гугл может в результатах поиска связать контент
если там будет фрейм, то как отдельную страницу
Кусок кода, куда выводится содержимое не внутри JS, просто часть кода.
Вывод содержимого скорее по принципу работы галереи jquery по id
Вот и смысл задачи скорее в том, что индексация нужна, но не внутри страницы куда выводится, а как отдельной страницы.
---------- Добавлено 27.04.2015 в 12:02 ----------
burunduk: ... то гугл может в результатах поиска связать контент...
Сергей снова помог в верстке.
Готов неизменно рекомендовать его как крайне ответственного и грамотного в своем деле человека!
Спасибо всем!!!
Вопрос снят.
Решил на уровне функционала CMS, добавив поле ENUM в таблицу, чекбокс "показывать/не показывать" в админку, и функцию вывода с проверкой значения. Помог добрый человек, подсказал куда копать в функционале CMS.
а если просто прописать в диве style="display: none" ?
Дык в коде содержимое останется..)
Может вот это Вам подойдет:
Замена элементов
Замена элемента новым содержимым: replaceWith()
Метод replaceWith() позволяет заменять элемент или набор элементов новым содержимым. Вы можете передать замещающий контент в любой из следующих форм:
Объект элемента, который создан с помощью функции JavaScript DOM, такой как document.getElementById() или document.createElement()
Строка HTML, представляющая замещающий контент
Объект jQuery, содержащей элемент (или элементы), который будет использоваться для замещения
Возвратная функция, которая должна возвращать замещающий HTML код
Ниже приводится пример, который показывает метод replaceWith() в действии. Производится замещение первого параграфа новой строкой HTML, второй параграф замещается объектом элемента, а третий параграф заменяется результатом функции, которая возвращает текущее время:
После выполнения:
/ru/forum/896829 почитайте в этой теме, там похожая вроде проблема. А JS выполняется на стороне клиента. От яндекса прячьте через noindex, ну я так думаю :)
З.Ы. Почему нельзя удалить, какие технические причины? Попробуйте выводить через ajax.
Через ajax нельзя. Смысл в том, что если совсем просто объяснить, это вывод на главной странице раздела статей их подразделов с анонсами и т.д. Среди вполне себе обычных разделов есть чисто технический раздел с подразделами, которые показывать ни пользователям не поисковикам не нужно, но и убрать его совсем нельзя, поскольку к контенту подразделов доступ по прямым ссылкам быть должен.
Выводится шаблонно:
echo '<div class="class" id="id">';...
Можно сделать классы уникальные:
echo '<div class="class_id">';....
---------- Добавлено 21.05.2015 в 09:50 ----------
Тут может помочь включение буферизации вывода http://php.net/manual/ru/function.ob-start.php
Если вставлять это в самом начале index.php, то функция callback получит сгенерированную страницу и может полностью её поменять.
Еще есть вариант подключить файл с этим кодом без редактирования файлов CMS используя директиву auto-prepend-file
Пытался, но что-то не работает. Может с CMS конфликтует. Поскольку не программист причину выяснить не могу.
А ~Uis это что?
для начала - вы отправляете форму. Используйте
Искренне Вас благодарю за то что пытаетесь помочь, но я не программист, о чём написал в первом посте. Использовать где?
Я понимаю, что истина где-то здесь, но..:
а класс вы поставили prettyPopin для input как и для a?
Этот input type=submit берется из модуля и должен работать не только в модальных окнах, но и на обычных страницах.
Задача - чтобы <input> так же как и <a> уже внутри prettyPopin без rel=internal выдавали результат в родительском окне, а не чтобы input появлялся в модальном при нажатии на него))
При беглом осмотре похоже, что
$(this).find('input***91;type=text***93;:first').trigger('focus');
нужно заменить на
$(this).find('input***91;rel=internal***93;:first').trigger('focus');
Нет, так не получается. Всё равно открывается не в родительском, а в модальном.
- это ссылка на html-содержимое модального окна?
Именно так. Отдельный .html файл.
Правда без head и body
---------- Добавлено 27.04.2015 в 11:15 ----------
нет, но если js открыт для индексации и сама страница с которой грузится контент, то гугл может в результатах поиска связать контент
если там будет фрейм, то как отдельную страницу
Кусок кода, куда выводится содержимое не внутри JS, просто часть кода.
Вывод содержимого скорее по принципу работы галереи jquery по id
Вот и смысл задачи скорее в том, что индексация нужна, но не внутри страницы куда выводится, а как отдельной страницы.
---------- Добавлено 27.04.2015 в 12:02 ----------
... то гугл может в результатах поиска связать контент...
А как Яндекс отреагирует?
В принципе из ответов все более менее понятно.
Спасибо!