Последние сообщения

Егор Савельев
Егор Савельев
  • Сообщений: 19
  • Последний визит: 24 февраля 2025 в 14:13

Жаль. Может как то тенденцию можно отследить?

Владислав Кузнецов
Владислав Кузнецов
  • Сообщений: 16
  • Последний визит: 14 марта 2025 в 17:25

Нельзя. Стратегия с метками никак не связана, если реклама намеренно не внес такую метку. И то, отметить он это может как 1, 2, 3..

Владислав Кузнецов
Владислав Кузнецов
  • Сообщений: 16
  • Последний визит: 14 марта 2025 в 17:25

Все хорошо, но нужны ссылки. Первое, ссылки с жирных сайтов и из США, Китая.

Второе, просто перевести с помощью ИИ на английский недостаточно, у Вас будет ломанный английский. Нужно самому переводу текста делать опять перевод на русский (обратный перевод), чтоб понять в каком плане нужно изменить. Английский язык не всегда понимает русские словосочетания, наречия и т.п. Для англосаксов понятие «Старый новый год» взрывает мозг. У них речи, принеси, подай и иди на х… не мешай.

Третий момент. Если Вы всё четко сделали, то стоит подождать минимум 3-и месяца, чтоб обновилась инфо. Гугл в последнее время вообще ленивым стал, поэтому может и больше.

Четвертый момент. Нужно исправлять все ошибки в Серче консоле. Чтоб страниц неиндексируемых было в разы меньше индексируемых. Иногда Гугл нужно просто делать переобходом косячных страниц, а иногда и исправлять ошибки. Например, в микроразметке Гугл не воспринимает кавычки, не указано верно время (международный формат) и т.п. Помогают сервисы быстрой индексации страниц. На каждую страницу на Вашем сайте должны идти внешние ссылки.

Пятый момент. Валидатор не является этапом ранжирования сайта. Да, круто когда нет ошибок, может на 0,1 секунды загрузится быстрее, но при этом столько геморроя. Проверено, если Вам нужно что-то разместить важное, а валидатор выдает ошибки, забейте на этот валидатор болт.

Ну и последний, шестой момент. Вообще интернет начал развиваться благодаря тому, что крупные издатели New York Times, Washington Post не могли оптимизировать свои статьи так, чтоб их читали пользователи. Появился поиск. Исходя из этого, Вы скажите этим изданиям оптимизировать свои статьи под Гугл, Вас засмеют, так как они и есть этот поиск. Другими словами, нужно знать основы SEO, но прям писать SEO тексты — это утопия.

Виталий Синицын
Виталий Синицын
  • Сообщений: 9
  • Последний визит: 10 февраля 2025 в 18:21

Егор Савельев, ссылки покупал, но качество проверить не могу. достаточно часто обновлял, пока не забил из-за отсутствия трафика.

Егор Савельев
Егор Савельев
  • Сообщений: 19
  • Последний визит: 24 февраля 2025 в 14:13

Тематика? Ссылки покупаете? Как часто обновляется контент? Текста сами пишите или переводом через deepl?

Сайт под США очень тяжело поднять, все известные вам способы в ру сегменте не помогут от слова совсем.

Виталий Синицын
Виталий Синицын
  • Сообщений: 9
  • Последний визит: 10 февраля 2025 в 18:21

Удалять

active
столбец из этой таблицы, но создайте еще одну таблицу, в которой будут храниться одна строка и один столбец с текущей активной строкой.
id
. Измените это сохраненное значение в триггере AFTER INSERT:

CREATE TABLE entity (     id INT(11),     name VARCHAR(50)     ); CREATE TABLE active_entity (     active_id INT(11)     ) SELECT 0 active_id;  CREATE TRIGGER store_active AFTER INSERT ON entity FOR EACH ROW UPDATE active_entity SET active_entity.active_id = CASE @active                                WHEN TRUE                                THEN NEW.id                                ELSE active_entity.active_id                                END; 
Редактировалось: 2 раза (Последний: 20 января 2025 в 02:12)
Владислав Кузнецов
Владислав Кузнецов
  • Сообщений: 16
  • Последний визит: 14 марта 2025 в 17:25

