-
Публикации
4036 -
Зарегистрирован
-
Посещение
-
Days Won
269
Все публикации пользователя abushyk
-
Платный модуль Search - живой поиск
topic ответил в Chernetskiy abushyk в Приложения, модули, настройки
Если ему это будет нужно чуть дольше, чем до первого обновления, то лучше сделать как я написал)))- 19 ответов
-
- живой поиск
- search
-
(и ещё %d)
Теги:
-
Платный модуль Search - живой поиск
topic ответил в Chernetskiy abushyk в Приложения, модули, настройки
И даже такая словарная метка оказывается есть))) Только не меняем. А в папке шаблона создаем набор папок /apps/search/language/ru/ (в папке шаблона папку apps, в ней папку search, в ней папку language, в ней папку ru - если какие-то папки уже есть, например apps, то создавать не нужно ее по второму разу) В него кладем копию файла /apps/search/language/ru/dictionary.ini с таким же именем. Удаляем из него все, кроме строки SEARCH_PLSH="Поиск по ключевым словам (через пробел)" сохраняем и в нем уже вносим правку.- 19 ответов
-
- живой поиск
- search
-
(и ещё %d)
Теги:
-
Админка - редактор форм. Разворачиваете таблиц data (кликаете в синюю полосу где указано название таблицы) и выводится список ее полей модели. Первая колонка на латиннице - это системное имя поля модели. В большинстве случаев оно соответствует "своей" колонку в таблице re_data в базе данных. Исключением будут только поля которіе не хранятся в дата напрямую (мультививыборный селект) или, например поле типа geodata, которое имеет в модели имя geo, но в бд хранится в re_data в двух колонках - geo_lat и geo_lng. Но для простых полей типа safe_string и textarea соотвествие будет один один. Поля типа выбиралки (select_box, selectbox_by_query) хранятся так же в этой таблице по своему имени, но в качестве значения у них в БД не текстовое значение (имя риелтора или название города), а айдишка соотв. записи из другой таблицы или ключ значения (select_box). Для selectbox_by_query (города\районы\юзеры) название таблиці где они лежат можно посмотреть, если открыть в Редакторе форм нужный элемент на редактирование в поле "Имя таблицы для связки". И уже в ней по айдишке из ре_дата можем найти в нужной таблице искомое текстовое значение.
-
сайт не выводится в топ. в топ выводятся отдельные страницы сайта. а теперь представьте, что у вас есть две страницы, отвечающие на один запрос своим контентом. естественно, что они будут конкурировать друг с другом, отбирая вес друг у друга. и при этом им еще нужно конкурировать со страницами других сайтов. именно поэтому и делаются лендинговые и посадочные страницы, заточенные под конкретный запрос по самое нехочу и продвигаются всеми способами от общедоступных, до платной рекламы. А дальше с этих страниц уже начинается разводка ссылками на другие страницы. Продвигать эфективно одну страницу всегда легче чем "больше, чем одну". мы использовали следующий способ - сначала закрывали вообще все. потом раскрывали только страницы типа раздел-страна - групп ирующие. потом открывали уже карточки. что бы вес первыми набрали именно нужные страницы. ссылки на результаты поиска, на сортировки списков, на страницы в пейджере - банились сразу и навсегда. результаты тех же списков далее первой страницы робот всегда найдет через сайтмап. сортировки и фильтры поиска возвращают дублирующиеся результаты в неописуемых количествах страниц - мне не нужно миллион страниц в индексе, которые будут шататься на 100-й странице. Мне лучше иметь 10-20 страниц в 1-3 странице результата. Зацепившийся за топовую страницу клиент попадет на сайт и там уже сам будет путешествовать. хоть через фильтр, хоть через страницы.
-
Гугль делайет щадящую компресиию просто удаляя лишние отступы и незначащие пробелы. Обычно такую компрессию легко привести к норм читаемому виду декомпрессером. Сторонние ресурсы обычно имеют два режима компресии - полный, когда жмется все до самого упора и щадящий, когда читабельность в какой-то мере сохраняется. Превый критичен для яваскриптов - в них даже имена функций ужимаются в однобуквенные идентификаторы и, кроме снижения читабельности, мы еще получаем полную невозможность расжать файл до исходного состояния.
-
Вот тут есть пример генератора У вас на руках модель объекта с данными $form_data_shared и вы уже на свое усмотрение что-то берете из нее, что-то тянете дополнительно и заполняете поля схемы.
- 57 ответов
-
- seo
- струкрурированные данные
- (и ещё %d)
-
Получают со ссылок на странице - напрмер с педжеров, с сортировочных ссылок, если они есть и т.д. + допускаю, что с метрики и подобных аналитических инструментов. Преобразовать их через линк-менеджер маловероятно, та ккак в зависимости от количества параметров на форме количество вариантов таких адресов начинает стремиться к огромным цифрам. Такие адреса следует закрывать в robots.txt. Например директивами Disallow: /?* Адреса, содержащие параметры в себе, обычно априори являются дублями основного адреса - так как параметры - это модификаторы чего-то.
-
Для начала вставьте после RewriteEngine On RewriteCond %{HTTP_HOST} ^www\.(.*) [NC] RewriteRule ^(.*)$ http://%1/$1 [R=301,L] или конкретно под домен, если у вас сайт доступен только с одного домена RewriteCond %{HTTP_HOST} ^www.rumagnolia.ru$ [NC] RewriteRule ^(.*)$ http://rumagnolia.ru/$1 [R=301,L] Этого может и не быть в htaccess, так как это настройка не самого редиректа, а настройка сервера и она может быть включена на самом сервере.
-
1. То, что стоит опция - использовать мыло как логин, никак не отменяет наличия поля логина в модели юзера. Она просто говорит, какой из параметров юзера будет использован для проверке при авторизации. Оно может существовать и вместе с мылом, просто исполняьь например роль никнейма, а для авторизации будет использоваться именно мыло. Убрать его с формы регистрации можно либо удалив из модели бюзера, либо сделав там неактивным или необязательным. 2. Кнопку вернул. 3. Эти полдсказки показывают какие поля не заполнены. Я доабвил стиль их скрытия до первого нажатия кнопки Сохранить.
-
Тогда пока оставим как есть, а в новую версию карточки я добавлю переменную с таким массивом родительских разделов, что бы не приходилось так изгибаться.
-
вот отсюда оно {$sape}
-
1. На этой конкретной форме этот чекбокс работает так, что деактивирует кнопку Сохранить. Форма загружается, кнопка деактивируется и, отметив чекбокс, вы активируете кнопку и она становится нажимабельной. Проблема в том, что в header.tpl у вас убрано подключение провайдера карты, но поле под указание координат на форме есть и требует его. Скрипт падает и не дает сработать скрипту, который связывает состояние кнопки и чекбокса. Посмотрите в header.tpl есть ли у вас такие строки {if $map_type=='yandex'} <script type="text/javascript" src="http://api-maps.yandex.ru/2.0-stable/?load=package.standard&lang=ru-RU"></script> {else} <script src="https://maps.googleapis.com/maps/api/js?libraries=drawing,geometry"></script> {/if} ПС. Это я поправил уже. 2. Чекбокс на самом деле в форме. А вот эти белые листки, куда бы вы его хотели занести - это не вся форма, а лишь ее страницы. Вы можете добавить стиль\ .account .tabbed_form_block { background: white; padding: 10px; } который протянет белую область дальше и кнопка+чекбокс не будут такими оторванными от остального контента формы.
-
накидайте список параметров, которые нужно вывести. типа город, площадь, цена итд. я сверстаю шаблон, который будет выводить только их и только то, что нужно - это значительно облегчит ему работу. можете даже нарисовать картинку условную с блочками - тут картинка, тут параметры. что бы ориентироваться можно было.
-
Сорри, это я так объясняю криво))) Поправил исходный топик.
-
Это значит, что мы открываем скопированный файл, делаем Ctrl+A и Delete. После этого в получившийся пустой файл вставляем код <?php class Local_Kvartira_View extends Kvartira_View { } Все. Заготовка готова.
-
Чаще всего, его нет. Но в некоторых случаях может быть, если шаблон уже модифицировался. Если двиг ставится с нуля, то в папке шаблона такого файла не будет. Поэтому мы берем системный из /apps/system/lib/frontend/view/kvartira_view.php тащим в шаблон, создавая недостающие папки /template/frontend/ИМЯ_ШАБЛОНА/main/view/, переименовываем его в local_kvartira_view.php
-
не надо что-то добавлять в систему, только потому, что для этого есть возможность. если вы не знаете к чему это применить, значит оно вам скорее всего и не нужно в данный момент. там, где необходимость этого нужна я так и пишу "нужно использовать локальный обработчик карточки" или "нужно использовать локальный грид-менеджер". Что можно закинуть в карточку? 1. В теме о сео вчера только обсуждали генератор разметки схемы 2. функции создания менее деревянных сео-заголовков 3. предварительная обработка и сложное форматирование выводимых параметров 4. подключение дополнительных сущностьей или каких-то данных, которые нужны в карточке в данном контексте 5. вывод связанных объектов с объявлением, которые не подбираются системой по умолчанию 7. реализация каких-то счетчиков переходов, сбор utm-меток ... да еще тыщи вариантов извращений))
-
Там скорее упирается в форматирование описания. Если взять разметку как есть, то времени модулю не хватает, что бы еке отрисовать в пдф. Если поставить вырезку разметки, то отрисовывает, но не читабельно.
-
Используется для изменения логики работы генератора карточки объекта. В тех случаях, когда требуемые изменения невозможно сделать настройками в силу отсутствия таковых или их ограниченности. Позволяет реализовать свою логику работы карточки в плане показа или сбора для показа данных. Все, что сложно реализовать в самом шаблоне или невозможно скорее всего будет реализовано через это.
-
Я делал локальный обработчик карточки - https://www.sitebill.ru/s/topic/3635-howto-локальный-обработчик-карточки/ Тянул в него функцию protected function makeUserOperatios($form_data_shared) в которую приходит полная модель данных просматриваемого объекта. <?php class Local_Kvartira_View extends Kvartira_View { protected function makeUserOperatios($form_data_shared){ } } Внутри нее ставил код создания. И в header.tpl внутри head-тега размещал вставку результата {if $ldjson!=''} <script type="application/ld+json">{$ldjson}</script> {/if}
- 57 ответов
-
- seo
- струкрурированные данные
- (и ещё %d)
-
Методика создания своего обработчика карточки. 1. Копируем файл /apps/system/lib/frontend/view/kvartira_view.php в /template/frontend/ИМЯ_ВАШЕГО_ШАБЛОНА/main/view/local_kvartira_view.php 2. Заменяем все его содержимое на <?php class Local_Kvartira_View extends Kvartira_View { } 3. В Настройки - Общее отмечаем галочку Использовать классический локальный конструктор карточки(classic_local_view) C этого момента обслуживать показ объектов у нас начинает наш локальный обработчик. В данный момент он пуст и по факту всю работу за него будет делать пока еще родительский модуль. Но, перенося в него некоторые функции из родителя и меняя их логику, мы можем добиться своего функционала.
-
Где-то на втором часу попыток расписать разметку схемы в шаблоне, что бы и вложенность обеспечить и свои данные согласно макета разместить, я плюнул и реализовал сборку json-кода разметки в локальном модуле карточки и заброску его в шаблон.)))) Разборщики схемы понимают ее не только в виде тегов, но и в виде json-объектов. В разметке осталась только разметка крошек и блок о компании. А весь продукт внутри генератора карточки. Вот сам код сборки объекта (в данном случае в функции makeUserOperatios, там же собираются и всякие og-параметры и прочая дребедень для соцсеток, телеграмма и шары): $JSONLDL=array(); $JSONLDL['@context']='http://schema.org/'; $JSONLDL['@type']='Product'; $JSONLDL['name']=$form_data_shared['meta_h1']['value']; $JSONLDL['url']=$this->getServerFullUrl().'/'.Sitebill::getClearRequestURI(); $JSONLDL['description']=mb_substr(strip_tags($form_data_shared['text']['value']), 0, 200, 'utf-8'); $JSONLDL['image']=$this->getServerFullUrl().'/img/data/'.$form_data_shared['image']['image_array'][0]['normal']; $JSONLDL['offers']=array(); $JSONLDL['offers']['@type']='Offer'; if($form_data_shared['optype']['value']==2){ $JSONLDL['offers']['businessFunction']='Sell'; }elseif($form_data_shared['optype']['value']==1){ $JSONLDL['offers']['businessFunction']='LeaseOut'; } $JSONLDL['offers']['price']=$form_data_shared['price']['value']; $JSONLDL['offers']['priceCurrency']=$form_data_shared['currency_id']['value_string']; $JSONLDL['offers']['availableAtOrFrom']['@type']='Place'; $JSONLDL['offers']['availableAtOrFrom']['address']['@type']='PostalAddress'; $JSONLDL['offers']['availableAtOrFrom']['address']['addressCountry']=$form_data_shared['country_id']['value_string']; $JSONLDL['offers']['availableAtOrFrom']['address']['addressRegion']=$form_data_shared['region_id']['value_string']; $JSONLDL['offers']['availableAtOrFrom']['address']['addressLocality']=$form_data_shared['city_id']['value_string']; $this->template->assign('ldjson', json_encode($JSONLDL)); и вот так он внутри head-тега вставляется {if $ldjson!=''} <script type="application/ld+json">{$ldjson}</script> {/if}
- 57 ответов
-
- seo
- струкрурированные данные
- (и ещё %d)
-
Если не растеряться, то можно понять структуру вложенности еще отсюда https://search.google.com/structured-data/testing-tool/u/0/?hl=uk#url=http%3A%2F%2Fprorealproperty.com%2Frealty68953.html
- 57 ответов
-
- seo
- струкрурированные данные
- (и ещё %d)
-
Примерно вот так бы это выглядело в плане вложенности в разметке. <div itemscope itemtype="http://schema.org/Product"> <div itemprop="name">Аренда квартир / 1-комн., Россия, Белгородская область, Белгород, Молодежная, 7 000 руб.</div> <div itemscope itemtype="http://schema.org/Offer"> <div itemprop="price" content="7000"> <div itemprop="priceCurrency" content="UAH"> </div> </div>
- 57 ответов
-
- seo
- струкрурированные данные
- (и ещё %d)
-
Внутри него есть блок с классом overview - он вам подойдет. Если в форме ввода объявления в выпадашке валюты отображаются у вас в виде знаков а не кодов (EUR|RUB) то все сделали правильно. Только должно быть как-то так. А то сечас вываливает три валюты, если не доллар. {if $data_shared.currency_id.value == 2} <meta itemprop="priceCurrency" content="USD"> {elseif $data_shared.currency_id.value == 1} <meta itemprop="priceCurrency" content="UAH"> {elseif $data_shared.currency_id.value == 2} <meta itemprop="priceCurrency" content="RUB"> {else} <meta itemprop="priceCurrency" content="BYN"> {/if} Свойство Price является свойством не элемента Product а элемента типа Offer который должен быть дочерним к Product Вот пример вложенности в скрипте $JSONLDL=array(); $JSONLDL['@context']='http://schema.org/'; $JSONLDL['@type']='Product'; /*Верхний уровень - Product*/ /*Тут параметрі продукта типа имя, урл*/ $JSONLDL['name']=$form_data_shared['meta_h1']['value']; ... /*Тут начинаются предложения. Єто нечто более узкое чем продукт вообще*/ $JSONLDL['offers']=array(); $JSONLDL['offers']['@type']='Offer'; if($form_data_shared['optype']['value']==2){ $JSONLDL['offers']['businessFunction']='Sell'; }elseif($form_data_shared['optype']['value']==1){ $JSONLDL['offers']['businessFunction']='LeaseOut'; } /*и вот для оффера мы уже определяем цену, валюту и доступность*/ $JSONLDL['offers']['price']=$form_data_shared['price']['value']; $JSONLDL['offers']['priceCurrency']=$form_data_shared['currency_id']['value_string']; $JSONLDL['offers']['availableAtOrFrom']['@type']='Place'; $JSONLDL['offers']['availableAtOrFrom']['address']['@type']='PostalAddress'; $JSONLDL['offers']['availableAtOrFrom']['address']['addressCountry']=$form_data_shared['country_id']['value_string']; $JSONLDL['offers']['availableAtOrFrom']['address']['addressRegion']=$form_data_shared['region_id']['value_string']; $JSONLDL['offers']['availableAtOrFrom']['address']['addressLocality']=$form_data_shared['city_id']['value_string'];
- 57 ответов
-
- seo
- струкрурированные данные
- (и ещё %d)