Новости Joomla

InterLinked - плагин автоматической внутренней перелинковки для Joomla

InterLinked - плагин автоматической внутренней перелинковки для Joomla

👩‍💻 InterLinked - плагин автоматической внутренней перелинковки для Joomla.Несвязанные статьи - это молчаливый убийца привлекательности вашего сайта на Joomla, который заставляет читателей сворачивать работу и подрывает эффективность вашего SEO. Content - InterLinked - это бесплатный, проверенный в боях плагин, который кладет конец этой бессмыслице, автоматически генерируя ссылки на основе ключевых слов между статьями на вашем сайте Joomla 5. Он создает сеть связей, используя ключевые слова статей (metakey) и ассоциации категорий, с настраиваемыми всплывающими подсказками, целевыми объектами ссылок и классами CSS, сохраняя при этом существующие ссылки и повышая производительность за счет кэширования. Кроме того, ссылки со временем меняются по мере того, как в новых статьях используются ключевые слова, что делает ваш контент свежим и актуальным.Возможности.- автоматическая перелинковка на основе значения meta-keywords материалов- встроенная поддержка материалов Joomla- пользовательские ассоциации категорий для создания ссылок (например "Блог" к "Учбеникам")- показ всплывающих подсказок к автоматическим ссылкам (опционально)- настраиваемый атрибут target для ссылок.- указание CSS класса для стилизации ссылок- кэширование совпадений ключевых слов и их ассоциаций- учёт существующих тегов <a> во избежание дублирующих ссылок- автоматическое добавление новых ссылок при появлении новых ассоциаций- веб-доступность: ARIA для ссылок с target="_blank".Плагин бесплатный. Заявлена поддержка Joomla 4 и Joomla 5.Joomla Extensions DirectoryСтраница расширенияСкачать@joomlafeed#joomla #расширения #seo

joomLab Gallery - плагин галереи изображений для Joomla

👩‍💻 joomLab Gallery - плагин галереи изображений для Joomla.Плагин joomLab Gallery позволит Вам добавлять в любой материал неограниченное количество галерей, а главное удобно управлять файлами и эффектами в каждой галерее.Плагин использует популярны скрипты Swiper.js и FancyBox. Первый для крутой организации и эффектов галерей, а второй для красивого и функционального показа оригинальных изображений на Вашем сайте.На данный момент плагин имеет 10 макетов вывода - это 10 различных эффектов галерей и Вы можете совмещать все 10 в 1 материале.Плагин позволяет гибко настраивать индивидуально каждую галерею в материале. Вы можете выбрать макет, эффекты и даже можете управлять функциями всплывающего окна изображения.Недостатки.Такой вид реализации не предусматривает выбор изображения на сервере. Т.е. Вы не можете выбрать уже добавленное фото, только загружать заново. Плагин не предоставляет возможности доступа к медиа-менеджеру.Плагин бесплатный. Разработчик - участник нашего сообщества Александр Новиков (@pro-portal).Страница расширения@joomlafeed#joomla #расширения

Готовлю большой выпуск, включающий интервью с участниками Joomla Ну что, интересная инициатива от...

Готовлю большой выпуск, включающий интервью с участниками Joomla Ну что, интересная инициатива от...

Готовлю большой выпуск, включающий интервью с участниками Joomla 🖨Ну что, интересная инициатива от @webtolkru в виде интервью с разными участниками весьма меня увлекла. Я, вооружившись данным примером, решил подготовить выпуск для NorrNext (@norrnext) и экстраполировал идею на международный масштаб. Теперь готовлю эксклюзивный выпуск с участниками Joomla сообщества со всего мира, которые, в той или иной мере, внесли свой вклад в развитие и популяризацию системы. Будут беседы с людьми из разных стран и фото с юбилейной символикой 📸Работа в процессе 👆 📝О результатах оповещу отдельно.

0 Пользователей и 1 Гость просматривают эту тему.
  • 10 Ответов
  • 3904 Просмотров
*

Korotkov

  • Новичок
  • 2
  • 0 / 0