Следующее предложение может работать здесь как альтернатива вашему нынешнему подходу. Вместо текущего дизайна таблицы используйте этот:

CREATE TABLE entity (     id INT NOT NULL AUTO_INCREMENT,     name VARCHAR(50),     -- other columns here ); 

Предполагая, что последовательность автоматического увеличения всегда увеличивается, вы можете просто найти запись активного имени, используя:

SELECT * FROM entity WHERE name = 'blah' ORDER BY id DESC LIMIT 1; 

В случае, если две вставки с одинаковым именем поступают почти одновременно, MySQL всегда гарантирует, что одной из них будет присвоен самый высокий (последний)

id
ценить. Обратите внимание, что существуют сценарии, в которых следующее сгенерированное значение автоматического приращения не обязательно должно быть больше предыдущего. Но если вы никогда не удаляете записи из
entity
стол, этого не должно произойти. 

Редактировалось: 1 раз (Последний: 20 января 2025 в 02:13)
Егор Савельев
Егор Савельев
  • Сообщений: 19
  • Последний визит: 24 февраля 2025 в 14:13

А смысл писать, если там этот компонент выйдет в новой версии, тем более логично что там пишет команда, а тут Вы один будете, проще дождаться уже. 

Владислав Кузнецов
Владислав Кузнецов
  • Сообщений: 16
  • Последний визит: 14 марта 2025 в 17:25

Вот общий план, как можно реализовать компонент бронирования в ДСТ Мед:

Backend1. Модель бронирования:

class Booking extends Model {
protected $fillable = ['doctor_id', 'user_id', 'status', 'appointment_time'];
 
public function doctor() {
return $this->belongsTo(Doctor::class);
}
 
public function user() {
return $this->belongsTo(User::class);
}
}

1. Контроллер бронирования:

class BookingController extends Controller {
public function create(Request $request) {
$booking = Booking::create([
'doctor_id' => $request->doctor_id,
'user_id' => $request->user_id,
'status' => 'pending',
'appointment_time' => $request->appointment_time,
]);
 
return response()->json($booking);
}
 
public function updateStatus(Request $request, $id) {
$booking = Booking::find($id);
$booking->status = $request->status;
$booking->save();
 
return response()->json($booking);
}
 
public function index() {
$bookings = Booking::with('doctor', 'user')->get();
return response()->json($bookings);
}
}

1. Маршруты:

Route::post('/bookings', [BookingController::class, 'create']);
Route::put('/bookings/{id}/status', [BookingController::class, 'updateStatus']);
Route::get('/bookings', [BookingController::class, 'index']);

Frontend1. Форма бронирования:

<form id="bookingForm">
<input type="hidden" name="doctor_id" value="{{ doctor.id }}">
<input type="hidden" name="user_id" value="{{ user.id }}">
<input type="datetime-local" name="appointment_time" required>
<button type="submit">Забронировать</button>
</form>
<script>
document.getElementById('bookingForm').addEventListener('submit', function(e) {
e.preventDefault();
const formData = new FormData(this);
 
fetch('/bookings', {
method: 'POST',
body: formData
}).then(response => response.json())
.then(data => {
alert('Бронирование успешно создано!');
});
});
</script>

1. Админка для управления бронированиями:

<table id="bookingsTable">
<thead>
<tr>
<th>Врач</th>
<th>Пациент</th>
<th>Время</th>
<th>Статус</th>
<th>Действия</th>
</tr>
</thead>
<tbody>
<!-- Здесь будут строки с бронированиями -->
</tbody>
</table>
<script>
function loadBookings() {
fetch('/bookings')
.then(response => response.json())
.then(data => {
const tableBody = document.querySelector('#bookingsTable tbody');
tableBody.innerHTML = '';
data.forEach(booking => {
const row = document.createElement('tr');
row.innerHTML = `
<td>${booking.doctor.name}</td>
<td>${booking.user.name}</td>
<td>${booking.appointment_time}</td>
<td>${booking.status}</td>
<td>
<select onchange="updateStatus(${booking.id}, this.value)">
<option value="pending" ${booking.status === 'pending' ? 'selected' : ''}>В ожидании</option>
<option value="accepted" ${booking.status === 'accepted' ? 'selected' : ''}>Принято</option>
<option value="rejected" ${booking.status === 'rejected' ? 'selected' : ''}>Отказано</option>
</select>
</td>
`;
tableBody.appendChild(row);
});
});
}
 
