1) Не вижу противоречия между "написанием их в текстовом поле" через запятую и "добавление тэга в таблицу и привязка тэга к статье"... просто обработку строки, содержащей список тэгов делать после сохранения статьи (актуализировать связи с тэгами).
2) С этим "добавлять все слова/словосочетания,
а их список будет расширяться" тоже не вижу особой проблемы: добавление и перевод (обратный транслит) тэгов можно делать на автомате, а руками переводить только некорректные случаи.
А ещё лучше, при автоматическом создании тэгов в п.1 сохранять исходную русскую версию, тогда не придется править потом.
luckydan, зарегистрировать standalone-приложение и написать скрипт, который будет использовать метод wall.post
richard7, ещё рекомендую добавить проверки вводимых данных на клиенте и на сервере, чтобы посетители не забывали хотя бы одно из средств связи нормально ввести, а роботы пореже письмами одолевали, но на первое время пойдёт и так, это лучше, чем никак.
Лички, кстати, у Вас в данный момент нету. Отправил на почту.
Не вступая в дискуссию о том, что и когда лучше использовать, отмечу, что у меня ощущение, что ТС хочет сделать некий макет layout, а не оформить табличные данные.
На эту мысль меня наводит тот факт, что у таблиц height=100%, в этом, возможно, и была вообще загвоздка.
Раз уж там и так подключен JQuery, то полагаю его использование допустимо.
Вот мой вариант (их масса - в т.ч. без ajax) - в очень упрощенном виде (ссылку на JQuery можете изменить на свой экземпляр, ссылку на скрипт /test/send1.php - тоже на путь к скрипту у себя) - на своем хостинге я проверил непосредственно тот код, что привел ниже, письма приходят, т.е. программа-минимум выполнена, напильником дорабатывайте сами:
<html> <head> <style type="text/css"> .success { color: green; } .fail { color: red; } </style> <script src="//ajax.googleapis.com/ajax/libs/jquery/1.10.2/jquery.min.js"></script> <script language="javascript"> $(document).ready(function(){ $("#btnClear").click(function(){ clear_form(); }); $("#btnSend").click(function(){ send_form(); }); }); function clear_form() { $("#form input, #form textarea").val(''); } function send_form() { $.post("/test/send1.php", $("#form").serialize()).done(function(data){ $("#sendResult").addClass("success").html(data); clear_form(); }).fail(function(){ $("#sendResult").addClass("fail").html('Ошибка при отправке сообщения'); }); } </script> </head> <body> <form id="form" method="post" > <fieldset> <label><strong>Имя:</strong><input type="text" name="name" value=""></label> <label><strong>Ваш Email:</strong><input type="text" name="email" value=""></label> <label><strong>Телефон:</strong><input type="text" name="phone" value=""></label> <label><strong>Сообщение:</strong><textarea name="message"></textarea></label> <div class="btns"><a href="#" class="link" id="btnClear">Очистить</a><a href="#" class="link" id="btnSend">Отправить</a></div> <div id="sendResult"></div> </fieldset> </form> </body> </html>
/test/send1.php (очень упрощенный вариант):
<?php $to = "your@email.ru"; $from = "example@example.com"; $name = @$_POST['name']; $email = @$_POST['email']; $phone = @$_POST['phone']; $message = @$_POST['message']; $subj = "Запрос с сайта"; $text = "Имя: $name Телефон: $phone E-mail: $email Сообщение: $message "; $header = "MIME-Version: 1.0\nContent-type: text/plain; charset=UTF-8\nFrom: $from\n"; if(mail($to, '=?UTF-8?B?' . base64_encode($subject) . '?=', $text, $header)) { echo "Ваше сообщение отправлено"; } else { echo "Ошибка на сервере при отправке. Позвоните нам по телефону"; }
Отвлекаясь от вопроса целесообразности, пример мне стал интересен, поэтому вариант реализации привожу ниже.
Ваша таблица не везде отображается одинаково, как минимум в части обработки table height="100%" для внутренней таблицы, которая внутри <div> и внутри <center> (например, IE и Chrome думают на этот счёт по-разному - вот ваша таблица в действии).
Вот примерно (с оговорками - примечание см. ниже кода), что может получиться из этой таблицы:
<html> <head> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /> <style type="text/css"> html, body { height: 100%; } body { overflow: hidden; margin: 0; } .t1 { width: 100%; height: 100%; position: relative; } .t1c1 { width: 70%; background-color: #808080; position: absolute; } .t1c2 { width: 15%; background-color: #3cf; position: absolute; margin-left: 70%; } .t1c3 { width: 15%; background-color: #ccf; position: absolute; margin-left: 85%; } .t1c1, .t1c2, .t1c3 { height: 100%; text-align: center; vertical-align: top; } .t1c1div { text-align: center; } .t2 { display: table; } .t2r1, .t2r2 { display: table-row; } .t2r1c, .t2r2c { display: table-cell; } .t2 { width: 95%; height: 100%; margin: auto; } .t2 .tc { padding: 5px; } .t2r1 { height: 30px; } .t2r1c { background-color: #808000; text-align: left; height: 30px; } .center { text-align: center !important; } .t2r2c1, .t2r2c2 { width: 50%; height: 100%; text-align: left; background-color: #33f; float: left; } </style> </head> <body> <div class="t1"> <div class="t1c1">первое <div class="t1c1div"> <div id="t2" class="t2"> <div class="t2r1"> <div class="t2r1c"><div class="tc center">четвертое</div></div> </div> <div class="t2r2"> <div class="t2r2c"> <div class="t2r2c1"><div class="tc center">пятое</div></div> <div class="t2r2c2"><div class="tc center">шестое</div></div> </div> </div> <div class="t2r1"> <div class="t2r1c"><div class="tc">седьмое</div></div> </div> <div class="t2r2"> <div class="t2r2c"> <div class="t2r2c1"><div class="tc">восьмое</div></div> <div class="t2r2c2"><div class="tc">девятое</div></div> </div> </div> <div class="t2r1"> <div class="t2r1c"><div class="tc">десятое</div></div> </div> <div class="t2r2"> <div class="t2r2c"> <div class="t2r2c1"><div class="tc">одиннадцать</div></div> <div class="t2r2c2"><div class="tc">двенадцать</div></div> </div> </div> <div class="t2r1"> <div class="t2r1c"><div class="tc">тринадцать</div></div> </div> <div class="t2r2"> <div class="t2r2c"> <div class="t2r2c1"><div class="tc">четырнадцать</div></div> <div class="t2r2c2"><div class="tc">пятнадцать</div></div> </div> </div> </div> </div> </div> <div class="t1c2">два</div> <div class="t1c3">три</div> </div> </body> </html>
Этот пример в действии - тут.
Примечание. У меня в Chrome моя таблица отображается почти как ваша в IE (т.к. в Chrome 28 страница отображается, как я понимаю, не так, как задумано), за исключением ширины синих ячеек (которых по две в строке). Ширина этих ячеек у вас не указана, я поставил по 50%, а браузер думает немножко иначе (например, 45%/55%).
Использовать table-cell ещё и для этих div я не стал, т.к. возможно, это не столь важно.
В Chrome 28 table height=100% из вашего примера для внутренней таблицы (по крайней мере у меня) не имеет эффекта, т.к. вышестоящие <div> и <center> имеют высоту не 100%.
Ещё один пример без использования display: table/table-row/table-cell, но с использованием Javascript - тут.
Javascript/JQuery применяется для решения проблемы одновременного использования строк с фиксированной высотой совместно со строками с плавающей высотой, заданной в процентах, не применяя таблицы (в т.ч. через display: table/... и т.п.).
Ссылки на рабочие примеры привожу в соответствии с пп.1 п.3 правил, в качестве иллюстрации к утверждениям и для удобства сравнения.
Присоединяюсь. Непосредственно в указанной строке ошибки нет, в показанном фрагменте тоже. Надо проверить соответствие парных скобок блоков выше по тексту. Нужно смотреть весь код файла.
там же ссылки даны - https://twitter.com/settings/widgets/new/search?query=from%3Asezhukov
там можно создать виджет с последними твитами пользователя, всё на русском
после нажатия "Создать виджет" - скопировать код, который дают, из поля
Про ТЗ я уж молчу, но чтобы сократить ошибки телепатии, сначала попросите написать, или запишите со слов всё, что хочется сделать на сайте и чем подробнее, тем лучше. Или дизайн, структура и контент - на усмотрение исполнителя (т.е. Вас)? "Изменить имеющийся дизайн" - это ну очень растяжимо.
Если посмотреть Javascript-консоль в браузере:
TWITTER WIDGET: The Twitter API v1.0 is deprecated, and this widget has ceased functioning. TWITTER WIDGET: You can replace it with a new, upgraded widget from <https://twitter.com/settings/widgets/new/search?query=from%3Asezhukov> TWITTER WIDGET: For more information on alternative Twitter tools, see <https://dev.twitter.com/docs/twitter-for-websites>
Если вкратце, Twitter API 1.0, который используется в указанных двух виджетах, больше не работает (и не будет работать), предлагается обновить виджеты.