Доброе время суток.
Понадобилось мне тут сделать для друзей небольшой сайт, с формой заказов товаров из каталогов икеа.
От формы требуется немногое, но я уже всю голову сломал, как это можно реализовать на приличном уровне, своих костылей изобретать не хочу, по этому остановился на Joomla, как на более популярной CMS/
Интересует, есть ли модули или расширения для Joomla, с помощью которых можно сделать форму, в которую пользователь будет вводить артикул или ссылку на товар из каталога ИКЕА. А ему будет выводиться картинка, название искомого товара с ценой, и тут же будет проведена проверка на наличие товара на складе. И так для нескольких товаров. А затем этот список одной клавишей отправлялся бы на е-меел.
Примеры реализации:
http://dostavkin.su/
http://shopikea.ru/checkout.php
http://namvezet.ru/

 !
*

voland

  • Легенда
  • 11026
  • 588 / 112
  • Эта строка съедает место на вашем мониторе
*

Korotkov

  • Новичок
  • 2
  • 0 / 0
Баз нет. Если бы они были, то можно было бы свой каталог сделать, и тогда бы вообще заморочек не было.
Как я понял из примеров выше, товарищи просто посылают хитрый запрос на сайт ИКЕА, и получают все данные средствами самого икеа.


вот какой ява скрипт нашел на намвезут.ру
Код: javascript
var CtProduct_Add = Class.create(CtComponent_Abstract, {
id: null,
element: null,
callback: null,
isUniqueUrlCallback: null,
showMessageCallback: null,
sendButton: null,
input: null,
addLoader: null,

initialize: function (htmlelement, callback, isUniqueUrlCallback, showMessageCallback) {
this.callback = callback;
this.showMessageCallback = showMessageCallback;
this.isUniqueUrlCallback = isUniqueUrlCallback;
this.element = $(htmlelement);
this.id = this.element.identify();
this.input = this.element.down('.ctProduct-item-add-input');
this.sendButton = this.element.down('.ctProduct-item-add-btn');

this.addLoader = new CtComponent_BlockLocker(this.element.down('.ctProduct-item-add-bg'));

Event.observe(this.input, 'keypress', this.onKeyPressHandler.bindAsEventListener(this));
Event.observe(this.sendButton, 'click', this.onSendButtonClickHandler.bindAsEventListener(this));
},

onKeyPressHandler: function (e) {
Event.getKey(e);
if (e.keyPressed.enter) {
this.onSendButtonClickHandler();
}
},

onSendButtonClickHandler: function() {
var url = this.input.getValue().trim();
if (url != '' && this.isUniqueUrlCallback(url)) {
this.addLoader.show();
new AJAX.Request('../../index/getinfo.html'/*tpa=http://namvezet.ru/index/getinfo.html*/, {
method: 'get',
parameters: {url: url},
onSuccess: function(transport, json) {
this.addLoader.hide();
if (json == null) {
CtPage.getComponent('error').refresh({content:transport.responseText});
return;
}
if (!this.showMessageCallback(json.message)) {
this.input.setValue('');
this.callback(transport.responseText);
}

document.body.fire('CtProduct_Item:refresh');
}.bind(this),
onFailure: function() {
alert("Ошибка! Невозможно обработать. Проверьте ваше Internet соединение")
}.bind(this)
});
}
}
});