function updateStatus(id, status) {
fetch(`/bookings/${id}/status`, {
method: 'PUT',
headers: {
'Content-Type': 'application/json'
},
body: JSON.stringify({ status })
}).then(response => response.json())
.then(data => {
alert('Статус обновлен!');
loadBookings();
});
}
 
loadBookings();
</script>

База данных1. Миграция для таблицы бронирований:

Schema::create('bookings', function (Blueprint $table) {
$table->id();
$table->foreignId('doctor_id')->constrained();
$table->foreignId('user_id')->constrained();
$table->string('status');
$table->timestamp('appointment_time');
$table->timestamps();
});

Этот пример демонстрирует базовую реализацию компонента бронирования. Вы можете адаптировать его под вашу конкретную архитектуру и требования.

Егор Савельев
Егор Савельев
  • Сообщений: 19
  • Последний визит: 24 февраля 2025 в 14:13

Использовать:

SELECT t.contactid     FROM YOUR_TABLE t    WHERE flag IN ('Volunteer', 'Uploaded') GROUP BY t.contactid   HAVING COUNT(DISTINCT t.flag) = 2 

Главное, чтобы подсчет

t.flag
должно равняться количеству аргументов в
IN
пункт.

Использование

COUNT(DISTINCT t.flag)
в случае, если нет уникального ограничения на комбинацию контактного идентификатора и флага — если нет вероятности дублирования, вы можете опустить DISTINCT из запроса:

SELECT t.contactid     FROM YOUR_TABLE t    WHERE flag IN ('Volunteer', 'Uploaded') GROUP BY t.contactid   HAVING COUNT(t.flag) = 2 
Редактировалось: 1 раз (Последний: 20 января 2025 в 02:14)
Владислав Кузнецов
Владислав Кузнецов
  • Сообщений: 16
  • Последний визит: 14 марта 2025 в 17:25

Вы можете использовать

GROUP BY
и
HAVING COUNT(*) = _
:

SELECT contact_id FROM your_table WHERE flag IN ('Volunteer', 'Uploaded', ...) GROUP BY contact_id HAVING COUNT(*) = 2 -- // must match number in the WHERE flag IN (...) list 

(при условии

contact_id, flag
является уникальным).

Или используйте объединения:

SELECT T1.contact_id FROM your_table T1 JOIN your_table T2 ON T1.contact_id = T2.contact_id AND T2.flag = 'Uploaded' -- // more joins if necessary WHERE T1.flag = 'Volunteer' 

Если список флагов очень длинный и много совпадений, первый, вероятно, будет быстрее. Если список флагов короткий и совпадений мало, вы, вероятно, обнаружите, что второй быстрее. Если производительность вызывает беспокойство, попробуйте протестировать оба варианта на своих данных, чтобы определить, какой из них работает лучше всего. 

Редактировалось: 1 раз (Последний: 20 января 2025 в 02:14)
Автотрейд
Автотрейд
  • Сообщений: 19
  • Последний визит: 28 мая 2025 в 15:19

Если вы создадите индекс на

table(col1, col2)
, и ты делаешь
WHERE col1 = 'something' AND col2 = 'something'
вы будете использовать индекс; это будет очень избирательно. То же самое с
WHERE col1 = 'something'

Но

WHERE col1 IS NOT NULL
вам придется протестировать.
WHERE col1 IS NULL
будет сканировать таблицу, поскольку в этой ситуации индекс вовсе не является избирательным.

Обновление индекса с помощью INSERT или UPDATE требует небольших накладных расходов. Это не может быть УНИКАЛЬНЫЙ индекс, поэтому рабочая нагрузка немного меньше. Но в большинстве случаев об этом не стоит беспокоиться, если только ваша рабочая нагрузка INSERT/UPDATE не намного тяжелее рабочей нагрузки SELECT. Если вы можете сделать столбцы

COLLATE latin1_bin
вы получите максимально легкие индексы. Но никаких смайлов, китайских иероглифов или нечувствительности к регистру.

Редактировалось: 1 раз (Последний: 20 января 2025 в 01:45)
Автотрейд
Автотрейд
  • Сообщений: 19
  • Последний визит: 28 мая 2025 в 15:19
Всё зависит от ваших целей. Если вы стремитесь создать MVP (минимально жизнеспособный продукт), то вам подойдёт CS Cart. Это быстро и недорого.

Если же вы хотите настоящий, эффективно работающий маркетплейс, то лучше выбрать ДСТ. Однако стоит помнить, что никакой движок не может заменить организационную работу. Многие начинающие предприниматели не понимают этого и не учитывают, когда открывают свой бизнес.

Кроме выбора CMS-системы, вам понадобятся качественный бизнес-план, финансовые средства, товары и поставщики, а также соответствующие документы.
Редактировалось: 1 раз (Последний: 19 января 2025 в 19:17)
Автотрейд
Автотрейд
  • Сообщений: 19
  • Последний визит: 28 мая 2025 в 15:19
Вы можете использовать тип объединения, который позволяет enforceAdvancedOrder быть логическим значением, если enableAdvancedFeatures установлено на true и в противном случае требует, чтобы enforceAdvancedOrder является неопределенным.

Вот как:
type Options = ({
    settings?: Settings<true>;
    enforceAdvancedOrder?: boolean;
} | {
    settings?: Settings<false | undefined>;
    enforceAdvancedOrder?: never;
});
 
type Settings<B extends boolean | undefined = boolean> = B extends undefined ? {
    enableAdvancedFeature?: B;
} : {
    enableAdvancedFeature: B;
};

Вот несколько образцов для проверки:
const validOption1: Options = {
    settings: { enableAdvancedFeature: true },
    enforceAdvancedOrder: true,
};
 
const validOption2: Options = {
    settings: { enableAdvancedFeature: false },
    enforceAdvancedOrder: undefined, // enforceAdvancedOrder should be undefined
};
 
const validOption3: Options = {
    settings: {},
    enforceAdvancedOrder: undefined, // enforceAdvancedOrder should be undefined
};
 
const invalidOption: Options = {
    settings: { enableAdvancedFeature: false },
    enforceAdvancedOrder: true, // This should cause a TypeScript error
};
 
const invalidOption2: Options = {
    settings: {},
    enforceAdvancedOrder: true, // This should cause a TypeScript error
};
Владимир Соколов
Владимир Соколов
  • Сообщений: 31
  • Последний визит: 26 марта 2025 в 00:57
Просто так:
type ConditionalOption =
    | { enforceAdvancedOrder?: boolean, settings?: { enableAdvancedFeature?: true } }
    | { enforceAdvancedOrder?: undefined, settings?: { enableAdvancedFeature?: false | undefined } }

Примеры:
let a: ConditionalOption = {
    settings: {
        enableAdvancedFeature: true
    },
    enforceAdvancedOrder: true
} // okay
 
let b: ConditionalOption = {
    settings: {
        enableAdvancedFeature: false
    },
    enforceAdvancedOrder: true
} // throws error
 
let c: ConditionalOption = {
    settings: {
        enableAdvancedFeature: false
    },
    enforceAdvancedOrder: undefined
} // okay
← Предыдущая Следующая → Первая 76 77 78 79 80 81 82
Показаны 1171-1185 из 1228

Заявка на услуги DST

Наш специалист свяжется с вами, обсудит оптимальную стратегию сотрудничества,
поможет сформировать бизнес требования и рассчитает стоимость услуг.

Адрес

Ижевск, ул. Воткинское шоссе 170 Е.
Региональный оператор Сколково. Технопарк Нобель

8 495 1985800
Заказать звонок

Режим работы: Пн-Пт 10:00-19:00

info@dstglobal.ru

Задать вопрос по почте

Укажите ваше имя
Укажите ваше email
Укажите ваше телефон