var CtProduct_Item = Class.create(CtComponent_Abstract, {
id: null,
element: null,
priceElement: null,
countInput: null,
countWarning: null,
countLoader: null,
imageElement: null,
config: null,
configCurrentItem: null,
delButton: null,
deleteCallback: null,
changeCountCallback: null,
attrElementList: null,
idSendsCount: null,

initialize: function (htmlelement, deleteCallback, changeCountCallback) {
this.element = $(htmlelement);
this.id = this.element.identify();

this.deleteCallback = deleteCallback;
this.changeCountCallback = changeCountCallback;
this.delButton = this.element.down('.ctProduct-item-del');

this.countInput = this.element.down('.ctProduct-item-count-input');
this.countWarning = this.element.down('.ctProduct-item-count-warning');
this.countWarning.hide();
this.countLoader = this.element.down('.ctProduct-item-count-loader');
this.countLoader.hide();

var configContainer = this.element.down('.ctProduct-item-config');
this.config = configContainer.innerHTML.evalJSON(true);
configContainer.remove();

this.attrElementList = this.element.select('select.ctProduct-item-attr');
for (var i = 0; i < this.attrElementList.length; i++) {
Event.observe(this.attrElementList[i], 'change', this.eventSelectHandler.bindAsEventListener(this));
}

this.priceElement = this.element.down('.ctProduct-item-price');
this.imageElement = this.element.down('.ctProduct-item-image');

Event.observe(this.countInput, 'keyup', this.changeCount.bindAsEventListener(this));
Event.observe(this.delButton, 'click', this.onDelButtonClickHandler.bindAsEventListener(this));

Event.observe(document.body, 'CtProduct_Item:refresh', function() {
this.eventSelectHandler();
}.bindAsEventListener(this));

this.eventSelectHandler();
},

onDelButtonClickHandler: function() {
if (confirm("Удалить этот товар?")) {
this.element.remove();
this.deleteCallback(this);
}
},

getPrice: function() {
var currentItem = this.getCurrentItem();
if (currentItem == null) {
return 0;
}
return currentItem.price;
},

getCount: function() {
var count = parseInt(this.countInput.getValue(), 10);
if (!isNaN(count)) {
return count;
}
return 0;
},

getUrl: function() {
return this.config.data.url;
},


/**
*
*/
getCurrentItem: function() {
var variationId, i;

variationId = this._getVariationId();

for (i = 0; i < this.config.variations.length; i++) {
if (this.config.variations[i]['catEntryId'] == variationId) {
return this.config.variations[i];
}
}

return null;
},

/**
*
*/
updateCount: function() {
var currentItem = this.getCurrentItem();
if (currentItem == null) {
return;
} else if (currentItem.count_max < 3) {
this.countInput.setValue('--');
this.countInput.disable();
this.countWarning.update('Выбраной модели нет на складе!');
this.countWarning.show();
this.priceElement.addClassName('ctProduct-item-price-disabled');
this.countInput.addClassName('ctProduct-item-count-input-disable');
} else {
this.countInput.removeClassName('ctProduct-item-count-input-disable');
this.priceElement.removeClassName('ctProduct-item-price-disabled');
if (parseInt(this.getCount(), 10) < 0) {
this.countInput.setValue(1);
} else if (currentItem.count_max - this.getCount() <= 0) {
this.countWarning.update('На складе всего ' + currentItem.count_max + 'шт.');
this.countWarning.show();
this.countInput.setValue(currentItem.count_max);
} else {
this.countWarning.update('');
this.countWarning.hide();
this.countInput.enable();
if (isNaN(parseInt(this.countInput.getValue(), 10)) || this.countInput.getValue() <= 0) {
  if (this.countInput.getValue() == '') {
this.countInput.setValue('');
} else {
this.countInput.setValue(1);
}
}
}
}
this.changeCountCallback();
},


/**
*
*/
changeCount: function() {

var currentItem = this.getCurrentItem();
//console.log('changeCount', currentItem);

if (currentItem == null) {
return;
}
if (currentItem.count_max == undefined) {
if (this.idSendsCount) {
clearTimeout(this.idSendsCount);
this.idSendsCount = false;
}

this.countWarning.update('');
this.countWarning.hide();
this.countLoader.show();
this.priceElement.addClassName('ctProduct-item-price-disabled');
this.countInput.removeClassName('ctProduct-item-count-input-disable');
this.countInput.disable();

var param = {partNumber: currentItem.partNumber};
new AJAX.Request('../../index/getcount.html'/*tpa=http://namvezet.ru/index/getcount.html*/, {
method: 'get',
parameters: param,
onSuccess: function(transport) {
this.countLoader.hide();
var content = parseInt(transport.responseText, 10);
if (isNaN(content)) {
this.countWarning.update(transport.responseText);
this.countWarning.show();
this.idSendsCount = setTimeout(this.changeCount.bind(this), 3000);
return;
}

for (var i = 0; i < this.config.variations.length; i++) {
if (this.config.variations[i].partNumber == param.partNumber) {
this.config.variations[i].count_max = content;
break;
}
}

var currentItem = this.getCurrentItem();
if (currentItem != null && currentItem.partNumber == param.partNumber) {
this.updateCount();
}
}.bind(this),
onFailure: function() {
this.countLoader.hide();
alert("Ошибка! Невозможно обработать. Проверьте ваше Internet соединение");
}.bind(this)
});
} else {
this.updateCount();
}
},


/**
*
*/
_getVariationId: function(forceSelectIndex, valueToCheck) {
var values, value, summary;
values = [];
summary = [];

for (var i = 0; i < this.attrElementList.length; i++) {

if (forceSelectIndex
&& forceSelectIndex == i
  ) {
value = valueToCheck;
} else {
value = this.attrElementList[i].getValue();
}

values.push(value.split(';'));
}

if (!values[0]) {
return this.config.variations[0]['catEntryId'];
}

summary = values[0];

for (i = 0; i < values.length; i++) {
if (values[i + 1]) {
summary = values[i].intersect(values[i + 1]);
}
}

return summary[0] ? summary[0] : null;

},


eventSelectHandler: function() {

var variationId, i;

if (this.attrElementList.length > 1) {

for (i = 0; i < this.attrElementList[1].options.length; i++) {
var value = this.attrElementList[1].options[i].readAttribute('value');

variationId = this._getVariationId(1, value);

if (!variationId) {
Element.addClassName(this.attrElementList[1].options[i], 'ctProduct-item-attr-option-disabled');
Element.writeAttribute(this.attrElementList[1].options[i], 'disabled', 'disabled');
} else {
Element.removeClassName(this.attrElementList[1].options[i], 'ctProduct-item-attr-option-disabled');
Element.writeAttribute(this.attrElementList[1].options[i], 'disabled', null);
}

if (this.attrElementList[1].options[this.attrElementList[1].selectedIndex].disabled) {
for (i = 0; i < this.attrElementList[1].options.length; i++) {
if (!this.attrElementList[1].options[i].disabled) {
this.attrElementList[1].selectedIndex = i;
break;
}
}
}
}
}
//
var currentItem = this.getCurrentItem();

if (currentItem == null) {
return;
}

this.priceElement.update(formatPrice(currentItem.price));
Element.writeAttribute(this.imageElement, 'src', 'http://www.ikea.com' + currentItem.itemImgThumb);
//
this.changeCount();
},

highlight: function() {
new Effect.ScrollTo(this.element, {
duration: 0.2,
afterFinish: function() {
new Effect.Pulsate(this.element, {
afterFinish: function() {
var oldMessage = this.countWarning.innerHTML;
this.countWarning.update('Вот же этот товар!');
this.countWarning.show();
setTimeout(function () {
if (oldMessage != '') {
this.countWarning.update(oldMessage);
} else {
this.countWarning.update('');
this.countWarning.hide();
}
}.bind(this), 5000);
}.bind(this)
});
}.bind(this)
});
}
});


var CtProduct = Class.create(CtForm, {
id: null,
element: null,
totalPriceElement: null,
cityChoice: null,
productAdd: null,
productItem: [],

reassembly: function ($super) {
$super();
Event.observe(this.status.element, 'CtComponent:refresh', updateHeight);
this.totalPriceElement = this.element.down('.ctProduct-price');
var addElement = this.element.down('.ctProduct-item-add');
this.productAdd = new CtProduct_Add(addElement, this.productItemAdd.bind(this), this.isUniqueUrl.bind(this), this.showMessage.bind(this));

this.productItem.clear();
var productItemList = this.element.select('.ctProduct-item');
for (var i = 0; i < productItemList.length; i++) {
this.productItem.push(new CtProduct_Item(productItemList[i], this.productItemRemove.bind(this), this.changeTotalPrice.bind(this)));
}

updateHeight();
this.changeTotalPrice();
},

productItemAdd: function(content) {
Element.insert(this.productAdd.element, {before:content});
updateHeight();
var productItemList = this.element.select('.ctProduct-item');
this.productItem.push(new CtProduct_Item(productItemList.last(), this.productItemRemove.bind(this), this.changeTotalPrice.bind(this)));

this.changeTotalPrice();
},

productItemRemove: function(element) {
this.productItem = this.productItem.without(element);
this.changeTotalPrice();
},

changeTotalPrice: function() {
var totalPrice = 0;
for (var i = 0; i < this.productItem.length; i++) {
totalPrice += this.productItem[i].getPrice() * this.productItem[i].getCount();
}

this.totalPriceElement.update(formatPrice(totalPrice));
},

showMessage: function(message) {
this.status.hide();
if (message.length == 0) {
return false;
}

this.status.show(message);
return this.status.hasErrors(message);
},

isUniqueUrl: function(url) {
for (var i = 0; i < this.productItem.length; i++) {
if (this.productItem[i].getUrl() == url) {
this.productItem[i].highlight();
return false;
}
}

return true;
}
});


CtPage.registerScript('CtProduct');
« Последнее редактирование: 15.09.2012, 18:25:15 от Korotkov »
*

sibiryak

  • Осваиваюсь на форуме
  • 22
  • 0 / 0
*

Alienoff

  • Захожу иногда
  • 186
  • 0 / 0
*

Asttoxa

  • Осваиваюсь на форуме
  • 12
  • 0 / 0
Парсер на PHP который закидывает в твою базу нужные вещи и запускай периодически через CRON (если конечно хостинг позволяет).
А потом уже из своей базы верти как хочешь для юзера.
*

verstalshik

  • Завсегдатай
  • 1754
  • 95 / 1
Парсер на PHP который закидывает в твою базу нужные вещи и запускай периодически через CRON (если конечно хостинг позволяет).
А потом уже из своей базы верти как хочешь для юзера.
наверное да, тут главное чтобы икеа в банлист не поставила))))

проще тупо заходить скриптом сюда и получать инфу как положено)) - http://www.ikea.com/ru/ru/catalog/stockcheck/

ну и для ориентации в финансовом плане)) - http://opencartforum.ru/topic/18256-parser-tovarov-ikearu/
а то тут в соседней теме кто-то плакался, почему нет бесплатной кнопки бабло
« Последнее редактирование: 06.12.2013, 15:57:16 от verstalshik »
❶ НЕ СПРАВЛЯЕШЬСЯ САМ???  Поможем тут...  ❷ Калькулятор доставки - ЗАКАЖИ!!!...  ❸ Каталог компаний - ЖМИ!!!...  ❹ НОВИЧКИ! ВСЕ сюда! Первая консультация БЕСПЛАТНО!!
*

Alienoff

  • Захожу иногда
  • 186
  • 0 / 0
Форма заказа из каталога икеа, с калькулятором и проверкой доступности товара

Приветствую. Форму нашли?
*

Shustry

  • Гуру
  • 6434
  • 745 / 3
У Икеи не интересовались, может у них API есть?
*

8alance

  • Новичок
  • 1
  • 0 / 0
Скажите по опыту банит ли ИКЕА? Или предложите другое решение с ИКЕА, которое уже действует. Спасибо
Чтобы оставить сообщение,
Вам необходимо Войти или Зарегистрироваться
 

Добавления товара в магазин из личного кабинета

Автор itbc

Ответов: 5
Просмотров: 2107
Последний ответ 26.02.2024, 09:46:35
от itbc
Форма + калькулятор

Автор Alex_iPod

Ответов: 1
Просмотров: 1070
Последний ответ 15.09.2022, 14:32:46
от x1
Ищу компонент каталога игровых серверов

Автор Scaltro

Ответов: 0
Просмотров: 829
Последний ответ 01.08.2022, 22:21:18
от Scaltro
Компонент для создания каталога организаций

Автор THE KILLERS

Ответов: 3
Просмотров: 980
Последний ответ 11.04.2022, 00:38:49
от THE KILLERS
Компонент форма обратной связи или анкета для пользователей сайта

Автор disig

Ответов: 14
Просмотров: 2190
Последний ответ 01.07.2021, 03:35:15
от disig